java Holder vs document-style,或者为什么使用Holders

我最近开始使用文档式的Web服务.
我已经了解到,通过这种方式,我们只能有一个部分(“参数”)用于输入/输出消息,它可以包含所有数据.
但现在我读到了Holders,根据this链接,它用于返回多个参数.
现在我想知道,如果我可以使用文件样式的响应,我可以使用Holders,它可以包含所有内容吗?
其他信息我发现here仍然让我不确定.

解决方法:

I’ve started to use document-style web-services recently. I’ve learned
that in this way we can have only one part(“parameter”) for
input/output message, which can contain all data.

你必须区分文件/文字裸(或解包)和文件/文字包裹.虽然对于后者你的说法是正确的,但对于引物而言却是错误的.相对于an IBM guide for the specific type encodings,您将看到document / literal bare可以指定多个零件元素:

<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(这是推荐的绑定样式)来绕过裸绑定样式的限制.

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

In document/literal style of messaging, there exists a pattern which
is known as wrapped-document/literal. This is just a pattern, and is
not a part of WSDL specification. This pattern has a mention in JSR
224 (JAX-WS: Java API for XML based web services).
(07001)

@Edit:由于您的原始问题以及您对使用处理程序的原因的评论:

WSDL指定IN,OUT和INOUT参数.虽然前两个参数很容易理解,但后者有点棘手,因为发送到服务的参数应该以修改后的状态返回.

但是,Java是按值传递而不是通过引用传递并启用相同参数的更新,类似于通过引用传递的方式,处理程序可用于“伪造”对OUT或INOUT参数的WSDL一致性处理.

对于一个简单的代码示例,可能更好的解释请have a look at a very similar question and its answer

上一篇:使用cxf和java第一种方法编写异步服务


下一篇:java – Apache CXF AtomPullServer