Java 的 WebService概述
本文主要介绍java6以后的JAX-WS(JWS),
Java 的 WebService框架有JWS、Axis2、XFire、CXF、Spring WS,简单介绍:
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两种,其他请查资料)
示例
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
//@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWorld {
String sayHi(@WebParam(name = "who") String who);
String sayHello(@WebParam(name = "who") String who);
}
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
//@WebService(endpointInterface = "com.conquer.comutils.core.jws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@WebMethod// 默认的,可省略
@Override
public String sayHi(String who) {
return "hi, " + who;
}
// 排除的方法
@WebMethod(exclude = true)
@Override
public String sayHello(@WebParam(name = "who") String who) {
return "hello, " + who;
}
}
import javax.xml.ws.Endpoint;
public class Main {
static final String ADDRESS = "http://localhost:8080/test/jaxws/services/HelloWorld";
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorldImpl();
Endpoint.publish(ADDRESS, helloWorld);
System.out.println("JAX-WS WebService 服务已启动");
}
}
运行main就可以发布一个webservice了。
最后是客户端使用,由于WebService是平台和语言无关的基于xml的,所以我们完全可以使用不同语言来编写或生成客户端。以下是在Windows平台下使用jdk自带工具wsimport生成客户端的方式:
jdk自带的wsimport工具生成,上图我是把客户端文件生成到了桌面src文件中(-d),并保留了源文件(-keep),指定了包名(-p)。
然后我们就可以使用生成的文件来调用服务器暴露的方法了
值得一提的是你生成使用的jdk和你客户端的jre需要配套!
从上面的目录结构我们可以发现:服务端的每个webmethod都被单独解析成为了一个类(如果使用了实体,实体也会被解析到客户端,并且是源码,所以建议使用实体时慎重)。