思考:何为SOAP消息,为什么要创建SOAP消息,以及如何创建SOAP消息?
(1)到底什么是SOAP消息,有没有一个示例
WebService是一个应用组件,为其他应用程序提供数据和服务,各种应用程序通过网络协议和一些数据格式来访问WebService。
我们调用WebService,向服务端传过去soap结构体,哪个命名空间、哪个方法、哪些参数,处理之后返回客户端一个soap结构体,为我们调用相应方法返回的结果。
首先,我们先搭建服务端:
IMyService.java(要发布到WebService上的接口)
@WebService
public interface IMyService {
@WebResult(name="addResult")
public int add(@WebParam(name="a")int a, @WebParam(name="b")int b);
}
MyServiceImpl.java(具体的实现类)
@WebService(endpointInterface="org.soap.service.IMyService")
public class MyServiceImpl implements IMyService {
@Override
@WebResult
public int add(@WebParam(name = "a") int a, @WebParam(name = "b") int b) {
System.out.println("a+b=" + (a + b));
return (a + b);
}
}
MyServer.java(发布成服务)
public class MyServer {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8989/ms", new MyServiceImpl());
}
}
这里,我们先在Web Services Explorer中给大家运行一下:
在J2EE视图中,点击,进入WSDL Page,测试运行add()方法,如图
让我们来看看Status中的Source。
SOAP Request Envelope:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.soap.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:add>
<a>2</a>
<b>3</b>
</q0:add>
</soapenv:Body>
</soapenv:Envelope>
SOAP Response Envelope:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:addResponse xmlns:ns2="http://service.soap.org/">
<addResult>5</addResult>
</ns2:addResponse>
</S:Body>
</S:Envelope>
上面的这两段Source即为客户端与服务器之间传递的SOAP消息。
(2)为什么要创建SOAP消息体
我之前的两篇博客,《WebService—快速实现一个基于JAX-WS的WebService项目(一)》和《WebService—快速实现一个基于JAX-WS的WebService项目(二)》,客户端调用服务器的过程中,并没有凸显出SOAP体,而是通过引用源文件,直接调用的方式。
现在,我们采用另一种方式,创建SOAP消息,然后传递SOAP消息,最后处理SOAP消息,完成客户端对服务端的调用。(调用WebService,即向服务端传过去soap结构体,处理之后返回客户端一个soap结构体)
(3)SOAP消息的创建、传递和处理,见下一篇博客。