webservice wsdl 生成服务
由于之前的示例是在当前项目下发布的server,也是在当前项目下访问的server发布的webservice。但在实际应用中,我们的服务端往往是和客户諯分离的,甚至它们是不同的项目中不同的人写的。而像之前的在当前项目中使用服务端的接口类:IMyService就不太现实了。因为此时你只有服务端的wsdl,怎么可以直接用服务端的接口类接收并测试呢。如何解决这个问题?
JDK的bin目录下自带就有一个工具,wsimport。一个用来导出webservice的东东,服务端可以导其导出后生成jar文件,然后客户端引用不就行了?
好的,我们下面来看下怎么使用它。
它有几个很重要的参数,
-d 表示输出的目录,目录必须事先存在,否则导出失败。
-keep表示导出webservice的class文件时是否也导出源代码java文件。
-verbose表示详细信息。
看我们的导出命令。我们直接导在d盘中。
- wsimport -d d: -keep -verbose http://localhost:7777/tudou?wsdl
我们导出的文件目录是D:\com\whaty\platform\ws\server这个目录大家有没有发现,正好和我们之前的服务器端目录是一样的,但实际上在wsdl中namespace是相反的http://server.ws.platform.whaty.com/。也就是说服务端生成wsdl时反过来生成了namespace,而wsimport根据wsdl生成时又反过来给还原了去。
我们直接把生成的目录放在第2个建好的项目中去。这样我们客户端的项目就可以直接使用服务端的接口IMyservice了。顺便我们把前一章的client访问类也拷过来测试一下。目录结构如下【注意这是一个新的项目】:
直接运行MyClient测试一下。
- package com.whaty.platform.ws.client;
- import java.net.MalformedURLException;
- import java.net.URL;
- import javax.xml.namespace.QName;
- import javax.xml.ws.Service;
- import com.whaty.platform.ws.server.IMyservice;
- /**
- * @className:MyClient.java
- * @Desc:访问发布的服务
- * @author:lizhuang
- * @createTime:2012-12-21 上午01:23:57
- */
- public class MyClient {
- public static void main(String[] args) {
- try {
- //服务WSDL Document的地址
- URL url = new URL("http://localhost:7777/tudou?wsdl");
- //1.Qnameqname是qualified name 的简写
- //2.构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成
- //由发布的wsdl可知namespace为http://server.ws.platform.whaty.com/,
- QName qname=new QName("http://server.ws.platform.whaty.com/","MyServiceImplService");
- Service service=Service.create(url, qname);
- IMyservice ms=service.getPort(IMyservice.class);
- ms.add(1, 4);
- ms.minus(1, 4);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- }
- }
控制台打印:
a+b=5
a-b=-3
看到没有,和之前我们在服务端测试的效果是一样的,不同的是文件不一样。wsimport生成的文件将服务端的webservice折成若干文件了。每一个方法和请求分别对应2个文件。你会发现其中有个类MyServiceImplService:
- @WebServiceClient(name = "MyServiceImplService", targetNamespace = "http://server.ws.platform.whaty.com/", wsdlLocation = "http://localhost:7777/tudou?wsdl")
- public class MyServiceImplService
这个类是注解好的客户端程序,它里面有个方法:
- /**
- *
- * @return
- * returns IMyservice
- */
- @WebEndpoint(name = "MyServiceImplPort")
- public IMyservice getMyServiceImplPort() {
- return super.getPort(new QName("http://server.ws.platform.whaty.com/", "MyServiceImplPort"), IMyservice.class);
- }
直接帮我们生成了一个qname访问程序。既然如何,我们就不用自己写qname了,直接拿来用测试岂不更好?
简化后的客户端测试方法如下:
- package com.whaty.platform.ws.client;
- import com.whaty.platform.ws.server.IMyservice;
- import com.whaty.platform.ws.server.MyServiceImplService;
- /**
- * @className:MyClient2.java
- * @Desc:使用JDK wsimport生成的MyServiceImplService快速访问我们的服务。
- * @author:lizhuang
- * @createTime:2012-12-22 上午12:24:37
- */
- public class MyClient2 {
- public static void main(String[] args) {
- MyServiceImplService myServiceImplService=new MyServiceImplService();
- IMyservice msis= myServiceImplService.getMyServiceImplPort();
- msis.add(1, 4);
- msis.minus(1, 4);
- }
- }
你会发现结果是一样的。
webservice wsdl 生成服务的更多相关文章
- 根据wsdl生成服务端代码
场景描述 最近在和一家公司做业务接口对接,由他们那边回调我们这边,对方直接扔过来一个webservice的wsdl文件,让我们按照他们的规范来做webservice服务, 大多数的对接应该是我们创建完 ...
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...
- 【转】SoapUI5.0创建WebService接口模拟服务端
原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...
- 根据WSDL生成代理类方式
方式一: 1.使用VS2010提供的工具wsdl.exe由WSDL文件生成cs文件 使用wsdl.exe的/serverInterface选项(或缩写的 /si)指定输入的wsdl文件(注意,如果要转 ...
- 使用GSoap开发WebService客户端与服务端
Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...
- wsdl自动生成Java代码,根据wsdl生成Java代码
wsdl自动生成Java代码,根据wsdl生成Java代码 >>>>>>>>>>>>>>>>>&g ...
- Java WebService接口生成和调用 图文详解>【转】【待调整】
webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...
- SoapUI5.0创建WebService接口模拟服务端(转)
转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 Mat ...
- WebService技术,服务端and客户端JDK-wsimport工具(一)
使用webservice服务,需要了解几个名词:soap 简单对象协议.http+xml . WSDL 先看下代码结构: 服务端代码与客户端代码分别处于两不同的包中 一.服务端内容 服务端: @Web ...
随机推荐
- 编译mgiza的准备
cmake之前需要首先设置环境变量: export BOOST_LIBRARYDIR=$BOOST_ROOT/lib64export BOOST_ROOT=/home/noah/boost_1_57_ ...
- WPF中多窗口共享静态属性
由于我的DoubanFm在重新考虑之后,需要设置一个全局的CurrentSong,这个字段要让所有的VM都知道,而我同时又想把它作为我所有VM的共有属性.而且我想尽量减少代码的复制,提高重用.所以我做 ...
- SQL基础篇---基本概念解析
1.数据库database:保存表和其他相关SQL结构容器(一般是一个文件或者一组文件) 2.SQL (Structared Query Language):是一种专门用来与数据库沟通的语言,是一种结 ...
- 安装MySQL的心得
1.去官网上下载适合自己电脑的安装包,最好在网上查查教程起码知道自己应该怎么下载,下载哪一个. 2.我遇到的问题不多:<1>.没在bin目录下安装,启动数据库时出现错误2:<2> ...
- Erlang generic standard behaviours -- gen_server module
在分析完gen module (http://www.cnblogs.com/--00/p/4271386.html)之后,就可以开始进入gen_server 的主体module 了.gen_serv ...
- yum代理设置
vi /etc/yum.conf 加入以下:proxy=http://代理服务器ip:port 如果代理需要账号密码:proxy_username=userproxy_password=密码
- [转]Reed Solomon纠删码
[转]Reed Solomon纠删码 http://peterylh.blog.163.com/blog/static/12033201371375050233/ 纠删码是存储领域常用的 ...
- Java实现UDP之Echo客户端和服务端
Java实现UDP之Echo客户端和服务端 代码内容 采用UDP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- [SSH服务]——SSH详解、常用的远程连接工具
在总结ssh原理前,我先做了一个ssh过程的实验 首先我搭建了这样一个实验环境: (1) SSH Server:10.0.10.198 (2) SSH Client:10.0.10.158 在Serv ...
- shell if判断的种类
if [ $# != 1 ] ; then echo "USAGE: $0 TABNAME" echo " e.g.: $0 CDR_CALL_20040701" ...