使用 WebSphere Studio Application Developer、gSOAP 和 Dev-C++ 为 WebSphere Web 服务新建一个 C/C++ 客户机

来源:百度文库 编辑:神马文学网 时间:2024/07/02 20:15:33
2003 年 5 月 01 日
WebSphere Studio Application Developer(以下称为 Application Developer)为快速从现有 J2EE 组件构建 SOAP/XML Web 提供向导,例如从会话 EJB 和 Java™ beans 组件来构建。Application Developer 能为任何 Java 客户机或 WSDL 文件生成一个 Java 客户机代理,只要这些文件能被其它供应商用来构建 Web 服务客户机。
© Copyright International Business Machines Corporation 2003. All rights reserved.
WebSphere® Studio Application Developer(以下称为 Application Developer)为快速从现有 J2EE 组件构建 SOAP/XML Web 提供向导,例如从会话 EJB 和 Java™ bean 组件来构建。Application Developer 能为任何 Java 客户机或 WSDL 文件生成一个 Java 客户机代理,只要这些文件能被其它供应商用来构建 Web 服务客户机。
某些情况下,您也许需要一个非 Java 客户机来使用 J2EE Web 服务。您可以使用 Microsoft® .NET 框架提供的 wsdl.exe 工具来为 WebSphere Web 服务生成一个 C# 或 Jscript 客户机。或者,一些开放源代码工具能为在不同语言和操作系统中生成客户机提供便利。(这里有SOAP 软件工具清单)。
开放源代码工具之一的gSOAP提供一种独特的 SOAP/XML 到 C/C++ 语言绑定,以简化 C 或 C++ 中 SOAP/XML Web 服务和客户机的开发。gSOAP 工具包括一个 WSDL 生成器,用于为您的 Web 服务生成 Web 服务描述。WSDL importer 工具使 SOAP 客户机应用程序开发完全自动化。
使用 Application Developer 和 gSOAP 编译器、C/C++ 和 Fortran 下的客户机(经由一个 Fortran 连接到 C 接口)以及 4GL 客户机,例如 PowerBuilder(通过一个 C++ DLL),就能通过 WebSphere Application Server 跨平台连接作为 Web 服务公开的 J2EE 应用程序。
为相应的 J2EE Web 服务生成一个 C/C++ 客户机:
使用 Application Developer 生成 Web 服务及其 WSDL 文件,以公开一个 EJB 或 Java bean。 在分布式平台上的 WebSphere 4.0x/5.0 或 z/OS™ 和 OS/390® 上的 WebSphere 4.01 上部署 Web 服务。 使用 gSOAP WSDL importer 工具生成一个 C/C++ 客户机应用程序或 DLL。本教程描述了如何运行第 3 步,假定第 1 步和第 2 步已完成。可在本页下方下载为 Web 服务而从 Application Developer 4.02 生成并导出的名为 HelloWorld.ear 的样本企业归档(enterprise archive,EAR)文件。关于第 1 步和第 2 步的详细情况,参见 Application Developer 的联机帮助或在相关信息中列出的关于使用 Application Developer 生成 Web 服务的教程和红皮书。




回页首
进入SourceForge网站并(对于 Windows® 工作站)下载名为 soapcpp-win32-2.1.7.zip 的 ZIP 文件。将所有文件解压缩到安装盘(比如 C:\ )。如要测试 gSOAP 示例和 SSL,请按照 C:\soapcpp-win32-2.1.7\INSTALL.txt 里的说明。
切换到 C:\soapcpp-win32-2.1.7\wsdlcpp\ 目录,阅读 readme.txt 中关于第 1 步的说明。 安装一个用于 Java 的 XML 解析器,例如 Apache Xerces 2.0.1( xercesImpl.jar 和 xmlParserAPIs.jar )或 Xerces 1.4.4( xerces.jar )。可根据需要改变类路径。WSDL 导入工具的 wsdlcpp.java 资源已为 Xerces DOM 解析器配置好了。如要使用另一个 Java DOM 解析器,请在 wsdlcpp.java 中修改 DOM 解析器类导入。 使用 javac wsdlcpp.java 命令编译 wsdlcpp 。
此工具并不支持 标记。这个输入 WSDL 文件一定要是独立的(参见 C:\soapcpp- win32-2.1.7\wsdlcpp\README.txt 文件中 Limitations 下的说明)。Application Developer 或 Application Developer Integration Edition 为每个 Web 服务 EAR 生成两个名为 的 WSDL 文件(比如 -service.wsdl 和 -binding.wsdl )。第一个文件 -service.wsdl 导入绑定的定义 -binding.wsdl 。要将它们合并到一个文件中:
复制 -binding.wsdl 中 ... 里的所有元素条目。 编辑 -service.wsdl ,将条目 用上面复制的内容覆盖。
此处的示例是 Application Developer 为作为 Web 服务公开的 HellowWorld 会话 EJB 的 hello 方法而生成的两个 WSDL 文件:
清单 1. HelloWorld-service.wsdl

