Java 使WSDL参数可选
我正在尝试使用Microsoft Exchange EWS协议,Microsoft为其提供了一个WSDL文件。我将使用Java 使WSDL参数可选,java,soap,wsdl,jax-ws,Java,Soap,Wsdl,Jax Ws,我正在尝试使用Microsoft Exchange EWS协议,Microsoft为其提供了一个WSDL文件。我将使用wsimport从该库生成一个JAX-WS客户端库 不幸的是,Microsoft的WSDL文件有错误。其中一个错误是(显然)所有SOAP请求参数都被定义为强制性的——除了它们不是,它们是可选的,在某些情况下,我必须能够不提供它们 摘自WSDL文件: <wsdl:operation name="GetUserAvailability"> <soap:ope
wsimport
从该库生成一个JAX-WS客户端库
不幸的是,Microsoft的WSDL文件有错误。其中一个错误是(显然)所有SOAP请求参数都被定义为强制性的——除了它们不是,它们是可选的,在某些情况下,我必须能够不提供它们
摘自WSDL文件:
<wsdl:operation name="GetUserAvailability">
<soap:operation soapAction="http://schemas.microsoft.com/exchange/services/2006/messages/GetUserAvailability" />
<wsdl:input>
<soap:header message="tns:GetUserAvailabilitySoapIn" part="Impersonation" use="literal"/>
<soap:header message="tns:GetUserAvailabilitySoapIn" part="TimeZoneContext" use="literal"/>
<soap:header message="tns:GetUserAvailabilitySoapIn" part="RequestVersion" use="literal"/>
<soap:body parts="GetUserAvailabilityRequest" use="literal" />
<soap:header message="tns:GetUserAvailabilitySoapIn" part="RequestVersion" use="literal"/>
</wsdl:input>
<wsdl:output>
...skipped...
</wsdl:output>
</wsdl:operation>
<wsdl:message name="GetUserAvailabilitySoapIn">
<wsdl:part name="GetUserAvailabilityRequest" element="tns:GetUserAvailabilityRequest" />
<wsdl:part name="Impersonation" element="t:ExchangeImpersonation"/>
<wsdl:part name="TimeZoneContext" element="t:TimeZoneContext" />
<wsdl:part name="RequestVersion" element="t:RequestServerVersion"/>
</wsdl:message>
<xs:element name="ExchangeImpersonation" type="t:ExchangeImpersonationType"/>
…跳过。。。
如果使用service.getUserAvailability(request,null,null,version)
调用此函数,则在标头中会出现
元素,Exchange服务器会抱怨有一个无关的元素
因此,我想编辑WSDL文件,使这些参数正确地成为可选的。我尝试根据文档将wsdl:required=false
和minOccurs=0
的各种组合添加到不同的位置,但是wsimport
似乎完全忽略了它们——结果代码没有改变
如何做到这一点?将nillable=“true”添加到您的架构中如何幸运的是,我不是Microsoft,这意味着我无法修改Exchange验证传入请求的架构。