关于gsoap工具soapcpp2.exe无法通过头文件生成wsdl接口描述语言文件的原因
来源:互联网 发布:郎咸平小三 知乎 编辑:程序博客网 时间:2024/04/28 18:35
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工具会自动检查对应配置生成对应的文件;
- 关于gsoap工具soapcpp2.exe无法通过头文件生成wsdl接口描述语言文件的原因
- gsoap:编写用于soapcpp2.exe生成文件的头文件
- gSoap服务器端开发-头文件生成wsdl
- gSoap生成WSDL文件
- gSoap使用入门(1)----由wsdl文件生成头文件
- gSoap使用入门(1)----由wsdl文件生成头文件
- gSoap使用入门(1)----由wsdl文件生成头文件
- gsoap工具生成头文件和源文件
- gsoap工具生成wsdl接口 注意事项
- 通过WebService接口生成WSDL文件
- 通过WebService接口生成WSDL文件
- gSoap自定义接口头文件
- gSoap开发Web Service 既soapcpp2.exe生成服务端和客户端的代码具体方法
- WCF_通过使用svcutil.exe将http://*.svc?wsdl生成客户端可调用的.cs文件
- WSDL2Java通过WSDL文件生成java服务接口并实现
- gsaop 有头文件生成wsdl文件
- wsdl文件标签的描述
- 一个通过java的接口生成thrift文件的工具
- 一种通过自动脚本抓取Android 手机log的方法
- ios之GCD学习笔记(2)
- Mysql 5.7 information_schema 的status和variables表deprecated
- 指尖上的电商---(6)solrconfig.xml配置详解
- ios之GCD学习笔记(3)
- 关于gsoap工具soapcpp2.exe无法通过头文件生成wsdl接口描述语言文件的原因
- 指尖上的电商---(7)Solr索引基本操作
- Ubuntu run in Raspberry pi 2 之SD 卡镜像篇(ROS开发准备)
- amq原理
- JAVA学习之——深入分析Spring 与 Spring MVC容器
- 开发效率提升百分百的秘密
- 【背包专题汇总】
- CodeForces - 675A Infinite Sequence (模拟)水
- 快鹿徐琪事件再掀波澜,疑搬起石头砸自己的脚