清单 2. HelloWorld-binding.wsdl

这是合并后的 HelloWorld-service.wsdl WSDL 文件样本:
清单 3. HelloWorld-service.wsdl

上面的样本 WSDL 文件(以及所包含的 EAR 文件)是由 Application Developer 4.02 所生成。这里的说明适用于 Application Developer 5.0 生成的 Web 服务,只要对 作一致修改。
从 WSDL 新建代理(存根)需要两个步骤(参见 C:\soapcpp-win32-2.1.7\wsdlcpp\README.txt 中说明的第 2 步)。
执行 Java 程序 wsdlcpp(WSDL Importer): java wsdlcpp .wsdl 。这将生成以下文件: .h gSOAP 编译器的头文件声明
.c 一个客户机程序摸板
这里 是输入 WSDL 文件的名称。头文件将由 gSOAP 编译器处理:
执行 gSOAP 编译器: soapcpp2 .h
这将生成以下组件:
soapStub.h 与 .h 相似的头文件,但带有数据类型注释
soapH.h soapC.cpp 的头文件
soapC.cpp C/C++ 数据类型的 SOAP/XML(反)序列化器
soapClient.cpp 远程方法调用的代理存根例程
soapServer.cpp 服务执行的框架例程
soap.wsdl 一个 WSDL 文件,是服务名
.nsmap 客户机应用程序的一个名称空间映射表
修改生成的客户机以声明合适的输入和输出变量,并将这些作为参数传递给 Web 服务方法调用。您可能还想将此文件重命名为 .cpp 。由于要和 C 语言兼容,返回类型定义为 struct(在 soapStub.h 中定义)。在我们的示例中,定义如下:
清单 4. 返回类型定义
struct tns__helloResponse { char *_result; };
这是此工具生成的样本客户机代码 HelloWorld-service.cpp ,然后进行修改(您可以将输入名称 Nay Lin 修改为您自己的名字)。
清单 5. HelloWorld-service.cpp
#include "soapH.h" #include "soapHelloWorldService.nsmap" #include main() { struct soap soap; // gSOAP runtime environment soap_init(&soap); // initialize runtime environment (only once) struct tns__helloResponse response; char dummy[100]; if (soap_call_tns__hello ( &soap, "http://localhost:8080/HelloWorldWebService/servlet/rpcrouter", "","Nay Lin", &response)== SOAP_OK) { cout << "HelloWorld WebService response "<> dummy; return 0; }
示例头文件由 gSOAP 工具生成:
清单 6. HelloWorld-service.h
//gsoap tns schema namespace: http://tempuri.org/com.ibm.hello.ejb.HelloWorld //gsoap binding schema namespace: http://www.helloworld.com/definitions/HelloWorldRemoteInterface //gsoap tns service namespace: http://localhost:8080/HelloWorldWebService/wsdl/HelloWorld-service.wsdl //gsoap tns service location: http://localhost:8080/HelloWorldWebService/servlet/rpcrouter //gsoap tns service name: soapHelloWorldService /*start primitive data types*/ typedef char * xsd__string; /*end primitive data types*/ //soapAction : tns__hello ( xsd__string str, struct tns__helloResponse {xsd__string _result; } *out) ;
要编译并运行这些 C/C++ 程序,可以使用 GNU C++ 编译器或将 C/C++ 程序导入到 Visual C++ 6.0 中。要运行这里的 HelloWorld 示例,我们使用一种简单的 Windows 平台 Dev-C++ 上的 GNU C++ IDE。您可以从SourceForge或BloodShed.net下载。如需联机帮助,您还需要定购一张便宜的 CD,它容量较小(大约 10MB),而且简单。如果您编译运行 GNU 调试器,可能会使用太多内存,或许是因为您进入一个程序呼叫时,它都试图打开一个窗口。

