WEB开发网
开发学院软件开发Java JAX-RPC 与 JAX-WS 的比较,第 4 部分:动态调用接... 阅读

JAX-RPC 与 JAX-WS 的比较,第 4 部分:动态调用接口

 2009-11-03 00:00:00 来源:WEB开发网   
核心提示: 接下来让我们看看此 JAX-WS 动态客户机中的这些抽象步骤的细节:定义服务,与 JAX-RPC 模型中类似,JAX-RPC 与 JAX-WS 的比较,第 4 部分:动态调用接口(4),将基于完全限定名称定义服务,但还要定义该服务的端口,是 Web 服务编程模型发展的下一步目标,JAX-WS 还

接下来让我们看看此 JAX-WS 动态客户机中的这些抽象步骤的细节:

定义服务。与 JAX-RPC 模型中类似,将基于完全限定名称定义服务,但还要定义该服务的端口。

从此服务创建动态调用对象。在 JAX-WS 中,动态调用对象为 javax.xml.ws.Dispatch。这个类利用了 Java 5 中的新泛型功能支持多参数类型。

构建消息。在此处构建原始 SOAP 消息主题内容。

调用操作。您将 SOAP 主题的内容发送到服务,并从服务接收 SOAP 响应。

模型间的差异

从抽象步骤来看,JAX-RPC 和 JAX-WS 的动态调用模型非常相似。但事实并非如此。看看每个示例的细节,就会发现这些模型实际上有很大的区别。接下来让我们更为深入地分析一下其中的一些差异。

操作样式

相当清楚的是,两个模型之间的主要差异在于,JAX-RPC 采用远程过程调用(Remote Procedure Call,RPC)模型(即规范名称中的 RPC),而 JAX-WS 的动态客户机采用消息传递模型。对于 JAX-RPC,必须配置 Call 对象来显式地从 WSDL 调用特定操作。在 JAX-WS 中,Dispatch 对象不知道所调用的是哪个操作,仅仅负责发送 XML 数据而已。

参数样式

对于 JAX-RPC,所传递的参数类型保留规范定义的 XML 模式到 Java 的映射。对于 JAX-WS,可以采用两种不同的方式使用 Dispatch 对象:作为基于 XML 的 Dispatch(如本文中所示)或作为基于 JAXB 的 Dispatch。基于 XML 的 Dispatch 接受基于以下对象类型的参数:javax.xml.transform.Source、javax.xml.soap.SOAPMessage 和 javax.activation.DataSource。基于 JAXB 的 Dispatch 要求用户配置可用于封送和取消封送参数实例(JAXB Java Bean)的 javax.xml.bind.JAXBContext。

参数样式之间的另一个主要差异在于所传递的内容。对于 JAX-RPC,参数始终作为请求的参数数据使用。而对于 JAX-WS,有两种不同的参数模式:有效负载 (PAYLOAD) 和消息 (MESSAGE) 模式。PAYLOAD 模式表示参数仅仅代表 SOAP 主体的内容,而 MESSAGE 模式表示参数代表整个消息,包括 SOAP 信封。

调用模式

如上所述,JAX-RPC 和 JAX-WS 都通过 invoke() 方法提供了同步双向调用。这两个模型都提供了用于通过 invokeOneWay 方法调用单向 Web 服务操作的方法。两个模型之间的主要差异在于,JAX-WS 还提供异步调用模型。其中包含异步回调模型和异步轮询模型。JAX-RPC 并不提供异步调用选项。

服务器端动态编程模型

此处将不会详细讨论的另一个主要差异是,JAX-WS 添加了 JAX-RPC 永远不会有的内容——动态服务器端编程模型。与客户端模型类似,也可以将其配置为使用 PAYLOAD 或 MESSAGE 模式。

总结

JAX-RPC 和 JAX-WS 都提供了动态客户机模型。简单而言,可以将二者视为对等。但仔细分析其细节,可以发现 JAX-RPC 的动态模型是 RPC 模型,而 JAX-WS 的动态模型为消息传递模型。JAX-WS API 可提供更大的灵活性,是 Web 服务编程模型发展的下一步目标。JAX-WS 还提供了异步支持和动态服务支持,而 JAX-RPC 并未对此进行定义。

上一页  1 2 3 4 

Tags:JAX RPC JAX

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接