真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService
原文网址: http://www.cnblogs.com/Johness/archive/2013/04/19/3030392.html WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷。知名的XFile(新的如CXF)、Axis1、Axis2等。 而Sun公司也不甘落后,从早期的JAX-RPC到现在成熟的、支持RPC调用与消息传递的JAX-WS都经过了市场的考验,十分成熟,而且使用JAX-WS开发WebService的收益是很大的,它是轻量级的。
我们使用JAX-WS开发WebService只需要很简单的几个步骤:写接口和实现=>发布=>生成客户端(测试或使用)。 而在开发阶段我们也不需要导入外部jar包,因为这些api都是现成的。首先是接口的编写(接口中只需要把类注明为@WebService,把要暴露给客户端的方法注明为@WebMethod即可,其余如@WebResult、@WebParam等都不是必要的,而客户端和服务端的通信用RPC和Message-Oriented两种,区别和配置以后再说):
1 package service; 2
3 import java.util.Date; 4
5 import javax.jws.WebMethod; 6 import javax.jws.WebParam; 7 import javax.jws.WebResult; 8 import javax.jws.WebService; 9 import javax.jws.soap.SOAPBinding; 10
11 /**
12 * 作为测试的WebService接口 13 * 14 * @author Johness 15 16 */
17 @WebService 18 @SOAPBinding(style = SOAPBinding.Style.RPC) 19 public interface SayHiService { 20
21 22 * 执行测试的WebService方法 23 24 @WebMethod 25 void SayHiDefault(); 26
27 28 * 执行测试的WebService方法(有参) 29 30 @param name 31 32 @WebMethod 33 void SayHi(@WebParam(name = "name") String name); 34
35 36 * 执行测试的WebService方法(用于时间校验) 37 38 clentTime 客户端时间 39 @return 0表示时间校验失败 1表示校验成功 40 41 @WebMethod 42 @WebResult(name = "valid") 43 int CheckTime(@WebParam(name = "clientTime") Date clientTime); 44 }
然后是实现类(注解@WebService及其endpointInterface属性是必要的): package service.imp; import java.text.SimpleDateFormat; 4 5 8 import service.SayHiService; * 作为测试的WebService实现类 17 @WebService(endpointInterface = "service.SayHiService") class SayHiServiceImp implements SayHiService { 21 @Override 22 void SayHiDefault() { 23 System.out.println("Hi,Johness!"); 24 } 25 26 @Override void SayHi(String name) { 28 System.out.println("Hi," + name + "!"); 29 } 30 31 @Override 32 int CheckTime(Date clientTime) { 33 // 精确到秒 34 String dateServer = new java.sql.Date(System.currentTimeMillis()) 35 .toString() 36 + " " 37 + new java.sql.Time(System.currentTimeMillis()); 38 String dateClient = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 39 .format(clientTime); 40 return dateServer.equals(dateClient) ? 1 : 0; 41 } 42 43 } |