我正在使用jax-ws生成的代码创建客户端。用于指定多个头元件,像这样的WSDL中,所述结合元件内:客户端是否可以通过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
值的操作参数。这将随后创建一个没有子元素的<header5>
元素。然后我遇到的问题是,消费服务似乎对该头元素进行某种验证,并确定它是畸形的,因为它通常包含几个不同的子元素。
因此,使用JAX-WS,是否有办法通过从SOAP请求中排除标题元素altogther来满足此可选标题要求?似乎我的同事之间有一些争论,这是否会违反WSDL定义的合同并导致服务返回错误。有一种说法是,.Net客户端允许您从请求中排除标题,只需将其指定为空即可。