gsoap工具生成wsdl接口 注意事项
2017-08-10 17:59
232 查看
wsdl是通过wsdl文件作为不同应用的通信接口,所以如何生成wsdl语言很重要,但是很多时候我们发现自己编写的头文件通过gsoap工具soapcpp2.exe从头文件中无法正常生成对应的wsdl语言,几经寻找,终于发现:
通过对应头文件.h生成客户端或服务器代理代码的时候,对应的头文件中的注释描述信息和对外接口都需要有规定的格式才能正确生成wsdl语言文件。
1、如过头文件中导出函数命名没有前缀,那么能生成对应的客户端或服务器代理相关代码,但是无法为每一个接口生成对应的请求和响应wsdl文件,否则,必须添加ns__前缀,注意是两条下划线才可以生成,且生成的schema对应的域名为默认ns.xsd
头文件:
#ifndef _C_WEB_CLIENT_INTERFACE_
#define _C_WEB_CLIENT_INTERFACE_
int ns__Add( int num1, int num2, int* sum );
int ns__Sub(int num1, int num2, int* sum);
int ns__Mul(char *namelist, char **arealist);
#endif
生成命令:
soapcpp2 -c test.h -1
生成结果包含各个接口的请求和响应wsdl文件,例如Add方法的请求wsdl: ns.Add.req.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://tempuri.org/ns.xsd">
<SOAP-ENV:Body>
<ns:Add>
<num1>0</num1>
<num2>0</num2>
</ns:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Add方法的响应wsdl文件:ns.Add.res.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://tempuri.org/ns.xsd">
<SOAP-ENV:Body>
<ns:AddResponse>
<sum>0</sum>
</ns:AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2、加入带注释的wsdl配置项目
#ifndef _C_WEB_CLIENT_INTERFACE_
#define _C_WEB_CLIENT_INTERFACE_
// wsdl配置项
//gsoap ns service name: name_area
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://127.0.0.1:9000/name_area.wsdl
//gsoap ns service location: http://127.0.0.1:9000/name_area //gsoap ns schema namespace: urn:name_area
int ns__Add( int num1, int num2, int* sum );
int ns__Sub(int num1, int num2, int* sum);
int ns__Mul(char *namelist, char **arealist);
#endif
生成add方法的请求wsdl文件名:name_area.Add.req.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="urn:name_area">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:Add>
<num1>0</num1>
<num2>0</num2>
</ns:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
生成add方法的响应wsdl文件名:name_area.Add.res.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="urn:name_area">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:AddResponse>
<sum>0</sum>
</ns:AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
总结: 要想生成对应的wsdl文件,接口命名必须以ns__前缀打头,其次要控制对应wsdl文件文件名和编码等配置,必须要有对应的注释配置项目,soapcpp2工具会自动检查对应配置生成对应的文件;
通过对应头文件.h生成客户端或服务器代理代码的时候,对应的头文件中的注释描述信息和对外接口都需要有规定的格式才能正确生成wsdl语言文件。
1、如过头文件中导出函数命名没有前缀,那么能生成对应的客户端或服务器代理相关代码,但是无法为每一个接口生成对应的请求和响应wsdl文件,否则,必须添加ns__前缀,注意是两条下划线才可以生成,且生成的schema对应的域名为默认ns.xsd
头文件:
#ifndef _C_WEB_CLIENT_INTERFACE_
#define _C_WEB_CLIENT_INTERFACE_
int ns__Add( int num1, int num2, int* sum );
int ns__Sub(int num1, int num2, int* sum);
int ns__Mul(char *namelist, char **arealist);
#endif
生成命令:
soapcpp2 -c test.h -1
生成结果包含各个接口的请求和响应wsdl文件,例如Add方法的请求wsdl: ns.Add.req.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://tempuri.org/ns.xsd">
<SOAP-ENV:Body>
<ns:Add>
<num1>0</num1>
<num2>0</num2>
</ns:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Add方法的响应wsdl文件:ns.Add.res.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://tempuri.org/ns.xsd">
<SOAP-ENV:Body>
<ns:AddResponse>
<sum>0</sum>
</ns:AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2、加入带注释的wsdl配置项目
#ifndef _C_WEB_CLIENT_INTERFACE_
#define _C_WEB_CLIENT_INTERFACE_
// wsdl配置项
//gsoap ns service name: name_area
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://127.0.0.1:9000/name_area.wsdl
//gsoap ns service location: http://127.0.0.1:9000/name_area //gsoap ns schema namespace: urn:name_area
int ns__Add( int num1, int num2, int* sum );
int ns__Sub(int num1, int num2, int* sum);
int ns__Mul(char *namelist, char **arealist);
#endif
生成add方法的请求wsdl文件名:name_area.Add.req.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="urn:name_area">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:Add>
<num1>0</num1>
<num2>0</num2>
</ns:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
生成add方法的响应wsdl文件名:name_area.Add.res.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="urn:name_area">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:AddResponse>
<sum>0</sum>
</ns:AddResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
总结: 要想生成对应的wsdl文件,接口命名必须以ns__前缀打头,其次要控制对应wsdl文件文件名和编码等配置,必须要有对应的注释配置项目,soapcpp2工具会自动检查对应配置生成对应的文件;
相关文章推荐
- 关于gsoap工具soapcpp2.exe无法通过头文件生成wsdl接口描述语言文件的原因
- Axis生成wsdl的三种方法以及注意事项
- 利用gsoap将wsdl方式的WebService生成c/c++的接口
- java生成exe工具之exe4j.exe(Java Exe Maker)的使用和注意事项
- gsoap开发c/c++ Web Service的注意事项和工具的介绍
- 真正可用的Asdoc生成工具及技巧和注意事项
- qt/Embedded版本 修改编译工具 注意事项
- android生成Jar包的注意事项
- 使用支付宝对企业金流接口的注意事项--URL参数警报
- TC工具的使用注意事项
- 关于RESTful一些注意事项,和自己整理的接口开发规范
- 接口库设计注意事项
- C# 利用VS自带的WSDL工具生成WebService服务类
- 使用sonar质量代码走查工具需要注意的事项
- APNS 证书生成注意事项
- 用SAP破解工具算ACCESS KEY注意事项
- VC用Ado接口连接和使用数据库及注意事项
- DLL查看相关工具_以及相关注意事项
- Android dp方式的屏幕适配工具使用(一些疑惑和注意事项)
- 根据wsdl文件或者wsdl地址生成对应的java代码(借助MyEclipse工具快速生成Axis1的客户端代码)