You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
![]()
7 years ago
|
#include "webcc/soap_client.h"
|
||
![]()
8 years ago
|
|
||
|
#include <cassert>
|
||
|
|
||
![]()
7 years ago
|
#include "webcc/http_client.h"
|
||
|
#include "webcc/http_request.h"
|
||
|
#include "webcc/http_response.h"
|
||
|
#include "webcc/soap_request.h"
|
||
|
#include "webcc/soap_response.h"
|
||
![]()
8 years ago
|
|
||
![]()
7 years ago
|
namespace webcc {
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
Error SoapClient::Call(const std::string& operation,
|
||
![]()
8 years ago
|
std::vector<Parameter>&& parameters,
|
||
![]()
8 years ago
|
std::string* result) {
|
||
![]()
8 years ago
|
assert(service_ns_.IsValid());
|
||
|
assert(!url_.empty() && !host_.empty());
|
||
|
assert(!result_name_.empty());
|
||
|
|
||
|
if (!soapenv_ns_.IsValid()) {
|
||
|
soapenv_ns_ = kSoapEnvNamespace;
|
||
|
}
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
SoapRequest soap_request;
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
soap_request.set_soapenv_ns(soapenv_ns_);
|
||
![]()
8 years ago
|
soap_request.set_service_ns(service_ns_);
|
||
|
|
||
|
soap_request.set_operation(operation);
|
||
|
|
||
![]()
8 years ago
|
for (Parameter& p : parameters) {
|
||
|
soap_request.AddParameter(std::move(p));
|
||
![]()
8 years ago
|
}
|
||
|
|
||
![]()
8 years ago
|
std::string http_content;
|
||
|
soap_request.ToXml(&http_content);
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
HttpRequest http_request;
|
||
![]()
8 years ago
|
|
||
![]()
7 years ago
|
http_request.set_method(kHttpPost);
|
||
|
http_request.set_url(url_);
|
||
![]()
8 years ago
|
http_request.SetContentType(kTextXmlUtf8);
|
||
|
http_request.SetContentLength(http_content.size());
|
||
|
http_request.SetHost(host_, port_);
|
||
![]()
7 years ago
|
http_request.SetHeader(kSoapAction, operation);
|
||
![]()
8 years ago
|
http_request.set_content(std::move(http_content));
|
||
![]()
8 years ago
|
|
||
![]()
7 years ago
|
http_request.MakeStartLine();
|
||
|
|
||
![]()
8 years ago
|
HttpResponse http_response;
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
HttpClient http_client;
|
||
|
Error error = http_client.SendRequest(http_request, &http_response);
|
||
![]()
8 years ago
|
|
||
![]()
8 years ago
|
if (error != kNoError) {
|
||
|
return error;
|
||
![]()
8 years ago
|
}
|
||
|
|
||
![]()
8 years ago
|
SoapResponse soap_response;
|
||
![]()
8 years ago
|
soap_response.set_result_name(result_name_);
|
||
|
|
||
![]()
8 years ago
|
if (!soap_response.FromXml(http_response.content())) {
|
||
![]()
8 years ago
|
return kXmlError;
|
||
![]()
8 years ago
|
}
|
||
|
|
||
![]()
8 years ago
|
*result = soap_response.result();
|
||
|
|
||
|
return kNoError;
|
||
![]()
8 years ago
|
}
|
||
|
|
||
![]()
7 years ago
|
} // namespace webcc
|