客户端使用gsoap,访问基于jax-ws框架的java webservice

高效WebService接口代码生成工具实战解析 WSDL的一个核心优势在于其对服务接口的“抽象”能力——即先定义功能行为,再决定如何实现和传输。这一过程主要依赖于<message>和<portType>两个关键元素,分别负责数据单元建模和行为契约定义。 阅读详情
注释:该文章相关三个工程的源代码在我的账号的资源中,资源名称为“gsoap客户端Jax-ws服务端实例”
 
一.构建jax-ws服务端

1.在myeclipse8.x中建一个基于jax-ws的项目,项目名称“jsServer”

2.建立一个包,包名为“wstestserver”

3.在包中添加名为“CHelloWorldManager”的类,具体代码:


public class CHelloWorldManager implements IHelloWorldManager {
	
	public long add(long a, long b)
	{
		return a + b;
	}
	
	public void sayHello()
	{
		System.out.println("hello!");
	}
	
	public String reverse(String str)
	{
		StringBuffer strBuf = new StringBuffer();
		int nLen = str.length();
		for(int i=nLen; i>0; i--)
		{
			strBuf.append(str.charAt(i-1));
		}
		return strBuf.toString();
	}
}

当然,IHelloWorldManager接口是什么样的,通过实现类,也就知道了,这里不列出。

4.在jsServer中添加web service服务

下一步如图:

再下一步如图:

5.配置jsServer项目的web.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
  	<description>
  		JAX-WS endpoint - CHelloWorldManagerService
  	</description>
  	<display-name>CHelloWorldManagerService</display-name>
  	<servlet-name>CHelloWorldManagerService</servlet-name>
  	<servlet-class>
  		com.sun.xml.ws.transport.http.servlet.WSServlet
  	</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>CHelloWorldManagerService</servlet-name>
  	<url-pattern>/CHelloWorldManagerPort</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
  	<listener-class>
  		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  	</listener-class>
  </listener>
</web-app>

6.配置jsServer项目的sun-jaxws.xml如下:

<?xml version = "1.0"?>
<endpoints version="2.0"
	xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
	<endpoint name="CHelloWorldManagerPort"
		implementation="wstestserver.CHelloWorldManagerDelegate"
		url-pattern="/CHelloWorldManagerPort">
	</endpoint></endpoints>


7.启动jsServer服务

8.在浏览器中输入地址,访问该web service,地址(当然每个人的服务启动计算机不一样,需要对改地址进行适当调整,以及要注意端口)是:

http://localhost:8081/jsServer/CHelloWorldManagerPort?wsdl

访问后就会出现下图效果

 

二.建立基于gsoap的VS2005的web service客户端

1.建立一个名为“testxxwe”的控制台工程

2.到官网下载gsoap_2.7.16.zip

3.根据.wsdl文件,生成vs2005所需的头文件,具体命令:

wsdl2h -o helloworldManagerClient.h http://localhost:8081/jsServer/CHelloWorldManagerPort?wsdl

在当前目录下就会生成helloworldManagerClient.h文件

4.根据helloworldManagerClient.h头文件生成相关存根、代理程序。具体命令:

soapcpp2 -C helloworldManagerClient.h(注意:一定要是大写C,不是小写c。大写C以为着C++,小写的意味着c语言)

在当前目录下就会生成如下这些文件

2013/11/20  11:22               451 CHelloWorldManagerPortBinding.add.req.xml
2013/11/20  11:22               446 CHelloWorldManagerPortBinding.add.res.xml
2013/11/20  11:22               544 CHelloWorldManagerPortBinding.nsmap
2013/11/20  11:22               438 CHelloWorldManagerPortBinding.reverse.req.xml
2013/11/20  11:22               453 CHelloWorldManagerPortBinding.reverse.res.xml
2013/11/20  11:22               421 CHelloWorldManagerPortBinding.sayHello.req.xml
2013/11/20  11:22               433 CHelloWorldManagerPortBinding.sayHello.res.xml
2013/11/20  10:49            25,107 helloworldManagerClient.h
2013/11/20  11:22           107,005 soapC.cpp
2013/11/20  11:22             2,654 soapCHelloWorldManagerPortBindingProxy.h
2013/11/20  11:22             6,328 soapClient.cpp
2013/11/20  11:22               698 soapClientLib.cpp
2013/11/20  11:22            36,235 soapH.h
2013/11/20  11:22            11,365 soapStub.h
2013/11/20  11:41           443,486 stdsoap2.cpp
2010/04/06  12:23            83,916 stdsoap2.h
              16 个文件        719,980 字节


