JDK提供webService支持的案例,以及wsimport的使用

13 篇文章 0 订阅
JDK6提供了对Web Service原生的支持,对Web Service进行了完美的封装,完全隐藏了底层内容,甚至可以不用了解wsdl的具体规范。使用Web Service就像使用本地方法一样简单。下面来举个例子,依然从最简单的例子入手。
 
 
Java代码   收藏代码
  1. package test1;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 
  6.  * @author
  7.  * @version 
  8.  */  
  9. public class Car implements Serializable{  
  10.   
  11.     private static final long serialVersionUID = 606544377239576049L;  
  12.   
  13.     private String name;  
  14.     private Integer capacity;  
  15.       
  16.  /  
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.  
  25.     public Integer getCapacity() {  
  26.         return capacity;  
  27.     }  
  28.    
  29.     public void setCapacity(Integer capacity) {  
  30.         this.capacity = capacity;  
  31.     }  
  32.       

Java代码   收藏代码
  1. package test1;  
  2.   
  3. import javax.jws.WebMethod;  
  4. import javax.jws.WebParam;  
  5. import javax.jws.WebResult;  
  6. import javax.jws.WebService;  
  7. import javax.jws.soap.SOAPBinding;  
  8.   
  9. /** 
  10.  * @author 
  11.  * @version
  12.  */  
  13. @WebService  
  14. @SOAPBinding(style = SOAPBinding.Style.RPC)  
  15. public class Message {  
  16.   

  17.     @WebMethod(operationName = "toSayHello", action = "sayHello", exclude = false)  
  18.     @WebResult(name = "returnWord")  
  19.     // 自定义该方法返回值在WSDL中相关的描述  
  20.     public String sayHello(@WebParam(name = "userName") String userName) {  
  21.         return "Hello:" + userName;  
  22.     }  
  23.   
  24.    
  25.     @WebMethod(operationName = "getCar", action = "getCar")  
  26.     @WebResult(name = "returnCar")  
  27.     public Car getCar(String name) throws Exception{  
  28.         Car c = new Car();  
  29.         c.setName(name);  
  30.         c.setCapacity(100);  
  31.         System.out.println("return a Car: " + name);  
  32.         return c;  
  33.     }  



 
使用命令 wsgen -cp ./bin -r ./src/test1/wsgen -s ./src -d ./bin -wsdl test1.Message ,得到wsdl文件
(需要先在工程目录下src/test1下新建目录wsgen)
如果发布webservice的java类的方法中有异常声明,wsgen命令会在test1目录下自动新建目录jaxws,并生成Exception实体bean类,如本例中生成ExceptionBean.java (在指定的wsgen目录中生成wsdl文件和xsd文件)
 


 

 
而后发布Web Service
 
Java代码   收藏代码
  1. package test1;  
  2.   
  3. import javax.xml.ws.Endpoint;  
  4.   
  5. /** 
  6.  * @author 
  7.  * @version
  8.  */  
  9. public class StartServer {  
  10.   
  11.     
  12.     public static void main(String[] args) {  
  13.         Endpoint.publish("http://localhost:8080/Message"new Message());  
  14.         System.out.println("Server已启动");  
  15.     }  
  16.   



 
 
在浏览器中输入url  http://localhost:8080/Message?wsdl  即可发现WebServices 已发布成功。
 

JDK的bin目录下自带就有一个工具,wsimport。一个用来导出webservice的东东,服务端可以导其导出后生成jar文件,然后客户端引用不就行了?

好的,我们下面来看下怎么使用它。


它有几个很重要的参数,



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

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

-verbose表示详细信息。

-p wsimport.url 指定包

-s 指定源文件位置

wsimport -d d: -keep -verbose http://localhost:port/xxxxxx?wsdl  生成的包名,实际上在wsdl中namespace是相反的,二者对应

客户端调用
还是在工程目录下使用wsimport命令,根据wsdl描述生成的客户端执行类,下面2种方式都可以。
wsimport -d ./bin -s ./src -p wsimport.url http://localhost:8080/Message?wsdl
wsimport -d ./bin -s ./src -p wsimport.file ./src/test1/wsgen/MessageService.wsdl


 我们发现2种方式wsimport生成的客户端文件完全一样,接着我们只要新建一个客户端测试类执行(RunClient.java)。
Java代码   收藏代码
  1. package wsimport.url;  
  2.   
  3. /** 
  4.  * @author 
  5.  * @version

  6.  */  
  7. public class RunClient {  
  8.   
  9.  
  10.     public static void main(String[] args) throws Exception_Exception {  
  11.         MessageService ms = new MessageService();  
  12.         Message m = ms.getMessagePort();  
  13.         System.out.println("客户端打印:");  
  14.         System.out.println(m.toSayHello("hello, java6 webservice"));  
  15.         Car c = m.getCar("zhuc-car");  
  16.         System.out.println(c.getName());  
  17.         System.out.println(c.getCapacity());  
  18.     }  
  19.   


 
输出结果:
客户端打印:
Hello:hello, java6 webservice
zhuc-car
100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值