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

操作系统期末大题类型题解

额,OS主要这回考程序分析题,PV操作、生产者消费者啊,哲学家进餐问题,死锁问题啊,如何避免死锁,经典银行家算法,页面置换算法啥的,磁盘调度......总计还有很多,就不一一说了 PV操作 谈到PV操作,首先要了解什么是信号量,其实就是用来解决互斥与同步问题的,分为原语wait(S)和signal(S),也就是我们常说的PV操作,在这里给出王道上的概念 wait(S){ while(S>0) S=S-1; } signal(S){ S=S+1; } 记录型信号量

ZXxxiaoxuan的博客 792

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

ldpc编解码器设计与仿真

计算校验节点到变量节点的消息 m_{c \to v}=2 \cdot atanh(\prod_{v’ \in N©\setminus v}tanh(\frac{m_{v’ \to c}}{2}))。计算变量节点到校验节点的消息 m_{v \to c}=L_{v,0}+\sum_{c’ \in M(v)\setminus c}m_{c’ \to v}。◦ 对于每个变量节点 v,计算最终 LLR 值 L_{v,f}=L_{v,0}+\sum_{c \in M(v)}m_{c \to v}。

youngerwang的博客 808

CentOS 9 Stream 上安装 MySQL 8.0+

根据提示进行设置,包括设置新的 root 密码、禁用远程 root 登录等。MySQL 在首次安装时会生成一个临时密码。这样就完成了 MySQL 8.0.37 的安装。这将安装最新的 MySQL 8.0 版本。

小强不是坑 1679

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

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

深之JohnChen的专栏 7641

Windows 10/11下彻底卸载Chrome的终极指南(附一键清理注册表脚本)

本文提供了一份在Windows 10/11系统中彻底卸载Google Chrome浏览器的终极指南。针对标准卸载后用户数据与注册表项残留的问题,文章详细介绍了从应用程序层、用户数据层到系统集成层的三层深度清理方法,并重点提供了安全高效的注册表清理脚本,确保浏览器所有痕迹被完全移除,解决重装冲突并释放磁盘空间。

elastic6hunter的博客 781

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

LeGo-LOAM源码篇:源码分析(3)

mapOptmization.cpp,主要内容包括回环检测、scan-to-map位姿优化、因子图。

slamml 1382

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8123

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

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

wc0077的专栏 1万+

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2664

WSDL(WebServerDiscriptionLanguage)

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

浪子回头金不换 620

[解决] PDF转图片,中文乱码或显示方框的解决方案

在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。

DazedMen的博客 1924

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

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

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

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

石船龙 2647

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

余额充值