Java 开发人员可以通过 JAX-RPC(基于 XML 的 RPC 的 Java API)和 SAAJ(用于 Java 的带附件 SOAP API)使用附件。不要让缩写词 SAAJ 欺骗了您:JAX-RPC 支持附件。JAX-RPC 和 SAAJ 的区别在于抽象的层次而不是功能。 JAX-RPC 是一种高层次的 API,比 SAAJ 更抽象。它在 RMI 层背后隐藏了大部分面向 SOAP 协议的问题。开发人员处理的是 Java 对象,预处理程序将其转成 SOAP 节点。JAX-RPC 使用java.awt.Image 和 javax.activation.DataHandler 类表示附件。 SAAJ 更接近于协议。使用 SAAJ 创建 SOAP 消息和 JAX-RPC 相比要做更多的工作(而且没有提供到 WSDL 的自动链接),因此多数情况您可能更愿意使用 JAX-RPC。但是为了说明附件到底是如何工作的,由于它的底层特性 SAAJ 更加合适。清单 2 是一个带有附件的 SOAP 请求。该请求要求服务器改变一个图片的大小,因为图片很大,使用附件更有效。 清单 2. 附件参数 以下是引用片段: POST /ws/resize HTTP/1.0 Content-Type: multipart/related; type="text/xml"; start=""; boundary="----=_Part_0_7145370.1075485514903" Accept: application/soap+xml, multipart/related, text/* Host: localhost:8080 SOAPAction: "" Content-Length: 1506005 ------=_Part_0_7145370.1075485514903 Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: binary Content-Id: xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ps="http://psol.com/2004/ws/resize" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 20 ------=_Part_0_7145370.1075485514903 Content-Type: image/jpeg Content-Transfer-Encoding: binary Content-Id: note: binary data deleted... ------=_Part_0_7145370.1075485514903-- | 清单 3 示范了该 SOAP 请求的创建。该请求要求服务器改变图像的大小。过程如下: 1:通过工厂创建 SOAP 连接和 SOAP 消息对象。 2:从消息对象中检索消息体(中间步骤:检索 SOAP 部分和信封)。 3:创建一个新的 XML 元素表示请求并设置编码方式。 4:创建附件并使用 DataHandler 对象初始化。 5:创建另外的元素表示两个参数(source 和 percent)。 6:通过添加 href 属性把附件与第一个元素关联。附件通过 cid(content-id)URL 引用。 7:直接把第二个参数的值设成文本并调用服务。 服务使用改变了大小的图像(同样作为附件)作为应答。检索返回的图像之前可以测试 SOAP 错误码(表示一个错误)。如果没有错误,则作为文件检索附件并处理。  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |