javaHolder与文档样式,或者为什么使用Holder



我最近开始使用document-style web-services。我了解到,通过这种方式,我们只能有一个part("参数")用于输入/输出消息,它可以包含所有数据
但现在我已经读到了Holders,根据这个链接,它用于返回多个参数。现在我想知道,如果我可以使用可以包含所有内容的文档样式响应,为什么我要使用Holders
我在这里找到的其他信息仍然让我感到不确定。

我最近开始使用文档风格的web服务。我学到了通过这种方式,我们只能为输入/输出消息,可以包含所有数据。

您必须区分document/literal bare (or unwrapped)document/literal wrapped。对于后一种说法,你的说法是正确的,而对于前一种说法则是错误的。关于特定类型编码的IBM指南,您将看到document/literal bare可以指定多个part元素:

<types>
<schema>
<element name="xElement" type="xsd:int"/>
<element name="yElement" type="xsd:float"/>
</schema>
</types>
<message name="myMethodRequest">
<part name="x" element="xElement"/>
<part name="y" element="yElement"/>
</message>
<message name="empty"/>
<portType name="PT">
<operation name="myMethod">
<input message="myMethodRequest"/>
<output message="empty"/>
</operation>
</portType>

从而产生SOAP消息:

<soap:envelope>
<soap:body>
<xElement>5</xElement>
<yElement>5.0</yElement>
</soap:body>
</soap:envelope>

然而,一个主要的缺点是,除了不符合WS-I之外,还会丢失有关所调用方法的信息。因此,使用document/literal wrapped(这是推荐的绑定样式)来绕过bare绑定样式的限制。

进一步注意,document/literal wrapped本身并不是实际WSDL规范的一部分:

在文档/文字风格的消息传递中,存在一种模式被称为包装文档/文字。这只是一种模式不是WSDL规范的一部分。JSR中提到了这种模式224(JAX-WS:Java API,用于基于XML的web服务)。(来源)


@编辑:由于您的来源问题以及您对为什么可能使用Handler的评论:

WSDL指定了INOUTINOUT参数。虽然前两个参数很容易理解,但后者有点棘手,因为发送给服务的参数应该返回修改后的状态。

然而,Java是按值传递的,而不是按引用传递的,为了启用同一参数的更新,类似于按引用传递工作的方式,Handlers可以用于"伪造"OUTINOUT参数的符合WSDL的处理。

对于一个简单的代码示例和可能更好的解释,请查看一个非常相似的问题及其答案

相关内容

最新更新