JAX-RPC 与 JAX-WS 的比较,第 3 部分:服务端点接口
2009-11-03 00:00:00 来源:WEB开发网研究 RPC/encoded 模式
对于 RPC/encoded 风格的操作,无法进行比较。JAX-WS 不支持包含编码的 数据表示的 WSDL 文档的任何映射。这是因为 JAX-WS 与 WS-I 的 Basic Profile 1.1 的兼容性原因,其中不允许使用编码的 WSDL 文档。有时候的确需要构建 RPC/encoded Web 服务,在这种情况下您应该坚持使用 JAX-RPC 映射,但是如果您希望编写可互操作的 Web 服务,那么您就不应该使用 RPC/encoded 模式。
考虑其他的一些区别
JAX-WS 与 JAX-RPC 在操作映射方面的主要区别是前者引入了异步操作。任何具有双向消息流的 WSDL 操作,或者其中的客户端期待着接收响应的操作,都可以映射为异步的 Java 表示形式。有两种不同的机制,带回调的异步方式和异步轮询,它们需要两种不同的映射。后续的文章将描述这两种类型的操作是如何工作的。本文只是向您介绍一个示例。清单 12 包含一个异步回调操作,其中 javax.xml.ws.AsyncHandler 对象为回调对象。清单 13 包含了一个异步轮询操作映射。
清单 12. JAX-WS 异步回调@WebMethod(action = "urn:samples.ibm.com/HelloWorld/hello")
@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 Future<?> helloAsync(
@WebParam(name = "name", targetNamespace = "")
String name,
@WebParam(name = "asyncHandler", targetNamespace = "")
AsyncHandler<String> asyncHandler);
清单 13. JAX-WS 异步轮询@WebMethod(action = "urn:samples.ibm.com/HelloWorld/hello")
@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 Response<String> helloAsync(
@WebParam(name = "name", targetNamespace = "")
String name);
更多精彩
赞助商链接