ãã®ãããããäžã§gSOAPã䜿çšããããšã¯éåžžã«äžååã«ãã説æãããŠããŸããã æ£çŽã«èšããšããã£ã
1ã€ã®æçš¿ã§ãã ããããWebãµãŒãã¹ã®äœæã«ã€ããŠèª¬æããŠããŸãããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã¯ã©ãã§ããïŒ å°ãåãŸã§ãSOAPã䜿çšããŠãªã¢ãŒããµãŒããŒãšã®äœæ¥ãæŽçããäœæ¥ã«çŽé¢ããŠããŸãããããã«ã€ããŠçãèšäºãæžãããšã«ããŸããã
ãªããªã ç§ãåããŠããwsdlãã¡ã€ã«ïŒNDAãªã©ïŒãæäŸã§ããªãã£ãããããã¹ãã«é©ãããµãŒãã¹ãæ¢ãå§ããŸããã 2ã€ã¯ç§ã«ãšã£ãŠé¢çœããã ã£ãïŒ
http://www.webservicex.net/ValidateEmail.asmx?WSDLhttp://www.webservicex.net/country.asmx?WSDLããã§ãwsdlãã¡ã€ã«ãããŠã³ããŒãããå ŽæãèŠã€ãããªãã£ãã®ã§ããããã®ã³ã³ãã³ããã³ããŒããValidateEmail.wsdlããã³country.wsdlãšããååã§ä¿åããŸãã
gSOAPã¯
http://www.cs.fsu.edu/~engelen/soap.htmlããããŠã³ããŒãã§ããŸãã åãã¢ãã¬ã¹ã§gSOAPã«ã€ããŠèªãããšãã§ããŸãã
å·çæç¹ã§ã®ææ°ããŒãžã§ã³ã¯2.8.14ã§ãã
ä»äºã«åãæãããŸãããã 2ã€ã®éåžžã«éèŠãªãŠãŒãã£ãªãã£ãgsoap \ bin \ win32 \ãã©ã«ããŒã«ãããŸãã ãŸããwsdl2h.exeã«èå³ããããŸãã ãã«ãã䜿çšããŠã詳现ã確èªã§ããŸãã
> wsdlh2.exe -h次ã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠå®è¡ããŸãã
wsdl2h.exe -o emailAndCountry.h ValidateEmail.wsdl country.wsdlãã¹ãŠãéåžžã«åçŽã§ããåºåãã¡ã€ã«ã®ååãšãåŠçããwsdlãã¡ã€ã«ã®ãªã¹ãã®ã¿ãæå®ããŸããã
ãã®åŸãC ++ã¯ã©ã¹ã®ã³ãŒããçŽæ¥çæããŸãã
soapcpp2.exe -C -dgSoap -j -L -x -I "ADDRESS_TO_GSOAP \ gsoap-2.8 \ gsoap \ import" emailAndCountry.h-Cã¹ã€ããã¯ãã¯ã©ã€ã¢ã³ãã³ãŒãã®ã¿ãçæããå¿
èŠãããããšã瀺ããŸãã
-dgSoapã¯ããã¹ãŠã®ãã¡ã€ã«ãgSoapãã©ã«ããŒã«å
¥ããããã«èŠæ±ããŸãïŒæåã«äœæããå¿
èŠããããŸãïŒã libãã¡ã€ã«ãçæãããsoapæ§é ããç¶æ¿ããŸããã -xã¹ã€ããã¯ããµã³ãã«ã¡ãã»ãŒãžãå«ãXMLãã¡ã€ã«ãçæããªãããã«èŠæ±ããŸãã gSOAPã䜿çšããŠãã©ã«ããŒã®ã¢ãã¬ã¹ãæå®ãã解æãããã¡ã€ã«ãæå®ããŠããã®ãã¡ã€ã«ã«åºã¥ããŠã³ãŒããçæããŸãã
ç°ãªãããŒãžã§ã³ã®gSOAPã¯ç°ãªãã³ãŒãïŒäžè¬ã«è«ççïŒãçæã§ãããã¡ã€ã«ã®æ§æãç°ãªããŸãã ããã¯ããã«ããµãŒããŒäžã§gSOAPãã¡ã€ã«ãçªç¶çæããããŒãžã§ã³ç®¡çã·ã¹ãã ã«ä¿åããªãå Žåã«èŠããŠããããšãéèŠã§ãã
gSoapãã©ã«ããŒã§ã®ãã¹ãŠã®æäœã®åŸãå€ãã®æ°ãããã¡ã€ã«ã衚瀺ãããŸãã ãããã¯ã-hããã³-cppãã¡ã€ã«ã«å ããŠãcountrySoap.nsmapããã³ValidateEmailSoap.nsmapã§ãã ãããã¯äžèŽãããã®å
容ã1ã€ïŒããšãã°ãnamespaces.nsmapïŒã«ä¿åããŠåé€ã§ããŸãã namespaces.nsmapããããžã§ã¯ãã«å«ããå¿
èŠããããŸãã éåžžãããã¯gSOAPã§åäœããäœããã®çš®é¡ã®ãã«ããŒã¯ã©ã¹ã§è¡ãããŸãã ã¯ãããã®ãããªã¯ã©ã¹ã¯ç¢ºãã«ååšããŸãã
ãã®åŸãstdsoap2.hãšstdsoap2.cppãgSoapãã©ã«ããŒã«è¿œå ããŸã-ãããã¯soapStub.hã«å«ãŸããŸã
ãã©ã«ããŒå
šäœããããžã§ã¯ãã«è¿œå ããäœæ¥ãéå§ããŸã:)
ã¯ã©ã¹soapcountrySoapProxy.cppããã³soapValidateEmailSoapProxy.cppãèŠãŠãã ããã in * _initã¡ãœããïŒsoap_mode imodeãsoap_mode omodeïŒ-åå空éãåé€ããŸãïŒnamespaces.nsmapãæå³çã«å«ããŸããïŒã
é»åã¡ãŒã«æ€èšŒæ©èœããå§ããŸããã-gSoap / soapValidateEmailSoapProxy.h
æ¹æ³ã«èå³ããããŸã
ä»®æ³int IsValidEmailïŒ_ns1__IsValidEmail * ns1__IsValidEmailã_ns1__IsValidEmailResponse * ns1__IsValidEmailResponseïŒ
ãã®é¢æ°ã®åŒæ°ã®èª¬æãåç
§ããŠãã ããã
class SOAP_CMAC _ns1__IsValidEmail { public: std::string *Email; struct soap *soap;
* [ã¡ãŒã«]ãã£ãŒã«ãã¯ãããã圹ã«ç«ã€ã§ãããã
ãã®ã¯ã©ã¹ã®ãªããžã§ã¯ããäœæãããã§ãã¯ãããªããžã§ã¯ããæå®ããŸã
_ns1__IsValidEmail isValidEmailRequest; std::string CHECKED_E_MAIL("pisem@sovsem.net"); isValidEmailRequest.Email = &CHECKED_E_MAIL;
çµæãåŸããããªããžã§ã¯ããããã«äœæããŸãã
_ns1__IsValidEmailResponse isValidEmailResponse;
çµæã¯bool IsValidEmailResultãã£ãŒã«ãã«ããããšãããããŸãã
ãµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸãã
const int gSoapResult = validateEmailProxy.IsValidEmail(&isValidEmailRequest, &isValidEmailResponse);
éä¿¡ããã¹ããã¡ãŒãæ£ç¢ºã«ç¢ºèªããŸãã
<?xml version="1.0" encoding="UTF-8" ?> - <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://www.webservicex.net" xmlns:ns2="http://www.webserviceX.NET"> - <SOAP-ENV:Body> - <ns1:IsValidEmail> <ns1:Email>pisem@sovsem.net</ns1:Email> </ns1:IsValidEmail> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
çããèŠããšãçµæãã£ãŒã«ããfalseã§ããããšãããããŸãã ã¹ããã¡ãŒã¯ããã確èªããŸãã
å¥ã®ã¢ãã¬ã¹ãè©ŠããŠãã ãã-press@fsb.ru
ãµãŒããŒãããªãé·ãéèããŠããããšã«ããã«æ°ã¥ããŸãããããã¯æ€èšŒãããŠããã¢ãã¬ã¹ãšã¯ã»ãšãã©é¢ä¿ãããŸããã
ããããããã§ããªãçããããããã®ã¢ãã¬ã¹ã¯ç§ãã¡ã«ãšã£ãŠç¡å¹ãšèŠãªãããŸãã
ããŠãæããã«ãæªããã¢ãã¬ã¹ãè©ŠããŠãã ãã-ã1354 @ã
ãªãŒãã¿ã€ã ã¯æ°žé ã§ãã æ¬åœã«é·ãéæ©èœããŸãã
çŽ1ååŸãç§ã¯åŸ
ã€ããšã«ããããããŠããã®ã§ãæå¹ãªã¢ãã¬ã¹-adv@thematicmedia.ruãå床確èªããããšã«ããŸããã
OKãçµæã¯åœã§ãã
adv @ thematicmedia-false
adv @ l-false
ç§ã¯å€ä»£ã®ã¡ãŒã«ããã¯ã¹ã®1ã€ãè©ŠããŸãã-ãµãŒããŒã¯åã³èããŠããŸããã é·ãéã ãããã圌ã¯ãŸã çããŸãã-åœã
ããŠãåé¡ã¯ãµãŒããŒã®ã¿ã«ããããšãããããã³ãŒãã¯ãµãŒããŒã®å¿çãæ£ããéä¿¡ããŸãã ã³ãŒãã¯æ©èœããŸããããŸã£ãã圹ã«ç«ã¡ãŸããã
2çªç®ã®ã¯ã©ã¹ãcountrySoapProxyãè©ŠããŸã
圌ã®ã¡ãœããã®æ°ã¯ãã£ãšå€ããããããŒã§èŠãããšãã§ããŸãã
GetCountryByCountryCodeããé çªã«ãã¹ãããŸãã
_ns2__GetCountryByCountryCode getCountryByCountryCodeRequest; std::string COUNTRY_CODE("GB"); getCountryByCountryCodeRequest.CountryCode = &COUNTRY_CODE; _ns2__GetCountryByCountryCodeResponse getCountryByCountryCodeResponse; countrySoapProxy countryProxy; const int gSoapResult = countryProxy.GetCountryByCountryCode(&getCountryByCountryCodeRequest, &getCountryByCountryCodeResponse); if (gSoapResult != SOAP_OK) { std::cout << "FAIL" << std::endl; return 0; }
åãåã£ãåçïŒ
<NewDataSet> <Table> <countrycode>gb</countrycode> <name>Great Britain</name> </Table> <Table> <countrycode>gb</countrycode> <name>Great Britain</name> </Table> </NewDataSet>
çãã¯åœã ãã§ãããå¥å
šãªDataSetã§ã¯ãªãããšãæåŸ
ããŠããŸããããããã¯å³éžã§ãã ãã®ãµãŒãã¹ã¯ãRUã³ãŒãã§åœãç¥ã£ãŠããŸãã
å¥ã®ã¡ãœããã«æž¡ããŸãïŒ
_ns2__GetISD getISDRequest; std::string COUNTRY_NAME("Russian Federation"); getISDRequest.CountryName = &COUNTRY_NAME; _ns2__GetISDResponse getISDResponse; countrySoapProxy countryProxy; const int gSoapResult = countryProxy.GetISD(&getISDRequest, &getISDResponse);
ãããŠããã®æ¹æ³ã¯æ¬¡ã®ããã«æ©èœããŸãã
<NewDataSet> <Table> <code>7</code> <name>Russian Federation</name> </Table> <Table> <code>7</code> <name>Russian Federation</name> </Table> </NewDataSet>
ããŠãäºæ³éãããã¹ãŠããã®ãµãŒãã¹ã§æ©èœãããã¬ãŒãã³ã°ç®çã§ã¯æåã®ãã®ãããå°ãé©ããŠããŸãã ãã®å®éšã§ã¯ãä»ã®ãšããåæ¢ããããšãã§ããŸãã
ãã®ã¢ãããŒãã¯ãç¹å®ã®ã¢ãã¬ã¹ã«ãããæ¿èªãå¿
èŠãšããªã1ã€ã®ãµãŒãã¹ã®ã¿ã䜿çšããå Žåã«æé©ã§ãã
ãããããã€ã§ãã©ãã§ãWebãµãŒãã¹ããããã€ã§ããŸãïŒ
å®éãgSoapã¯å€ãã®ããšãã§ããŸãã ãããã£ãŠãããšãã°ãsoapæ§é ãä»ããŠãã°ã€ã³ãã¹ã¯ãŒããèšå®ã§ããŸãã æãåçŽãªåºæ¬èªèšŒã®äŸïŒ
soap.userid = login; soap.passwd =password;
soapæ§é ã®èª¬æã¯stdsoap2.hã«ãããŸãã
const char *userid; const char *passwd;
ãªã¯ãšã¹ãã®éä¿¡å
ã¢ãã¬ã¹ã¯ã2ã€ã®æ¹æ³ã§å€æŽã§ããŸãããªã¯ãšã¹ãèªäœã§æå®ããããSOAPãããã·ãäœæãããšãã«æå®ããŸãã
ããã¯ãã¹ãŠèªè
èªèº«ããæããã§ãã
virtual int GetISD(_ns2__GetISD *ns2__GetISD, _ns2__GetISDResponse *ns2__GetISDResponse) { return this->GetISD(NULL, NULL, ns2__GetISD, ns2__GetISDResponse); } virtual int GetISD(const char *endpoint, const char *soap_action, _ns2__GetISD *ns2__GetISD, _ns2__GetISDResponse *ns2__GetISDResponse);
2çªç®ã®æ¹æ³ã®å Žåã次ã®ãããªãªããžã§ã¯ããäœæããå¿
èŠããããŸãã
countrySoapProxy countryProxy("http://www.webservicex.net/country.asmx");
è€éãããããšã¯ãããŸãããïŒ ããã§ãããŒãã§éåžžã®IPã¢ãã¬ã¹ãèšå®ã§ããŸãã
ãŸããèªåã§åå空éãèšå®ããæ¹æ³ãèæ
®ããŸããã§ããã ãã®ã¢ãããŒãã«ãããns1__IsValidEmailãã¯ã©ã¹åãšããŠã§ã¯ãªããemail__IsValidEmailã®ãããªãã®ãšããŠåä¿¡ã§ããŸãã å€ãã®ã¯ã©ã¹ãããå Žåãæ··ä¹±ããå¯èœæ§ããããŸãã ããããã ãããåé¡ãªãè¡ãããŸãã 次ã®åœ¢åŒã®å
容ã§ãã¡ã€ã«typeMap.datãäœæããŸãã
myCustomNamespace = "
www.webservicex.net "
ã€ãŸã ç°¡åã§ããåå空éãšãã®ã¢ãã¬ã¹ãæå®ããŸãã
äžè¬ã«ãgSoapã®æäœã¯ç¹ã«é£ãããããŸããã ãããããããæäœãããšãã«æµ®ãã¶ããã€ãã®ãã€ã³ãããããŸãã ãã®ãããããšãã°ããŠãŒã¶ãŒåãšãã¹ã¯ãŒããæå®ããå Žåããªã¯ãšã¹ãåŸã«å€æŽã§ããŸãã ã€ãŸã ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
countrySoapProxy countryProxy("http://www.webservicex.net/country.asmx"); countryProxy.soap->userid = "login"; countryProxy.soap->passwd = "password"; countryProxy.GetISD(&getISDRequest, &getISDResponse); countryProxy.soap->userid = "login"; countryProxy.soap->passwd = "password"; countryProxy.GetISD(&anotherGetISDRequest, &anotherGetISDResponse);
ã©ãããçãããããã§ãã
ãã¶ãç§ã¯äœããèæ
®ããªãã£ããããããŸããããgSOAPã®çãçµéšã¯è€éãªå°è±¡ãæ®ããŸãïŒéçºé床ãéããã³ãŒãã®éãæ¯èŒçå°ãªã-ããã¯ãã¹ãŠãã©ã¹ã§ãã ããããããã¯ãã¡ãæ··ãã®ã³ãŒãã§ããCãšC ++ã®æ··åç©ã¯ãã€ãã¹ã§ãã ããããç§ã¯ããããã¹ãŠã®äººã«ãšã£ãŠãã€ãã¹ã§ã¯ãªãããšãèªããŠããŸãããããã«å€ãã®ãã©ã¹ããããŸãã ãããã«ãããgSOAPã«ä»£ãã䟡å€ã®ãã代æ¿åã¯èŠã€ãããŸããã§ããããç§ãã¡ã®äŒç€Ÿã§ãã¹ãããããœãªã¥ãŒã·ã§ã³ãä¿¡é ŒããŠãããŸãæ
éã«æ€çŽ¢ããŸããã§ããã
ãã®èšäºã¯ãgSOAPã®äœ¿çšãéå§ããããšã«ã€ããŠç°¡åã«èª¬æããå
¥éèšäºã§ãã ããã§ã¯ããŸããŸãªèªèšŒæ¹æ³ãæäŸããŸããã§ãããSOAPæ§é ããã®ç¶æ¿ã®åé¡ã«ã€ããŠã¯èª¿æ»ããŸããã§ããïŒããã¯äœãã«å¿
èŠã§ããïŒïŒã å€ãã®æªè§£æ±ºã®è³ªåããããŸãããããã§ãç§ã¯gSOAPã«ã€ããŠç°¡åã«èª¬æããŸããã è¯ãä»äºãããŠãã ããïŒ