C and C++ XML Data Bindings {#mainpage}
===========================
[TOC]
Introduction {#intro}
============
This article presents a detailed overview of the gSOAP XML data bindings for C
and C++. The XML data bindings for C and C++ are extensively used with gSOAP
Web services to serialize C and C++ data in XML as part of the SOAP/XML Web
services payloads. Also REST XML with gSOAP relies on XML serialization of C
and C++ data via XML data bindings.
The major advantage of XML data bindings is that your application data is
always **type safe** in C and C++ by binding XML schema types to C/C++ types.
So integers in XML are bound to C integers, strings in XML are bound to C or
C++ strings, complex types in XML are bound to C structs or C++ classes, and so
on. The structured data you create and accept will fit the data model and is
**static type safe**. In other words, by leveraging strong typing in C/C++,
your XML data meets **XML schema validation requirements** and satisfies **XML
interoperability requirements**.
In fact, gSOAP data bindings are more powerful than simply representing C/C++
data in XML. The gSOAP tools implement true and tested **structure-preserving
serialization** of C/C++ data in XML, including the serialization of cyclic
graph structures with id-ref XML attributes. The gSOAP tools also generate
routines for deep copying and deep deletion of C/C++ data structures to
simplify memory management. In addition, C/C++ structures are deserialized
into managed memory, managed by the gSOAP `soap` context.
At the end of this article two examples are given to illustrate the application
of XML data bindings. The first simple example <i>`address.cpp`</i> shows how to use
wsdl2h to bind an XML schema to C++. The C++ application reads and writes an
XML file into and from a C++ "address book" data structure as a simple example.
The C++ data structure is an STL vector of address objects. The second example
<i>`graph.cpp`</i> shows how C++ data can be accurately serialized as a tree, digraph,
and cyclic graph in XML. The digraph and cyclic graph serialization rules
implement SOAP 1.1/1.2 multi-ref encoding with id-ref attributes to link
elements through IDREF XML references, creating a an XML graph with pointers to
XML nodes that preserves the structural integrity of the serialized C++ data.
These examples demonstrate XML data bindings only for relatively simple data
structures and types. The gSOAP tools support more than just these type of
structures to serialize in XML. There are practically no limits to the
serialization of C and C++ data types in XML.
Also the support for XML schema (XSD) components is unlimited. The wsdl2h tool
maps schemas to C and C++ using built-in intuitive mapping rules, while
allowing the mappings to be customized using a <i>`typemap.dat`</i> file with mapping
instructions for wsdl2h.
The information in this article is applicable to gSOAP 2.8.26 and greater that
support C++11 features. However, C++11 is not required. The material and the
examples in this article use plain C and C++, until the point where we
introduce C++11 smart pointers and scoped enumerations. While most of the
examples in this article are given in C++, the concepts also apply to C with
the exception of containers, smart pointers, classes and their methods. None
of these exceptions limit the use of the gSOAP tools for C in any way.
The data binding concepts described in this article were first envisioned in
1999 by Prof. Robert van Engelen at the Florida State University. An
implementation was created in 2000, named "stub/skeleton compiler". The first
articles on its successor version "gSOAP" appeared in 2002. The principle of
mapping XSD components to C/C++ types and vice versa is now widely adopted in
systems and programming languages, including Java web services and by C# WCF.
We continue to be committed to our goal to empower C/C++ developers with
powerful autocoding tools for XML. Our commitment started in the very early
days of SOAP by actively participating in
[SOAP interoperability testing](http://www.whitemesa.com/interop.htm),
participating in the development and testing of the
[W3C XML Schema Patterns for Databinding Interoperability](http://www.w3.org/2002/ws/databinding),
and continues by contributing to the development of
[OASIS open standards](https://www.oasis-open.org) in partnership with leading
IT companies in the world.
ð [Back to table of contents](#)
Notational Conventions {#conventions}
======================
The typographical conventions used by this document are:
* `Courier` denotes C and C++ source code.
* <i>`Courier`</i> denotes XML content, JSON content, file and path names, and URIs.
* <b>`Courier`</b> denotes HTTP content, text file content, and shell commands with command line options and arguments.
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to
be interpreted as described in RFC-2119.
ð [Back to table of contents](#)
Mapping WSDL and XML schemas to C/C++ {#tocpp}
=====================================
To convert WSDL and XML schemas (XSD files) to code, we use the wsdl2h command
on the command line (or command prompt), after opening a terminal. The wsdl2h
command generates the data binding interface code that is saved to a special
Web services and data bindings interface header file with extension <i>`.h`</i>
that contains the WSDL service declarations and the data binding interface
declarations in a familiar C/C++ format:
wsdl2h [options] -o file.h ... XSD and WSDL files ...
This command converts WSDL and XSD files to C++ (or pure C with
<b>`wsdl2h -c`</b>) and saves the data binding interface to a interface header
file <i>`file.h`</i> that uses familiar C/C++ syntax extended with `//gsoap`
[directives](#directives) and annotations. Notational conventions are used in
the data binding interface to declare serializable C/C++ types and functions
for Web service operations.
The WSDL 1.1/2.0, SOAP 1.1/1.2, and XSD 1.0/1.1 standards are supported by the
gSOAP tools. In addition, the most popular WS specifications are also
supported, including WS-Addressing, WS-ReliableMessaging, WS-Discovery,
WS-Security, WS-Policy, WS-SecurityPolicy, and WS-SecureConversation.
This article focusses mainly on XML data bindings. XML data bindings for C/C++
bind XML schema types to C/C++ types. So integers in XML are bound to C
integers, strings in XML are bound to C or C++ strings, complex types in XML
are bound to C structs or C++ classes, and so on.
A data binding is dual, meaning supporting a two way direction for development.
Either you start with WSDLs and/or XML schemas that are mapped to equivalent
C/C++ types, or you start with C/C++ types that are mapped to XSD types.
Either way, the end result is that you can serialize C/C++ types in XML such
that your XML is an instance of XML schema(s) and is validated against these
schema(s).
This covers all of the following standard XSD components with their optional
attributes and properties:
XSD component | attributes and properties
-------------- | -------------------------
schema | targetNamespace, version, elementFormDefault, attributeFormDefault, defaultAttributes
attribute | name, ref, type, use, default, fixed, form, targetNamespace, wsdl:arrayType
element | name, ref, type, default, fixed, form, nillable, abstract, substitutionGroup, minOccurs, maxOccurs, targetNamespace
simpleType | name
complexType | name, abstract, mixed, defaultAttributesApply
all | *n/a*
choice | minOccurs, maxOccurs
sequence | minOccurs, maxOccurs
group | name, ref, minOccurs, maxOccurs
attributeGroup | name, ref
没有合适的资源?快使用搜索试试~ 我知道了~
gsoap2.8.105
共7259个文件
xml:2273个
html:1702个
png:1057个
需积分: 1 0 下载量 118 浏览量
2023-03-22
16:44:49
上传
评论
收藏 28.1MB RAR 举报
温馨提示
gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。 gSOAP一种跨平台的C和 C++软件开发工具包。生成C/C++的RPC代码,XML数据绑定,对SOAP Web服务和其他应用形成高效的具体架构解析器,它们都受益于一个XML接口。 这个工具包提供了一个全面和透明的XML数据绑定解决方案,Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。此外,使用XML数据绑定大大简化了XML自动映射。应用开发人员不再需要调整应用程序逻辑的具体库和XML为中心的数据,如 交涉DOM。 [1]
资源推荐
资源详情
资源评论
收起资源包目录
gsoap2.8.105 (7259个子文件)
output.0 232KB
traces.0 50KB
output.1 232KB
traces.1 54KB
calc_xcode.1 3KB
_Makefile_ 11KB
configure.ac 14KB
Makefile.am 3KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 2KB
Makefile.am 1KB
Makefile.am 1KB
Makefile.am 1KB
Makefile.am 1KB
Makefile.am 889B
Makefile.am 853B
Makefile.am 843B
Makefile.am 805B
Makefile.am 764B
Makefile.am 734B
Makefile.am 721B
Makefile.am 719B
Makefile.am 703B
Makefile.am 687B
Makefile.am 687B
Makefile.am 655B
Makefile.am 654B
Makefile.am 654B
Makefile.am 652B
Makefile.am 646B
Makefile.am 637B
Makefile.am 633B
Makefile.am 632B
Makefile.am 631B
Makefile.am 623B
Makefile.am 613B
Makefile.am 609B
Makefile.am 589B
Makefile.am 587B
Makefile.am 579B
Makefile.am 551B
Makefile.am 544B
Makefile.am 532B
Makefile.am 504B
Makefile.am 504B
Makefile.am 503B
Makefile.am 493B
Makefile.am 487B
Makefile.am 472B
Makefile.am 466B
Makefile.am 466B
Makefile.am 425B
Makefile.am 415B
Makefile.am 333B
Makefile.am 272B
Makefile.am 261B
Makefile.am 211B
build.bat 537B
build.bat 419B
build.bat 418B
ABLD.BAT 324B
symbol2.c 963KB
symbol2.c 963KB
stdsoap2.c 622KB
wsseapi.c 299KB
soapcpp2_yacc.tab.c 238KB
soapcpp2_yacc.tab.c 238KB
cacerts.c 226KB
cacerts.c 226KB
wsrmapi.c 192KB
dom.c 170KB
wsse2api.c 153KB
lex.yy.c 104KB
lex.soapcpp2_lex.c 104KB
wsaapi.c 61KB
wsddapi.c 60KB
httpda.c 55KB
webserver.c 55KB
mecevp.c 53KB
sessions.c 49KB
mod_gsoap.c 49KB
mod_gsoap.c 48KB
optC.c 44KB
wssedemo.c 31KB
wsseapi-lite.c 31KB
curlapi.c 30KB
json.c 29KB
wsrmdemo.c 29KB
router.c 28KB
wstapi.c 28KB
smdevp.c 27KB
wstdemo.c 26KB
mtom-stream-test.c 20KB
mq.c 16KB
soapcpp2.c 15KB
soapcpp2.c 15KB
xml-rpc.c 15KB
options.c 14KB
共 7259 条
- 1
- 2
- 3
- 4
- 5
- 6
- 73
资源评论
dzhigao251314
- 粉丝: 21
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
- Linux线程同步机制深度解析与实用指南.zip
- PTA题库C语言解题策略与实战.rar
- SVPWM控制技术的simulink建模与仿真【包括simulink模型,参考文献,操作步骤】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功