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

标签 java web-services jakarta-ee jax-ws cxf

我最近开始使用文档风格的网络服务。 我了解到,通过这种方式我们可以只有一个 part("parameter") 用于输入/输出消息,它可以包含所有数据。
但现在我已经阅读了关于 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.

您必须区分 document/literal bare(或未包装)document/literal wrapped。对于后一种说法,您的说法是正确的,而对于初级说法,它是错误的。关于an IBM guide for the specific type encodings你会看到 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(这是推荐的绑定(bind)样式)来绕过bare 绑定(bind)样式的限制。

进一步注意 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). (Source)


@Edit:由于你的起源问题和你关于为什么你可能使用 Handlers 的评论:

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

但是,Java 是按值传递而不是按引用传递,并且允许更新相同的参数,类似于按引用传递的方式,Handler 可用于“伪造”符合 OUTINOUT 参数的 WSDL 处理。

有关简单的代码示例和可能更好的解释,请 have a look at a very similar question and its answer

关于java Holder vs document-style,或者为什么要使用Holders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729694/

相关文章:

java - 如何从另一个@Stateless bean 调用一个@Stateless bean 的方法

java - 空 SOAP 响应

java - 自定义 UserdetailsS​​ervice 中的 @EJB 注入(inject)(实现 Spring Security UserDetailsS​​ervice)

java - JPA应用程序的META-INF文件夹放在哪里

java - 如何使用 EWS JAVA API 获取访问另一个邮箱日历的权限

java - 如何防止每次在Docker Maven插件中运行Docker镜像?

Java关系代数联盟

jquery - JQuery 和 SharePoint Web 服务的身份验证问题

java - 如何在 Vaadin 中制作加载开始栏

java - 循环不会多次迭代 if 语句