5.将除了soapClientLib.cpp文件外的所有生成.h,.cpp,.nsmap文件导入VS2005工程

6.对testxxwe.cpp文件做如下修改,以测试jsServer的三个服务接口(add,Reverse,sayHello),代码如下:

 

// testxxwe.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "..\gsoapHelloWorldManagerCliend\soapH.h"
#include "..\gsoapHelloWorldManagerCliend\soapCHelloWorldManagerPortBindingProxy.h"

const int REVERSE_STRING_MAX = 256;

void addTestExample();

void ReverseStringTest();

void SayHelloTest();

int _tmain(int argc, _TCHAR* argv[])
{

	addTestExample();

	ReverseStringTest();

	SayHelloTest();

	return 0;
}

//在服务器端调用sayHello(),这样服务器端就会输出"Hello"
void SayHelloTest()
{
	while (1)
	{

		struct soap hellomanager;
		CHelloWorldManagerPortBinding hellobind;

		ns1__sayHello toSayHello;
		ns1__sayHelloResponse responseSayHello;

		int nResult = hellobind.__ns1__sayHello(&toSayHello, &responseSayHello);

		if (0 == nResult)
		{
			printf("The sayHello success!");
		}
		else
		{
			printf("soap error , errcode = %d\n", nResult);
		}


		printf("continue:plese choose y or n");

		char c='c';
		
		scanf("%c", &c);
		getchar();

		printf("%c\n", c);
		if ('y' != c)
		{
			break;
		}

	}
}

//调用服务器端的int add(int a, int b);
void addTestExample()
{
	struct soap hellomanager;
	CHelloWorldManagerPortBinding hellobind;

	ns1__add toAdd;
	int a=0;
	int b=0;

	while(1)
	{

		scanf("%d", &a);
		scanf("%d", &b);

		toAdd.arg0 = a;
		toAdd.arg1 = b;

		ns1__addResponse responseAdd;

		int nResult = hellobind.__ns1__add(&toAdd, &responseAdd);

		if (0 == nResult)
		{
			printf("The add(%d,%d) = %d", a, b, responseAdd.return_);
		}
		else
		{
			printf("soap error , errcode = %d\n", nResult);
		}


		printf("continue:plese choose y or n");

		char c='c';

		getchar();
		scanf("%c", &c);

		printf("%c\n", c);
		if ('y' != c)
		{
			break;
		}
	}

}

//调用服务器端的String Reverse(char * string);
void ReverseStringTest()
{
	char *p =  new char[REVERSE_STRING_MAX];
	memset(p, 0, REVERSE_STRING_MAX);

	while(1)
	{
		struct soap hellomanager;
		CHelloWorldManagerPortBinding hellobind;

		ns1__reverse toReverse;

		
		if(NULL != p)
		{
			gets_s(p, REVERSE_STRING_MAX);
			printf("the input string is:%s\n", p);
			toReverse.arg0 = p;
		}
		else
		{
			printf("error here 2013年11月20日15:41:25");
			break;
		}
		

		ns1__reverseResponse responseReverse;

		int nResult = hellobind.__ns1__reverse(&toReverse, &responseReverse);


		if (0 == nResult)
		{
			printf("The reverse(%s)\n", responseReverse.return_);
		}
		else
		{
			printf("soap error , errcode = %d\n", nResult);
		}


		printf("continue:plese choose y or n");

		char c='c';

		getchar();
		scanf("%c", &c);

		printf("%c\n", c);
		if ('y' != c)
		{
			break;
		}
	}

	if (NULL != p)
	{
		delete []p;
		p = NULL;
	}
}


7.编译运行该VS2005工程,就可以正式测试了,我这里测试已经OK

 

三.如果你还想用java的客户端对jsServer进行访问测试,可以继续阅读该文章

1.建立一个名为jsClient的java程序

 

2.在改工程下添加web service client,如下图:


下下一步如下图:

最后点击完成即可。

 

3.添加test包,以及包下添加test.java

4.在test.java中添加如下所示的代码:

package test;

