【问题标题】:java Holder vs document-style, or why use Holdersjava Holder vs document-style,或者为什么要使用 Holder
【发布时间】:2014-01-10 20:30:47
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我最近开始使用文档样式的网络服务。我学过 这样我们就可以只有一个部分(“参数”) 输入/输出消息,可以包含所有数据。

    您必须区分document/literal bare (or unwrapped)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(这是推荐的绑定样式)来绕过bare绑定样式的限制。

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

    在消息传递的文档/文字样式中,存在一种模式 被称为包装文档/文字。这只是一个模式,并且是 不是 WSDL 规范的一部分。这种模式在 JSR 中有提及 224(JAX-WS:用于基于 XML 的 Web 服务的 Java API)。 (Source)


    @Edit:由于您的来源问题和您对为什么可能使用Handlers 的评论:

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

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

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

    【讨论】:

    • 感谢关于使用bare\wrapped样式的解释,但我还是不明白为什么要使用holder,只用于bare style ws的多次返回?
    • @secario 更新了我的帖子以包含有关处理程序的更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2016-10-25
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多