gsoap应用---利用gsoap工具生成代码

2024-02-27 13:38

本文主要是介绍gsoap应用---利用gsoap工具生成代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1、gsoap是什么?

          The gSOAP toolkit is an open source C and C++ software development toolkit for SOAP/XML Web services and generic (non-SOAP) C/C++ XML data bindings. The toolkit analyzes WSDLs and XML schemas (separately or as a combined set) and maps the XML schema types and the SOAP messaging protocols to easy-to-use and efficient C and C++ code. It also supports exposing (legacy) C and C++ applications as SOAP/XML Web services by auto-generating XML serialization code and WSDL specifications. Or you can simply use it to automatically convert XML to/from C and C++ data. The toolkit supports options to generate pure ANSI C or C++ with or without STL.

        这是gsoap介绍的原文,简单来说,gsoap就是一个工具,这个工具能够做的事情就是自动从WSDL和XML文档生成C/C++代码,或者是逆向。这就是我所理解的gsoap。

记录下:

        gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。

gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。
gSOAP使编写web服务的工作最小化了。gSOAP编译器生成SOAP的代码来序列化或反序列化C/C++的数据结构。gSOAP包含一个WSDL生成器,用它来为你的web服务生成web服务的解释。gSOAP的解释器及导入器可以使用户不需要分析web服务的细节就可以实现一个客户端或服务端程序。
2、gsoap使用
gsoap通常带有两个工具: wsdl2h 和 soapcpp2。 wsdl2h主要是用来生成头文件的,而soapcpp2主要是利用wsdl2h生成的头文件来生成C文件或C++文件。
a、wsdl2h的使用
命令:  wsdl2h  【-】  -o  头文件名  wsdl文件名或者url
例    :  wsdl2h  -o  quote.h     http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl
Usage: wsdl2h  [-a] [-c] [-d] [-e] [-f] [-g] [-h] [-I path] [-j] [-l] [-m] [-n name] [-N name] [-p] [-q name] [-r proxyhost:port] [-s] [-t typemapfile.dat] [-u]
                                 [-v] [-w] [-x] [-y] [-z] [-o outfile.h] infile.wsdl infile.xsd   http://www... ...
 
     wsdl2h常用选项
            -o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀

              type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写。

       关于typemap.dat,在下载的gsoap中是有另外一个,叫:WS-typemap.dat。 如果有多个wsdl文档,建议使用这个。

 

       wsdl2h针对多个文档: wsdl2h.exe  -sc  -t   WS-typemap.dat   -o   quote.h    a.wsdl  b.wsdl   c.wsdl

   b、soapcpp2的使用

       命令: soapcpp2  【】  头文件名 【-I】 import路径

       例   :  soapcpp2   -L  -c  quote.h   -I  E:\gsoap-2.8\gsoap\import 

       soapcpp2常用选项

            -C  仅生成客户端代码
-S  仅生成客户端代码
-c   产生纯C代码,否则是C++代码
-L   不要产生soapClientLib.c和soapServerLib.c文件
-I    指定import路径
-x  不要产生XML示例文件
            -i   生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
soapcpp2针对多个文档: soapcpp2  -L -c  quote.h   -I  E:\gsoap-2.8\gsoap\import
其实多个wsdl合并只需要在生成头文件的时候注意就可以了,源文件是通过头文件得到的。
wsdl2h -sc -t WS-typemap.dat -o onvif.h deviceio.wsdl devicemgmt.wsdl imaging.wsdl media.wsdl ptz.wsdl
soapcpp2 -L -c -x onvif.h -I D:\gsoap-2.8\gsoap\import
附:  工具命令
wsdl2h
            Usage: wsdl2h   [-a] [-c] [-d] [-e] [-f] [-g] [-h] [-I path] [-j] [-l] [-m] [-n name] [-N name] [-p] [-q name] [-r proxyhost:port] [-s] [-t typemapfile.dat] [-u]
                                       [-v] [-w] [-x] [-y] [-z] [-o outfile.h] infile.wsdl infile.xsd   http://www... ...
-a                generate indexed struct names for local elements with anonymous types
                        -c                generate C source code
                        -d                use DOM to populate xs:any and xsd:anyType elements
                        -e                don't qualify enum names
                        -f                 generate flat C++ class hierarchy
                        -g                generate global top-level element declarations
                        -h                display help info
                        -Ipath          use path to find files
                        -j                 don't generate SOAP_ENV__Header and SOAP_ENV__Detail definitions
                        -l                 include license information in output
                        -m               use xsd.h module to import primitive types
                        -nname       use name as the base namespace prefix instead of 'ns'
                        -Nname      use name as the base namespace prefix for service namespaces
                        -ofile           output to file
                        -p                create polymorphic types with C++ inheritance with base xsd__anyType
                        -qname       use name for the C++ namespace for all service declarations
                        -rhost:port  /* ??? 暂没理解 */
                                connect via proxy host and port
                        -s                don't generate STL code (no std::string and no std::vector)
                        -tfile            use type map file instead of the default file typemap.dat
                        -u                don't generate unions
                        -v                verbose output
                        -w               always wrap response parameters in a response struct (<=1.1.4 behavior)
                        -x                don't generate _XML any/anyAttribute extensibility elements
                        -y                generate typedef synonyms for structs and enums
                        -z                generate pointer-based arrays for backward compatibility < gSOAP 2.7.6e
infile.wsdl     list of input sources (if none: use stdin)
soapcpp2
             Usage: soapcpp2 [-1|-2] [-C|-S] [-L] [-a] [-c] [-d path] [-e] [-h] [-i] [-I path;path;...] [-l] [-m] [-n] [-p name] [-s] [-t] [-v] [-w] [-x] [infile]
-1            generate SOAP 1.1 bindings
                        -2            generate SOAP 1.2 bindings
                        -C            generate client-side code only
                        -S            generate server-side code only
                        -L            don't generate soapClientLib/soapServerLib
                        -a            use value of SOAPAction HTTP header to dispatch method at server side
                        -c            generate C source code
                        -dpath     use path to save files
                        -e            generate SOAP RPC encoding style bindings
                        -h            display help info
                        -i             generate service proxies and objects inherited from soap struct
                        -Ipath      use path(s) for #import
                        -l             generate linkable modules (experimental)
                        -m           generate Matlab(tm) code for MEX compiler
                        -n            use service name to rename service functions and namespace table
                        -pname   save files with new prefix name instead of 'soap'
                        -s            generate deserialization code with strict XML validation checks
                        -t             generate code for fully xsi:type typed SOAP/XML messaging
                        -v            display version info
                        -w           don't generate WSDL and schema files
                        -x            don't generate sample XML message files
                       infile         header file to parse (or stdin)
参考:
http://blog.sina.com.cn/s/blog_4900f3fb0100j94p.html
http://gsoap2.sourceforge.net/
http://blog.csdn.net/Ocean2006/article/details/5490928

这篇关于gsoap应用---利用gsoap工具生成代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

墨刀原型工具-小白入门篇

墨刀原型工具-小白入门篇 简介 随着互联网的发展和用户体验的重要性越来越受到重视,原型设计逐渐成为了产品设计中的重要环节。墨刀作为一款原型设计工具,以其简洁、易用的特点,受到了很多设计师的喜爱。本文将介绍墨刀原型工具的基本使用方法,以帮助小白快速上手。 第一章:认识墨刀原型工具 1.1 什么是墨刀原型工具 墨刀是一款基于Web的原型设计工具,可以帮助设计师快速创建交互原型,并且可以与团队

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st