【问题标题】:Can client generated from WSDLs produce requests that exclude optional header elements?从 WSDL 生成的客户端能否生成排除可选标头元素的请求?
【发布时间】:2011-11-23 22:57:04
【问题描述】:

我正在使用 jax-ws 生成的代码创建客户端。使用的 WSDL 在绑定元素中指定了许多类似这样的标题元素:

<wsdl:operation name="operation">
    <wsoap12:operation soapActionRequired="false" style="document"/>
    <wsdl:input>
        <wsoap12:header message="tns:InMsg" part="header1" use="literal"/>
        <wsoap12:header message="tns:InMsg" part="header2" use="literal"/>
        <wsoap12:header message="tns:InMsg" part="header3" use="literal"/>
        <wsoap12:header message="tns:InMsg" part="header4" use="literal"/>     
        <wsoap12:header message="tns:InMsg" part="header5" use="literal"/>
        <wsoap12:body parts="request" use="literal"/>
    </wsdl:input>
    <wsdl:output>
        <wsoap12:header message="tns:OutMsg" part="header1" use="literal"/>
            <wsoap12:header message="tns:OutMsg" part="header2" use="literal"/>
            <wsoap12:body parts="response" use="literal"/>
    </wsdl:output>
    <wsdl:fault name="standardError">
        <wsoap12:fault name="standardError" use="literal"/>
    </wsdl:fault>
</wsdl:operation>

为了争论,我的问题集中在header5。根据我正在使用的规范,这是一个可选值。因此,我使用 JAX-WS 生成我的客户端,并且必须传递 null(以模拟未指定的值)或有效的标头值作为要添加到请求中的 header5 值的操作参数。这将随后创建一个没有子元素的&lt;header5&gt; 元素。然后我遇到的问题是消费服务似乎对该标头元素进行了某种验证,并确定它格式错误,因为它通常包含几个不同的子元素。

因此,有没有办法使用 JAX-WS,通过从 SOAP 请求中完全排除标头元素来从本质上满足这个可选的标头要求?对于这是否会违反 WSDL 定义的契约并导致服务返回错误,我的同事之间似乎存在一些争论。有一种说法是,.Net 客户端允许您从请求中排除标头,只需将其指定为 null。

【问题讨论】:

    标签: java wsdl jax-ws wsimport


    【解决方案1】:

    在深入挖掘并与几个人交谈后,我设法回答了我自己的问题。使用 SOAP 消息处理程序,我可以传入要删除的标头名称列表,如果存在,它们会从请求中删除。这个网站在让我走上正轨方面非常宝贵:

    http://technology.amis.nl/blog/12004/how-to-remove-unwanted-soap-header-elements-in-jax-ws

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2015-09-09
      • 2012-12-12
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多