java - 从 WSDL 生成的客户端能否生成排除可选 header 元素的请求?

标签 java wsdl jax-ws wsimport

我正在使用 jax-ws 生成的代码创建一个客户端。使用的 WSDL 在绑定(bind)元素中指定了许多 header 元素,如下所示:

<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(以模拟未指定的值)或有效的 header 值作为 header5 的操作参数。要添加到请求中的值。这随后会创建一个 <header5>没有子元素的元素。然后我遇到的问题是,消费服务似乎对该 header 元素进行了某种验证,并确定它是格式错误的,因为它通常包含一些不同的子元素。

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

最佳答案

在进一步挖掘并与一些人交谈后,我设法回答了我自己的问题。使用 SOAP 消息处理程序,我能够传入要删除的 header 名称列表,如果存在,它们将从请求中删除。这个网站对我走上正轨非常重要:

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

关于java - 从 WSDL 生成的客户端能否生成排除可选 header 元素的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8250221/

相关文章:

web-services - 为什么REST不像SOAP那样不利用WSDL?

java - EntityManager.flush() 在 Java Web 服务中提交事务

java - Android Studio 意外的顶级异常 :

Java 字符串初始化(第 2 部分)

用于无名 JButton 的 Java actionListener?

c# - 使 Visual Studios "Add Service Reference"功能使用现有类

php - SOAP 错误 : Parsing WSDL: Unknown required WSDL extension 'http://schemas.xmlsoap.org/ws/2004/09/policy' in PHP SoapClient while calling SAP PI

java - Apache CXF 将类 "known"添加到 JAXB 上下文

java.lang.UnsupportedClassVersionError :/entirex/xml/mapping/jaxws_asm/package-info : Unsupported major. 次要版本 0.0

java - 你可以在 Java play 框架中使用多线程吗?