import wstestserver.CHelloWorldManagerDelegate;
import wstestserver.CHelloWorldManagerService;
public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CHelloWorldManagerDelegate hwDelegete = new CHelloWorldManagerService().getCHelloWorldManagerPort();
		long n = hwDelegete.add(3,5);
		hwDelegete.sayHello();
		String str = hwDelegete.reverse("Hello world!");
		System.out.println(str);
		System.out.println(n);
	}

}
5.向工程中添加jax-ws包
OK,完毕!测试运行即可。
 
纪念一下吧,完成时间2013年11月20日16:46:52



        
用gsoap实现面向Java客户端的WebService.pdf 立即下载

相关推荐

gsoap2.8实现webservice与java交互

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多,可以实现不同语言的交互

gsoap java_gSoap的JAVA客户端

WebService的一段示例,服务端是利用gSoap写的,然后C++编写的客户端测试结果是正常的,利用地址http://127.0.0.1:1234也是可以看到完整的WSDL代码在JAVA客户端方面,利用wsimport命令...WebService的一段示例,服务端是利用gSoap写的,然后C++编写的客户端测试结果是正常的,利用地址http://127.0.0.1:1234也是可以看到完整的...

weixin_35651578的博客 337

java客户端调用C++ GSoap生成的webservice

NULL 博文链接:https://jianghs.iteye.com/blog/629566

gsaop java 教程_gsoap使用方法总结

1、 解压gsoap_2.8.10;2、 在目录\gsoap_2.8.10\gsoap-2.8\gsoap\bin\win32下3、 打开运行-》cmd-》cd到以上目录下;5、 把gsoap->import里面的soap12.h 和stlvector.h复制到win32目录下6、 执行soapcpp2.exe -C test.h命令,会生成大堆文件soapStub.h /...

weixin_39687814的博客 373

gsoap客户端Jax-ws服务端实例

vs2005控制台程序给予gsoap访问myeclipse8.x给予jax-ws的web service服务 在我的博客中,有详细的步骤描述

C++使用gsoap调用webservice接口

C++使用gsoap调用webservice接口,无需积分,仅供参考,内置说明文档,欢迎下载。

gsoap c++ java_gsoap的c++ server和java client实现

最近项目需要建立向客户方已有系统推送类似于RSS信息的富文本信息,并推送信息待定,由于我们本身项目是C++的,客户系统是java的,又要满足到推送信息可定制可扩展,并必要时可web查看,思量之下采用gsoap轻量级webserver库开发。现用经典的hello项目进行技术可行性验证,同时记录下来,供日后遗忘时参考。1)资料准备:下载:gsoap_2.8.22.zip,axis2-1.7.5-bin...

weixin_39932330的博客 172

Ansys Zemax|无焦系统设计中的角度单位优化技巧

本文详细介绍了在Ansys Zemax OpticStudio中进行无焦系统设计的核心技巧。重点阐述了从聚焦思维到角度思维的转换,并演示了如何通过开启‘无焦像空间’模式、构建以波前和光束尺寸为目标的评价函数来优化激光扩束镜等系统。文章还分享了使用IMSF操作数处理混合系统以及常见误区避坑的实用指南,旨在帮助光学设计者高效完成无焦系统的设计与分析。

weixin_29231027的博客 357

使用gsoap访问java版本的SOAP服务器

gsoap是C++版本的SOAP框架,我的服务器是AXIS2搭建的SOAP服务器。我将使用gsoap来访问我的服务器。 1.下载soap,并进入到下面文件夹(我下载到D盘) D:\gsoap-2.8\gsoap\bin\win32 2.下载wsdl文件 我的在本地服务器,可以右键另存为 .xml文件。 3.将.xml文件生成C++版本的.h文件

传播知识,分享快乐! 606

【嵌入式笔试题】C语言笔试题(4)

嵌入式C语言综合笔试题

m0_74055118的博客 1066

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1548

VS2008非托管c++访问webservice服务

Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用。不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码,编译出Sproxy.exe,这个工具可以根据wsdl文件来生成非托管的代理类。这个代理类还需要配合一些头文件才能一起使用,这个相关的头文件都包含在ATL Server 的源代码内。1. 第一步需要使用s

深之JohnChen的专栏 7641

黑猫带你学eMMC协议第1篇:全网最全emmc协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

黑猫带你学eMMC协议第7篇:全网最全emmc写保护详解(write protect) 黑猫带你学eMMC协议第8篇:emmc可靠写详解(Write Reliability) 黑猫带你学eMMC协议第9篇:emmc的分区配置(partitioning) 黑猫带你学eMMC协议第10篇:eMMC命令队列详解(CMDQ) 黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim…) 黑猫带你学eMMC协议第12篇:

