`

Linux下C gsoap client访问java webservice server

    博客分类:
  • java
阅读更多

1 http://gsoap2.sourceforge.net/ 下载gsoap_2.7.15.tar.gz

2 tar -zxvf gsoap_2.7.15.tar.gz

3 ./configure(默认安装在/usr/local/share/gsoap目录下,也可以使用 ./configure –-prefix=/usr/local/gsoap指定安装路径)

4 make

5 su输入密码转到root用户

6 make install

7 创建工程目录,mkdir calculator

8 进入工程目录cd calculator

9 cp /home/jimmy/development/webservice/gsoap-2.7/gsoap/stdsoap2.c .
  cp /home/jimmy/development/webservice/gsoap-2.7/gsoap/stdsoap2.h .

10 mkdir include

11 cp /home/jimmy/development/webservice/gsoap-2.7/gsoap/libgsoap.a ./include

12 /usr/local/bin/wsdl2h -c -o calculator.h http://192.168.0.125:8888/IntelligenceAppliance/CalculatorPort?wsdl

**  The gSOAP WSDL/Schema processor for C and C++, wsdl2h release 1.2.15
**  Copyright (C) 2000-2009 Robert van Engelen, Genivia Inc.
**  All Rights Reserved. This product is provided "as is", without any warranty.
**  The wsdl2h tool is released under one of the following two licenses:
**  GPL or the commercial license by Genivia Inc. Use option -l for more info.
Saving calculator.h
Cannot open file 'typemap.dat'
Problem reading type map file 'typemap.dat'.
Using internal type definitions for C instead.

Connecting to 'http://192.168.0.125:8888/IntelligenceAppliance/CalculatorPort?wsdl' to retrieve WSDL/XSD... connected, receiving...
Connecting to 'http://192.168.0.125:8888/IntelligenceAppliance/CalculatorPort?xsd=1' to retrieve schema... connected, receiving... done reading  'http://192.168.0.125:8888/IntelligenceAppliance/CalculatorPort?xsd=1'
done reading 'http://192.168.0.125:8888/IntelligenceAppliance/CalculatorPort?wsdl'
To complete the process, compile with:
soapcpp2 calculator.h
[jimmy@srp calculator]$


13 /usr/local/bin/soapcpp2 -c -C calculator.h

**  The gSOAP code generator for C and C++, soapcpp2 release 2.7.15
**  Copyright (C) 2000-2009, Robert van Engelen, Genivia Inc.
**  All Rights Reserved. This product is provided "as is", without any warranty.
**  The soapcpp2 tool is released under one of the following three licenses:
**  GPL, the gSOAP public license, or the commercial license by Genivia Inc.
Saving soapStub.h annotated copy of the input definitions
Saving soapH.h serializers
Saving soapC.c serializers
Saving soapClient.c client calling stubs
Saving soapClientLib.c client stubs with static serializers for libs
Using ns1 service name: CalculatorPortBinding
Using ns1 service style: document
Using ns1 service encoding: literal
Using ns1 service location: http://192.168.0.125:8888/IntelligenceAppliance/CalculatorPort
Using ns1 schema namespace: http://webservice.nk.cn/
Saving CalculatorPortBinding.substract.req.xml sample SOAP/XML request
Saving CalculatorPortBinding.substract.res.xml sample SOAP/XML response
Saving CalculatorPortBinding.add.req.xml sample SOAP/XML request
Saving CalculatorPortBinding.add.res.xml sample SOAP/XML response
Saving CalculatorPortBinding.divide.req.xml sample SOAP/XML request
Saving CalculatorPortBinding.divide.res.xml sample SOAP/XML response
Saving CalculatorPortBinding.multiply.req.xml sample SOAP/XML request
Saving CalculatorPortBinding.multiply.res.xml sample SOAP/XML response
Saving CalculatorPortBinding.nsmap namespace mapping table
Compilation successful
[jimmy@srp calculator]$


14 创建calculator.c,内容如下:

   1 #include <stdio.h>
   2 #include "soapH.h"
   3 #include "CalculatorPortBinding.nsmap"
   4
   5 int main(int argc, char *argv[])
   6 {
   7         struct soap *soap = soap_new();
   8         struct ns1__add add;
   9         struct ns1__substract sub;
  10         struct ns1__multiply mul;
  11         struct ns1__divide div;
  12         struct ns1__addResponse add_ret;
  13         struct ns1__substractResponse sub_ret;
  14         struct ns1__multiplyResponse mul_ret;
  15         struct ns1__divideResponse div_ret;
  16
  17         int result;
  18
  19         add.arg0 = 1;
  20         add.arg1 = 2;
  21
  22         sub.arg0 = 1;
  23         sub.arg1 = 2;
  24
  25         mul.arg0 = 1;
  26         mul.arg1 = 2;
  27
  28         div.arg0 = 8;
  29         div.arg1 = 2;
  30
  31
  32         if(soap_call___ns1__add(soap, NULL, NULL, &add, &add_ret) == SOAP_OK)
  33                 printf("The sum of 1 and 2 is %d\n", add_ret.return_);
  34         else
  35                 soap_print_fault(soap, stderr);
  36
  37         if(soap_call___ns1__substract(soap, NULL, NULL, &sub, &sub_ret) == SOAP_OK)
  38                 printf("The substract of 1 and 2 is %d\n", sub_ret.return_);
  39         else
  40                 soap_print_fault(soap, stderr);
  41
  42         if(soap_call___ns1__multiply(soap, NULL, NULL, &mul, &mul_ret) == SOAP_OK)
  43                 printf("The multiply of 1 and 2 is %d\n", mul_ret.return_);
  44         else
  45                 soap_print_fault(soap, stderr);
  46
  47         if(soap_call___ns1__divide(soap, NULL, NULL, &div, &div_ret) == SOAP_OK)
  48                 printf("The divide of 8 and 2 is %d\n", div_ret.return_);
  49         else
  50                 soap_print_fault(soap, stderr);
  51
  52         soap_end(soap);
  53         soap_free(soap);
  54 }


15 创建Makefile

#INCLUDE=$(GSOAP_ROOT)
INCLUDE=./include
OBJS=soapC.o stdsoap2.o soapClient.o calculator.o
calculator: $(OBJS)
  gcc -I $(INCLUDE) -o calculator $(OBJS)
.PHONY: clean
clean:
  rm *.o calculator


16 make

cc    -c -o soapC.o soapC.c
cc    -c -o stdsoap2.o stdsoap2.c
cc    -c -o soapClient.o soapClient.c
cc    -c -o calculator.o calculator.c
gcc -I ./include -o calculator soapC.o stdsoap2.o soapClient.o calculator.o

17 ./calculator

The sum of 1 and 2 is 3
The substract of 1 and 2 is -1
The multiply of 1 and 2 is 2
The divide of 8 and 2 is 4

18 目录结构
calculator
  calculator.c
  calculator.h
  CalculatorPortBinding.add.req.xml
  CalculatorPortBinding.add.res.xml
  CalculatorPortBinding.divide.req.xml
  CalculatorPortBinding.divide.res.xml
  CalculatorPortBinding.multiply.req.xml
  CalculatorPortBinding.multiply.res.xml
  CalculatorPortBinding.nsmap
  CalculatorPortBinding.substract.req.xml
  CalculatorPortBinding.substract.res.xml
  include
   libgsoap.a
  Makefile
  soapC.c
  soapClient.c
  soapClientLib.c
  soapH.h
  soapStub.h
  stdsoap2.c
  stdsoap2.h

19 总结

把所有的xml文件删除依然可以正确编译运行
soapStub.h中包含所有的在calculator.c中使用的结构体和函数声明
soapcpp2常用选项
     * -C 仅生成客户端代码
     * -S 仅生成服务器端代码
     * -L 不要产生soapClientLib.c和soapServerLib.c文件
     * -c 产生纯C代码,否则是C++代码(与头文件有关)
     * -I 指定import路径(见上文)
     * -x 不要产生XML示例文件
     * -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
/usr/local/bin/soapcpp2 -c calculator.h则产生服务器端和客户端的代码


20、安装注意:
在README.txt文件中:
To build without OpenSSL support, use:

        $ ./configure --disable-openssl
        $ make
        $ make install

我在ubuntu下安装采用此方法

分享到:
评论

相关推荐

    Linux下用gSOAP开发Web Service服务端和客户端程序

    3. **跨语言互操作性**:虽然gSOAP主要针对C和C++,但生成的Web Service可以被其他语言的客户端访问,如Java、Python等。 ### 二、环境搭建与配置 在Linux环境下安装gSOAP,首先需要从官方网站下载源码包,目前...

    在Linux下通过gSOAP调用WebService例子

    代码在Linux5.6 64下编译通过,代码中调用http://www.cs.fsu.edu/~engelen/calc.wsdl提供的WebService接口。文件中相应的文件由gSOAP工具生成,详细操作说明请看我的博客。

    Qt使用gsoap来访问webservice,绝对可用例子

    照着网上的例子做的,参考http://blog.csdn.net/tingsking18/article/details/5456831?reload,但作者说的有错误,而且没提供代码,这个我试了绝对可用,大家可以看看

    Qt下gsoap访问webservice小程序

    在本文中,我们将深入探讨如何在Qt环境下使用gSOAP库来访问Web服务。Qt是一个流行的C++跨平台应用开发框架,而gSOAP则是一个强大的工具,用于生成客户端和服务器端的代码,使得C/C++应用程序能够与Web服务进行交互。...

    linux 下 gsoap 用webservice 通信

    在Linux环境下,gSOAP是一个强大的开源工具包,用于构建基于Web Service的应用程序。它支持SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language),允许开发者在C和C++中实现符合WS-I...

    gsoap_linux_webservice

    总结,gSOAP是C/C++开发者在Linux环境下构建和使用Web服务的强大工具,它简化了SOAP协议的实现,提供了丰富的功能和良好的可扩展性。通过深入理解和熟练运用gSOAP,开发者可以高效地构建跨平台的分布式应用程序,...

    gsoap实现web service的server/client(c++)

    本篇文章将深入探讨如何利用gSOAP来实现Web服务的服务器端(Server)和客户端(Client)。 首先,我们需要了解gSOAP的工作原理。gSOAP自动生成C++类和函数,使得开发者可以轻松地处理XML消息。它包括一个代码生成器...

    源码_qt程序通过gsoap访问webservice.zip

    当我们谈论“qt程序通过gsoap访问webservice”时,这涉及到两个关键组件:Qt框架和gSOAP库。 Qt是一个流行的开源C++图形用户界面库,不仅支持桌面应用,还支持移动和嵌入式平台。它提供了丰富的功能,包括UI设计、...

    c++访问webservice(gsoap简单使用)

    为了简化这一过程,开发者通常会使用库或工具,其中gSOAP就是一个著名的C/C++开发包,专门用于处理SOAP和Web服务。本文将深入探讨如何使用gSOAP在C++环境中访问Web服务。 首先,gSOAP是一个开源工具包,它自动生成...

    C++通过gSOAP调用java webservice方法返回自定义实体类

    C++做客户端,通过gSoap调用java发布的webservice,所调用的java方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值! ...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

    1. 内附 CSharp webservice例子,及GSOAP client和server例子 2. 里面的例子. 注意根据自己情况修改批处理里面的wsdl地址. 3. 如果webservice是php的 请注意修改php版wsdl中类型为标准类型(默认好像php生成的wsdl文件...

    gsoap2.8实现webservice与java交互

    总结来说,gSOAP 2.8为C/C++开发者提供了一套完整的解决方案,使得他们能够在Web服务领域与Java等其他语言进行无缝交互。通过熟练掌握gSOAP的使用,你可以轻松地构建和集成跨平台的应用程序。在实际项目中,务必遵循...

    C++通过gSoap访问webService

    gSoap是一个开源的C/C++编程工具包,用于构建SOAP(简单对象访问协议)和HTTP网络服务。本文将详细讲解如何使用gSoap在C++中通过VS2010访问Web服务。 首先,让我们理解gSoap的工作原理。gSoap生成的客户端代码能...

    linux使用gsoap和mysql的api实现webservice访问mysql数据库

    总结起来,实现“Linux下使用gSOAP和MySQL API的webservice访问MySQL数据库”涉及到的关键步骤包括: 1. 安装和配置gSOAP库。 2. 使用gSOAP工具生成服务接口代码。 3. 编写`soapServer.c`,实现数据库操作逻辑。 4. ...

    gsoap_calac_webservice

    gSOAP是一个开源C和C++库,用于构建跨平台的SOAP(简单对象访问协议)客户端和服务端。SOAP是一种XML格式的协议,用于在Web上交换结构化和类型化的信息。gSOAP不仅处理SOAP消息的编码和解码,还处理HTTP传输、XML ...

    gsoap Client

    对应前面发的C++ gsoap webserver的client端,windows系统环境下两台机器测试通过没有问题

    在Linux下QT通过gSOAP调试WebService接口的方法实例

    在Linux环境下,开发基于Qt的Web服务客户端应用时,gSOAP是一个非常实用的工具,它允许程序员使用C或C++来调用Web服务接口。本教程将深入探讨如何使用gSOAP在Linux上通过Qt来调试一个天气预报的WebService接口。 ...

Global site tag (gtag.js) - Google Analytics