因为工作中使用了SOAP进行两个系统的接口调用,所以私下学习一下两种实现,粗略记录于此。本文侧重于实际实现操作,而不是理论原理。
个人简单理解:SOAP(Simple Object Access Protocol 简单对象访问协议)是基于XML和HTTP的用于实现网络连通的程序之间远程调用的协议(但是SOAP1.2中也可以使用非HTTP协议进行传输)。两个通过网络连接的程序体,通过一定规范的XML进行远程调用。更详细一点的可以参考浅谈 SOAP。
方式1、JAX-WS实现
JAX-WS是JDK自带的Web服务的API,它可以用于提供REST式或基于SOAP的服务。SOAP的JAX-WS实现有两种部署方式,一种是直接在应用程序中使用Endpoint发布;另一种是在web工程的web.xml中配置监听器,随着web工程的启动而启动。为了两种方式都使用,并且便于使用依赖,我这里创建的是一个maven web工程,工程名为SOAPServer,JDK版本是1.8。
1. 编写服务端。
用于提供服务的服务端类ServerDemo :
package demo;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class ServerDemo {
@WebMethod
public String sayHi(String name){
return "Hi: "+name+",this is SOAPServer";
}
@WebMethod
public String doSth(){
return "do some thing";
}
}
这个类很简单,只有两个方法,一个有参数,一个无参数。类名前面加了@WebService注解,方法名前面加了@WebMethod注解(SOAP还有许多其他的注解)。
2. 发布服务。
前面提到发布服务有两种方式。
(1)、使用Endpoint发布,编写用于发布的类:
package demo;
import javax.xml.ws.Endpoint;
public class Publisher {
public static void main(String[] args) {
String url = "http://localhost:8080/fistSoap";
Endpoint.publish(url, new ServerDemo());
}
}
运行main方法,使用浏览器访问http://localhost:8080/fistSoap, 如果有如下所示,即说明发布正常。
访问服务
(2)、使用web项目监听器发布。