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.
63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
#include "webcc/soap_request.h"
|
|
|
|
#include "webcc/soap_xml.h"
|
|
|
|
namespace webcc {
|
|
|
|
void SoapRequest::AddParameter(const SoapParameter& parameter) {
|
|
parameters_.push_back(parameter);
|
|
}
|
|
|
|
void SoapRequest::AddParameter(SoapParameter&& parameter) {
|
|
parameters_.push_back(std::move(parameter));
|
|
}
|
|
|
|
const std::string& SoapRequest::GetParameter(const std::string& key) const {
|
|
for (const SoapParameter& p : parameters_) {
|
|
if (p.key() == key) {
|
|
return p.value();
|
|
}
|
|
}
|
|
|
|
static const std::string kEmptyValue;
|
|
return kEmptyValue;
|
|
}
|
|
|
|
void SoapRequest::ToXmlBody(pugi::xml_node xbody) {
|
|
pugi::xml_node xop = soap_xml::AddChild(xbody, service_ns_.name, operation_);
|
|
soap_xml::AddNSAttr(xop, service_ns_.name, service_ns_.url);
|
|
|
|
for (SoapParameter& p : parameters_) {
|
|
pugi::xml_node xparam = soap_xml::AddChild(xop, service_ns_.name, p.key());
|
|
|
|
// xparam.text().set() also works for PCDATA.
|
|
xparam.append_child(p.as_cdata() ? pugi::node_cdata : pugi::node_pcdata)
|
|
.set_value(p.c_value());
|
|
}
|
|
}
|
|
|
|
bool SoapRequest::FromXmlBody(pugi::xml_node xbody) {
|
|
pugi::xml_node xoperation = xbody.first_child();
|
|
if (!xoperation) {
|
|
return false;
|
|
}
|
|
|
|
soap_xml::SplitName(xoperation, &service_ns_.name, &operation_);
|
|
service_ns_.url = soap_xml::GetNSAttr(xoperation, service_ns_.name);
|
|
|
|
pugi::xml_node xparameter = xoperation.first_child();
|
|
while (xparameter) {
|
|
parameters_.push_back({
|
|
soap_xml::GetNameNoPrefix(xparameter),
|
|
// xparameter.text().get/as_string() also works.
|
|
std::string(xparameter.child_value())
|
|
});
|
|
|
|
xparameter = xparameter.next_sibling();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
} // namespace webcc
|