webservice快速入门-使用wsimport生成ws服务端(二)

    上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式:

1.导出WebService服务端服务接口到jar包,客户端引入jar包即可,Client开发步骤详见上一篇博客。

2.通过wsimport工具导出webservice服务,同时简化Client开发。

本文主要介绍通过wsimport导出webservice:

wsimport有几个很重要的参数,

-d 表示输出的目录,目录必须事先存在,否则导出失败。

 -keep表示导出webservice的class文件时是否也导出源代码java文件。

-verbose表示详细信息。

看我们的导出命令。我们直接导在d盘中。

 

我们直接把生成的目录放在第2个建好的项目中去。这样我们客户端的项目就可以直接使用服务端的接口IMyservice了。顺便我们把前一章的client访问类也拷过来测试一下。目录结构如下【注意这是一个新的项目】:

直接运行MyClient测试一下。

 1 package org.WebService.ws.annotation;
 2 
 3 import java.net.MalformedURLException;
 4 import java.net.URL;
 5 
 6 import javax.xml.namespace.QName;
 7 import javax.xml.ws.Service;
 8 
 9 public class Client {
10 
11     public static void main(String[] args) throws MalformedURLException {
12         // TODO Auto-generated method stub
13         URL url=new URL("http://localhost:9998/hw?wsdl");
14         QName qname = new QName("http://annotation.ws.WebService.org/", "CalculatorImplService");
15         Service service = Service.create(url, qname);
16         ICalculator cal = service.getPort(ICalculator.class);
17         cal.add(1, 2);
18         cal.minus(2, 1);
19         
20     }
21 
22 }

和之前我们在服务端测试的效果是一样的,不同的是文件不一样。wsimport生成的文件将服务端的webservice折成若干文件了。每一个方法和请求分别对应2个文件。你会发现其中有个类CalculatorImpl:

@WebServiceClient(name="CalculatorImplService", targetNamespace="http://annotation.ws.WebService.org/", wsdlLocation="http://localhost:9998/hw?wsdl")
public class CalculatorImplService extends Service
{

这个类是注解好的客户端程序,它里面有个方法:

@WebEndpoint(name="CalculatorImplPort")
public ICalculator getCalculatorImplPort()
{
return ((ICalculator)super.getPort(new QName("http://annotation.ws.WebService.org/", "CalculatorImplPort"), ICalculator.class));
}

直接帮我们生成了一个qname访问程序。既然如何,我们就不用自己写qname了,直接拿来用测试岂不更好?

 

简化后的客户端测试方法如下

  1. public class MyClient2 {  
  2.     public static void main(String[] args) {  
  3.         CalculatorImplService myServiceImplService=new CalculatorImplService();  
  4.         ICalculator msis= myServiceImplService.getCalculatorImplPort();  
  5.         msis.add(1, 4);  
  6.         msis.minus(1, 4);  
  7.     }  
  8. }  

结果是一样的。

 

posted on 2015-10-17 09:31  ilinux_one  阅读(3140)  评论(0编辑  收藏  举报

导航