客户端使用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

数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现

数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现

weixin_51693702的博客 1万+

使用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

亚马逊商品评论爬取与情感分析实战:Python+BeautifulSoup高效解析(附反爬技巧)

本文详细介绍了使用Python和BeautifulSoup库高效爬取亚马逊商品评论并进行情感分析的完整实战流程。文章从环境搭建、核心代码编写入手,重点讲解了如何通过设置请求头、添加延迟等防封策略应对反爬机制,确保数据抓取的稳定性。最后,利用TextBlob库对评论文本进行情感分析,并通过可视化图表直观展示产品口碑,为电商选品与市场调研提供数据支持。

weixin_29046611的博客 1164

Cursor3.0新界面使用说明

本文摘要:Cursor 3.x版本更新后,提供了两套主界面:Editor(类似VSCode的代码编辑器)和AgentsWindow(以AI智能体为中心的新界面)。Editor适合日常编码,AgentsWindow则支持并行运行多个AI任务、云端协作和多仓库管理。通过Ctrl+E可快速切换布局。文章详细介绍了AI聊天面板的操作技巧、四种工作模式(Agent/Plan/Ask/Debug)的区别,以及AgentsWindow的多任务管理功能。同时提供了Windows快捷键速查、中文化设置方法,并对比了新旧版本的

2501_90421497的博客 725

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

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

深之JohnChen的专栏 7641

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

A20802013的博客 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

【数据集4】GSWP3数据集详解

简介GSWP3数据集

WW、forever的博客 1366

AWS DevOps Agent 完全指南

AI 驱动的 SRE 队友,7×24 自主调查告警、定位根因、生成修复方案、预防未来故障。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 381

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

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

wc0077的专栏 1万+

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

WSDL(WebServerDiscriptionLanguage)

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

浪子回头金不换 620

把 Client 当成 ABAP 系统的多租户底座:从 sy-mandt 到 CDS_CLIENT 的隔离机制与工程实践

本文深入解析SAP ABAP系统中Client概念的本质与应用。Client不仅是数据表的MANDT字段,更是会话级别的隔离边界,贯穿用户登录、授权和数据访问控制全过程。文章从ABAP SQL的隐式Client处理机制出发,详细介绍了USING CLIENT、USING ALL CLIENTS等安全跨客户端访问方式,并对比了传统CLIENT SPECIFIED的风险。同时阐述了ABAP CDS中@ClientHandling注解的类型与算法选择,包括#AUTOMATED自动拼接和#SESSION_VARIA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 182

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

石船龙 2647

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

用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、付费专栏及课程。

余额充值