webservice快速入门-使用wsimport生成ws服务端(二)
来源:互联网 发布:西安高新区软件公寓 编辑:程序博客网 时间:2024/05/16 00:41
接着昨天的示例。
由于之前的示例是在当前项目下发布的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快速入门-使用wsimport生成ws服务端(二)
- webservice快速入门-使用wsimport生成ws服务端(二)
- 使用wsimport生成ws服务端
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- JAX-WS(二)之使用wsimport创建WebService客户端
- JAX-WS(二)之使用wsimport创建WebService客户端
- JAX-WS(二)之使用wsimport创建WebService客户端
- 使用wsimport生成WebService客户端
- Axis1.4 快速入门 发布WebService服务端、生成WebService客户端
- JAX-WS使用wsgen和wsimport从Java创建WebService
- 1.webservice快速实例以及wsimport使用
- wsimport根据服务端的webservice生成客户端代码
- 使用wsimport命令生成webservice文件
- 使用命令wsimport生成WebService客户端
- iOS 声明属性关键字讲解
- elf文件格式与动态链接库
- iphone App的国际化
- PHP jqGrid 表格数据更新帮助代码
- ACdream 1038 (想法+排序)
- webservice快速入门-使用wsimport生成ws服务端(二)
- Android接口定义语言(AIDL)
- C++逗号表达式
- 12个有趣的C语言面试题
- 如何成为一名程序员
- 内存管理
- Poj 3348 Cows (凸包面积)
- 如何彻底关闭Windows7自动更新——图文详解
- 判断一个有向图是否有环