注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

Operation Style (Document/RPC) and Message format(literal/encoded)  

2007-09-25 16:15:18|  分类: WebService |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自JavaWorld

在WSDL 1.1中, 允許兩種定義 message part 格式的方式:

1. encoded: 利用'encodingStyle'(通常是Namespace URI來表示)來作為xml message part與後端相對應物件之間 mapping 的 typing system.目前泛用的標準是 SOAP1.1 的http://schemas.xmlsoap.org/soap/encoding/

2. literal: 利用 XML Schema 來定義 message part 的結構及 typing.

WSDL 1.1 中定義了兩種 WebSerivce Operation 的型式: RPC 及 Document.

1. RPC (Remote Proceduce Call): 功能與 Java 中的RMI 相似, 在 SOAP Request Message 的SOAP Body 中, 第一個 sub-element 必須與 operation 同名 (Response的SOAP Body 中, 第一個 sub-element 則命名為 operation-name + "Response" ),這個Operation element內包 parameter/return-value 對應的 xml element:
 <SOAP:Body>
  <rpc-operation>
   <message-part-1><!-- mapped to a parameter-- >
   <message-part-2><!-- mapped to a parameter-- >
  </rpc-operation>
 </SOAP:Body>

2. Document: 最主要的目的個人認為是在 messaging oriented document exchange.由於是 document-oriented Service 或 messaging-oriented Service, "operation" 的感覺較弱所以WSDL1.1 spec 允許這種 operation 的 SOAP Body 可以直接帶 message part, 不用跟一個 operation element:
 <SOAP:Body>
  <message-part-1> ...
  <message-part-2> ...
 </SOAP:Body>

然而, 以目前來說, 不管是.NET 或 JAVA, 並沒有將這兩種 operation 的實作方式明顯的區分, 一搬來說, 不管是 RPC Operation 亦或是 Document Operation, 後端都是以一個 Method 來實作, 本質上都是 RPC.

Oracle 及 BEA 的 WebServices 產品也提供將一個 document style one-way operation 對應到一個 JMS destination.

由於WSI-Basi Profile 1.0 (BP) 要求 document style 的SOAP message只能有一個message part binding(所以像上面的例子是不被BP允許的), .NET 及 JAX-RPC1.1將所有的 parameter part 包到一個 operation wrapper element 如同 RPC 的格式一樣:
 <SOAP:Body>
  <document-operation-wrapper-message-part>
   <sub-element-1><!-- mapped to a parameter-- >
   <sub-element-1><!-- mapped to a parameter-- >
  </document-operation-wrapper-message-part>
 </SOAP:Body>

一般的 WebServices Platfrom 都會支援 rpc-encoded, rpc-literal, 以及document-literal 三種組合. 然而在 WSI-Basic Profile 1.0中, 明定要達到Interoperability 必須是 literal. 在 .NET 上, 以兩個 Attribute (metadata) 來決定Operation Style 及 message format:
 C#
[SoapRpcMethodAttribute( "http://foo.com/Rpc",
    RequestNamespace="http://foo.com",
    ResponseNamespace="http://foo.com")]
public Address Rpc(Address address, bool useZipPlus4) { …
 
[SoapDocumentMethod("http://foo.com/DocumentWrappedLiteral",
    RequestNamespace="http://foo.com",
    ResponseNamespace="http://foo.com",
    Use=SoapBindingUse.Literal,
    ParameterStyle=SoapParameterStyle.Wrapped)]
public string DocumentWrappedLiteral(Address1 address, bool useZipPlus4) {

在 JAX-RPC1.0 中, default 的是 encoded. JAX-RPC 1.1 之後加入 BP 的要求.支援以'wrapped' 的方式來實作 Document style operation. 在JAVA上, 目前一搬來說是用 WebService Tool (WSDL generation Tool) 來決定一個 method要以 rpc-encoded, rpc-literal, 還是 document-literal 的格式在 WSDL 上呈現.如果是使用 document-literal wrapped 的方式的話, 在jaxrpc mapping deployment descriptor (defined in JSR109 J2EE WebServices)上相對應的 method mapping 必須要有一個 <wrapped-element/> sub-element.

在未來的 JSR181 或 JSR224 中相信也會提供以 Attribute 的方式來指定
Operation Style 及 message format.

  评论这张
 
阅读(1189)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017