有人可以解释一下文档样式和文档样式之间的区别吗?
RPC 风格的网络服务?
有两种通信样式模型用于将 WSDL 绑定转换为 SOAP 消息体。他们是:
文档和 RPC
使用 Document 样式模型的优点是,只要 SOAP 消息体的内容是任意 XML 实例,您就可以按照自己的方式构建 SOAP 体。文档样式也称为面向消息的样式。
但是,对于 RPC 样式模型,SOAP 请求主体的结构必须同时包含操作名称和方法参数集。 RPC 样式模型假定消息正文中包含的 XML 实例 具有特定的结构。
此外,有两种编码使用模型可用于将 WSDL 绑定转换为 SOAP 消息。它们是:文字和编码
使用文字使用模型时,正文内容应符合用户定义的XML-schema(XSD)结构。优点是双重的。一方面,您可以使用用户定义的 XML 模式来验证消息正文,此外,您还可以使用 XSLT 等转换语言来转换消息。
对于(SOAP)编码使用模型,消息必须使用 XSD 数据类型,但消息的结构不需要符合任何用户定义的 XML 模式。这使得验证消息正文或对消息正文使用基于 XSLT 的转换变得困难。
不同样式和使用模型的组合为我们提供了四种不同的方式来将 WSDL 绑定转换为 SOAP 消息。
Document/literal
Document/encoded
RPC/literal
RPC/encoded
我建议您阅读 Russell Butek 的这篇题为 Which style of WSDL should I use? 的文章,该文章很好地讨论了不同风格和使用模型将 WSDL 绑定转换为 SOAP 消息,以及它们的相对优势和劣势。
一旦收到人工制品,在这两种沟通方式中,我
调用端口上的方法。现在,这在 RPC 风格上没有什么不同
和文档样式。那么有什么区别,那在哪里
区别可见吗?
你能发现区别的地方就是“RESPONSE”!
RPC 风格:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
第二个操作的 SOAP 消息将有空输出,如下所示:
RPC 样式响应:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
文档样式:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
如果我们为上面的 SEI 运行客户端,输出是:
123
[123, 456]
此输出显示 ArrayList 元素正在 Web 服务和客户端之间进行交换。此更改仅通过更改 SOAPBinding 注释的样式属性来完成。数据类型更丰富的第二种方法的 SOAP 消息如下所示,以供参考:
文档样式响应:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
结论
- 正如您在两个 SOAP 响应消息中注意到的那样,可以在 DOCUMENT 样式但在 RPC 样式 Web 服务的情况下验证 SOAP 响应消息。
- 基本的使用 RPC 样式的缺点是它没有
支持更丰富的数据类型,而使用 Document 样式的就是它
以 XSD 的形式带来了一些复杂性,用于定义更丰富的
数据类型。
- 选择使用其中之一取决于
操作/方法要求和预期客户。
同样,SOAP over HTTP 与 XML over HTTP 有何不同?后
所有 SOAP 也是具有 SOAP 命名空间的 XML 文档。那么什么是
这里有什么不同?
为什么我们需要像 SOAP 这样的标准?通过通过 HTTP 交换 XML 文档,两个程序可以交换丰富的结构化信息,而无需引入额外的标准(例如 SOAP)来明确描述消息信封格式和编码结构化内容的方法。
SOAP 提供了一个标准,因此开发人员不必为他们想要提供的每项服务发明一种自定义 XML 消息格式。给定要调用的服务方法的签名,SOAP 规范规定了明确的 XML 消息格式。任何熟悉 SOAP 规范、使用任何编程语言的开发人员都可以为特定服务制定正确的 SOAP XML 请求,并通过获取以下服务详细信息了解来自服务的响应。
- 服务名称
- 服务实现的方法名称
- 每个方法的方法签名
- 服务实现的地址(以 URI 表示)
使用 SOAP 简化了将现有软件组件公开为 Web 服务的过程,因为服务的方法签名标识了用于请求和响应的 XML 文档结构。