黑猫奥利奥的博客 2万+

cxf 客户端调用gsoap生成的服务

cxf 客户端调用gsoap生成的服务 ---》下载 cxf并解压,进入cxf的bin目录下执行如下命令 wsdl2java -frontend jaxws21 -p com.test -d E:\codeTest\myCXF -client http://127.0.0.1:50001?wsdl 或 wsdl2java -p com.test -d E:\codeTe...

~纹之心 419

[PCIE5.0] 2.2.8.3 Error Signaling Messages

错误信号消息用于在 PCI Express 设备之间传递错误信息,帮助系统发现并报告错误。每当发生某种错误时,检测到该错误的设备会通过发送这些消息来通知系统。• 没有数据负载:这些错误信号消息不包含任何数据(即 TLP Type 是 Msg),它们仅用于错误报告。• 长度字段保留:在这些消息中,长度字段是保留的,不使用。• 功能号(Function Number)字段:这个字段标识哪个设备发生了错误。

系统固件工程师 292

LoRa双端通信稳定性核心:同步字配置与LLCC68工程实践

LoRa是一种基于扩频调制的远距离低功耗无线通信技术,其物理层鲁棒性依赖于发射端与接收端在频率、带宽、扩频因子及同步字等关键参数上的严格一致。同步字作为LoRa帧结构中位于前导码之后的2字节标识字段,承担着物理层帧过滤与网络隔离的核心作用,直接影响通信成功率与抗干扰能力。在实际嵌入式开发中,尤其采用LLCC68等专用射频芯片时,同步字配置错误或双端不一致是导致‘能发不能收’‘间歇性丢包’等典型问题的首要原因。本文面向STM32等Cortex-M平台开发者,结合硬件一致性约束、驱动移植方法论与寄存器级调试手段

weixin_36019375的博客 130

WSDLToJava Error: Rpc/encoded wsdls are not supported with CXF

Rpc/encoded wsdl style 是一个比较老的风格,在jax-WS2.0

wc0077的专栏 1万+

输入文件(Example-1.inp)参数解读与获取方法

弹性参数:优先使用默认值(泊松比 0.25、杨氏模量 8×10⁵ bars),或参考区域地质 / 地球物理研究。断层参数:从地震矩反演、GPS 位移反演、地质图 / 震源机制获取(核心参数,需确保准确性)。网格 / 图形参数:根据研究区范围和输出需求调整(步长 / 放大系数等)。

2301_79258000的博客 81

WSDL(WebServerDiscriptionLanguage)

前言      在实际项目开发中,特别是和第三方有接口,采用SOAP协议,然而用户提供一个WSDL文件,按照文档进行适配。故需要学习WSDL。 一、WSDL概述     WSDL:(WebServeDiscriptionLanguage)  (WSDL Web服务语言)是一个用于精确描述Web Service的文档格式。 WSDL文档是一个遵循WSDL XML模式的XML文档(文档

浪子回头金不换 620

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1054

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

使用GSoap开发WebService客户端与服务端

Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。用gsoap开发web service的大致思路我们开发webservice应用,大致有两个方向:1. API接口固定,不关心底层的通讯,将SOAP作为应用层协议此时,我们先定义接口,编写好.h文件,运行soapcpp2生成出相应的代码,对服务器端,修改X

石船龙 2647

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

gsaop java 教程,c++ 使用 gsoap 调用 java WebService

问题描述:使用gsoap时,如果WebService服务端及客户调用端都使用 C++ , 再传递中文时不会存在乱码问题,当客户端为 C++ ,WebService服务端使用Java、domino,传递中文则会有乱码问题。产生原因:宽字符的原因,解决办法(一):在程序中首先设置本地代码页vista 操作系统:setlocal(LC_ALL,"Chinese");soap_set_mode(soap,...

weixin_29081101的博客 226

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用gSOAP开发Web Service程序

gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出 SOAP/XML的服务器端和客户端。由于gSOAP具有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务。gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .N

李根生 的专栏 1514
上一篇: ORACLE学习笔记
下一篇: windows server2008 IE 普通用户(非管理员用户)不能进行安全配置
hellochenlian
博客等级 码龄17年 629粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellochenlian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值