kEndChild(pEleRoot);
TiXmlElement *pEleFileHeader = new TiXmlElement("FileHeader");
TiXmlElement *pEleFileBody = new TiXmlElement("FileBody");
pEleRoot->LinkEndChild(pEleFileHeader);
pEleRoot->LinkEndChild(pEleFileBody);
TiXmlElement *pEleMessageType = new TiXmlElement("MessageType");
TiXmlElement *pEleOriginator = new TiXmlElement("Originator");
TiXmlElement *pEleRecipient = new TiXmlElement("Recipient");
TiXmlElement *pEleCreationTime = new TiXmlElement("CreationTime");
pEleFileHeader->LinkEndChild(pEleMessageType);
pEleFileHeader->LinkEndChild(pEleOriginator);
pEleFileHeader->LinkEndChild(pEleRecipient);
pEleFileHeader->LinkEndChild(pEleCreationTime);
TiXmlText *pEleMessageTypeText = new TiXmlText("ProxyMiddleWareJobSearch");
TiXmlText *pEleOriginatorText = new TiXmlText("WetLand");
TiXmlText *pEleRecipientText = new TiXmlText("Platform");
TiXmlText *pEleCreationTimeText = new TiXmlText("2014-9-18 10:25:20");
pEleMessageType->LinkEndChild(pEleMessageTypeText);
pEleOriginator->LinkEndChild(pEleOriginatorText);
pEleRecipient->LinkEndChild(pEleRecipientText);
pEleCreationTime->LinkEndChild(pEleCreationTimeText);
//!
TiXmlElement *pEleUserName = new TiXmlElement("UserName");
TiXmlElement *pEleUserRoleID = new TiXmlElement("UserRoleID");
TiXmlElement *pEleJobType = new TiXmlElement("JobType");
pEleFileBody->LinkEndChild(pEleUserName);
pEleFileBody->LinkEndChild(pEleUserRoleID);
pEleFileBody->LinkEndChild(pEleJobType);
TiXmlText *pEleUserNameText = new TiXmlText("...");
TiXmlText *pEleUserRoleIDText = new TiXmlText("13");
TiXmlText *pEleJobTypeText = new TiXmlText("");
pEleUserName->LinkEndChild(pEleUserNameText);
pEleUserRoleID->LinkEndChild(pEleUserRoleIDText);
pEleJobType->LinkEndChild(pEleJobTypeText);
pDoc->SaveFile("E:/houqd.xml");
3) 生成XML字符串
生成XML字符串只需要将如上的pDoc->SaveFile(“E:/houqd.xml”)替换为如下:
//!生成string字符串
TiXmlPrinter printer;
pDoc->Accept(&printer);
string strRequest(printer.CStr());
2. C++调SOAP的开源库
我们采用gsoap作为开源的web service的实现框架,可以从网上下载到开源的代码实现。下载地址:http://gsoap2.sourceforge.net/ 一般下载的gsoap工具包中已经包含了生成Web Service客户端需要用到的两个工具(可执行文件):wsdl2h.exe和soapcpp2.exe,windows开发包一般在gsoap/bin/win32下,默认情况下wsdl2h并不支持SSL,即无法访问HTTPS站点,如果想要支持SSL等更多功能,就需要自己重新配置编译该gsoap工具包,以生成新的wsdl2h.exe和soapcpp2.h。这里,我采用的是原生的文件。
相关参考资料:http://blog.csdn.net/zhaiwenjuan/article/details/6590941
1) gsoap生成本地代理
1> 根据wsdl生成相应的头文件
从Web服务提供者处获取Web Service的WSDL文件,通常是一个URL,如:http://www.somewebservice.com/Service?Wsdl,当然也可以是一个WSDL形式的XML文件。
使用gsoap的wsdl2h.exe,根据WSDL生成一个C/C++语法结构的头文件。
例如:wsdl2h.exe -s -o Service.h http://www.somewebservice.com/Service?Wsdl
这一步执行完后会得到一个头文件,如:Service.h
该步的目的:实现WSDL文件到.h文件的数据映射。
2> 根据生成的头文件生成相关代理文件
使用gsoap的预编译器soapcpp2.exe,根据上一步得到的头文件来生成存根文件soapStub.h和客户端代码框架:
如:soapcpp2.h -i -x -C -L Service.h
这一步将会得到几个.nsmap、.h和.cpp文件。该步的目的:生成相应的底层通信代码。
2) gsoap调用webservice接口
将上几步生成的文件加入到工程中,并包含响应的头文件,并采用如下的调用方式:
string strRequest(printer.CStr());
//!web service调接口
string strWebServiceAddr = "http://172.16.10.209:8080/HDHT_J2EE/services/ProxyMiddleWareJob?wsdl";
ProxyMiddleWareJobHttpBindingProxy *proxy = new Proxy