Java 使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

我正在尝试使用Microsoft Exchange EWS协议,Microsoft为其提供了一个WSDL文件。我将使用
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验证传入请求的架构。