JAX-RPC 与 JAX-WS 的比较,第 3 部分:服务端点接口
2009-11-03 00:00:00 来源:WEB开发网比较操作映射
现在您已经看到了这些接口,下面再对各种操作的映射进行比较。可以使用不同的方法来设计表示具有类似语义的 Web 服务的 WSDL 文档。文章 Which style of WSDL should I use? 提供了关于各种不同风格的 WSDL 文档的概述,以及如何确定哪一种风格更适合您。
现在,让我们来研究 JAX-RPC 和 JAX-WS 如何映射到每种 WSDL 风格。
研究 document/literal 包装模式
清单 1 中的 WSDL 使用了 document/literal 包装模式进行格式化。清单 4 和 5 是 JAX-RPC 和 JAX-WS 中对相同的包装操作的映射。请注意,JAX-WS 向方法中添加了 @RequestWrapper 和 @ResponseWrapper 注释。这些注释为用作操作包装器的元素和为这些包装器元素生成的任何 Java Bean 提供了附加的元数据。这些注释都是可选的。
清单 4. JAX-RPC 完整的 HelloWorld SEIpackage com.ibm.samples;
public interface HelloWorld extends java.rmi.Remote {
public java.lang.String hello(java.lang.String name) throws java.rmi.RemoteException;
}
清单 5. JAX-WS 完整的 HelloWorld SEIpackage com.ibm.samples.helloworld;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@WebService(name = "HelloWorld", targetNamespace = "urn:samples.ibm.com/HelloWorld")
public interface HelloWorld {
@WebMethod(action = "urn:samples.ibm.com/HelloWorld/hello")
@WebResult(name = "response", targetNamespace = "")
@RequestWrapper(localName = "hello",
targetNamespace = "urn:samples.ibm.com/HelloWorld",
className = "com.ibm.samples.helloworld.Hello")
@ResponseWrapper(localName = "helloResponse",
targetNamespace = "urn:samples.ibm.com/HelloWorld",
className = "com.ibm.samples.helloworld.HelloResponse")
public String hello(
@WebParam(name = "name", targetNamespace = "")
String name);
}
更多精彩
赞助商链接