gSOAP 模块 stdsoap2.cpp 的链接需要 wsock32.dll 库。要在 Visual C++ 6.0 中安装此项:
选择 File view 中的 project file,选择 Project => Settings,然后选择 Link选项卡。 将 wsock32.lib 添加到 Object/library 模块条目。要在 Dev-C++ 中添加,右键单击您的项目并选择 Project options。打开了 Project options 窗口。 在 Linker Options/Optional Libs 或 Object files 区域,输入 -lwsock32 。
您可以选择 Type WIN32 DLL 项目以生成一个 DLL 而不是 Dev-C++ 下的可执行文件。这是 Dev-C++ IDE Project Options 窗口的抓屏:

推荐:取消对 stdsoap.h 中下列行的注释,以打开 logging in the beginning 功能:
#define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log)
这样会在项目工作目录下生成 log 文件。这里有样本控制台输出,是由为访问 HelloWorld Web 服务而运行 C++ 客户机应用程序所生成的:
HelloWorld WebService response result = HelloWorld From Nay Lin! Press e to end program ..




回页首
本文演示了如何使用开放源代码工具 gSOAP 和 Dev-Cpp 来开发一个连接到 WebSphere Web 服务的 C/C++ 客户机。您已经学习了如何:
下载、安装和配置 gSOAP 以及 gSOAP Importer 工具。 从 Application developer 所生成的两个 WSDL 文件来准备一个 WSDL 文件。 生成并定制 C/C++ 客户机组件。 使用开放源代码 IDE Dev-C++ 生成一个 Windows 控制台应用程序或 DLL。
这些知识能帮助您从开始用 WebSphere Web 服务和开放源代码工具将 J2EE 企业应用程序和 C/C++ 应用程序集成起来。




回页首
名字 大小 下载方法
HelloWorld.zip 0.1 MBHTTP

关于下载方法的信息
您可以参阅本文在 developerWorks 全球站点上的英文原文.
Sheldon Wosnick 所写的使用 WebSphere Studio Application Developer 开发并测试一段完整“Hello World”J2EE 应用程序
Sheldon Wosnick 所写的使用 WebSphere Studio Application Developer 开发并测试一段完整 J2EE 应用程序 — 第 2 部分:在 WebSphere Application Server 上运行
Sheldon Wosnick 所写的开发 IBM WebSphere Studio Application Developer 和 Microsoft .NET Framework SDK 支持的 Microsoft .NET Web Service Clients for EJB Web Services
WebSphere Studio Application Developer Integration Edition -- Presentations 和 Labs
Robert A. van Engelen 所写的The gSOAP Stub and Skeleton Compiler for C and C++ 2.1.7



Nay Lin加利福尼亚圣地亚哥 IBM WebSphere Enablement team 的顾问软件工程师。他的顾问专长包括 WebSphere Application Server、WebSphere 企业编程模型扩展和使用 WebSphere Studio Application Developer 的应用程序开发。您可以通过naylin@us.ibm.com与 Nay 联系
使用 WebSphere Studio Application Developer、gSOAP 和 Dev-C++ 为 WebSphere Web 服务新建一个 C/C++ 客户机 Dev c Usage 为 WebSphere Application Server Community Edit... 使用 WebSphere Application Server Community Edition Server 的 Eclipse 插件 用 WebSphere Studio Enterprise Developer 開發 CICS COBOL 應用程式 IBM WebSphere Application Server 诊断和调优(二) 为 WebSphere Application Server Community Edition 开发 Spring 应用程序: 第 2 部分:使用 Spring 进行数据库连接管理 WebSphere Application Server Community Edition 中的高级管理,第 2 部分: 使用线程池、集群和配置插件 使用 gSOAP 通过 HTTP 和 HTTPS 调用由 WSAD 创建的 J2EE Web 服务 IBM WebSphere 开发者技术期刊: 使用 WebSphere Application Server V6.1 中的联合存储库扩展用户注册表选项 如何混合使用C和C (上) 如何混合使用C和C (下) 如何混合使用C和C (上) - robin 调试 JEE 企业级应用 - 使用 WebSphere Integration Developer 集成测试客户端 为 WebSphere Application Server Community Edition 开发 Spring 应用程序: 第 1 部分:Spring MVC 合理使用维生素C 一个典型的C程序存储空间布局 - C/C 使用 AJAX 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机 用WebSphere监视Web站点的性能 websphere IHS 集群 安装 Web 服务器插件 IBM WebSphere 开发者技术期刊: WebSphere Application Server Community Edition 入门 项目和解决方案 (C++) c日期和时间 构建 SOA 组合业务服务,第 8 部分: 使用 WebSphere Portlet Fa...