gsoap工具生成wsdl接口 注意事项

2024-02-22 03:38

本文主要是介绍gsoap工具生成wsdl接口 注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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工具生成wsdl接口 注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734019

相关文章

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven