使WSDL参数可选

时间:2017-04-19 11:26:07

标签: java soap wsdl jax-ws

我尝试使用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)来调用它,那么我在标题中会得到一个<ExchangeImpersonation xsl:nil="true"/>元素,并且Exchange服务器会抱怨有一个无关元素。

因此,我想编辑WSDL文件以使这些参数正确可选。我已经尝试根据文档向各个地方添加wsdl:required=falseminOccurs=0的各种组合,但wsimport似乎完全忽略了它们 - 结果代码保持不变。

我该怎么做?

0 个答案:

没有答案