奇怪的Web服务响应格式

时间:2018-08-23 17:26:26

标签: xml web-services wsdl

我正在使用一个我无法完全共享的WSDL的Web服务,因此我将对其进行编辑以显示结构:

<?xml version="1.0" encoding="UTF-8" ?> 
<definitions name="ManagerService" targetNamespace="..." xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="..." xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="..." xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <types>
  <xs:schema targetNamespace="..." version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   ...
  </xs:schema>
  <xs:schema targetNamespace="..." version="1.0" xmlns:tns="..." xmlns:xs="http://www.w3.org/2001/XMLSchema">
    ...
  </xs:schema>
 </types>
 <message name="Manager_someOperation">
  <part name="..." type="ns1:..."/>
  <part name="..." type="tns:..."/>
 </message>
 <message name="Manager_someOperationResponse">
  <part name="someOperationReturn" type="tns:someOperationSatus"/>
 </message>
 <portType name="Manager">
  <operation name="someOperation" parameterOrder="... ...">
   <input message="tns:Manager_someOperation"/>
   <output message="tns:Manager_someOperationResponse"/>
  </operation>
 </portType>
 <binding name="ManagerBinding" type="tns:Manager">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="someOperation">
   <soap:operation soapAction=""/>
   <input>
    <soap:body namespace="..." use="literal"/>
   </input>
   <output>
    <soap:body namespace="..." use="literal"/>
   </output>
  </operation>
 </binding>
 <service name="ManagerService">
  <port binding="tns:ManagerBinding" name="Manager">
   <soap:address location="..."/>
  </port>
 </service>
</definitions>

我的问题与输入和输出信封有关。好吧,主要是输出包络。我需要手动构建输入信封,并且还需要知道在不运行服务的情况下输出信封的外观。

作为RPC样式的Web服务,我知道输入信封将类似于:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mes="...">
    <soapenv:Header/>
    <soapenv:Body>
        <mes:someOperation>
            ...
        </mes:someOperation>
    </soapenv:Body>
</soapenv:Envelope>

我希望输出信封看起来像:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:Manager_someOperationResponse xmlns:ns2="...">
            <someOperationReturn>
                ...
            </someOperationReturn>
        </ns2:Manager_someOperationResponse>
    </S:Body>
</S:Envelope>

但是奇怪的是,它看起来实际上是这样的:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:someOperationResponse xmlns:ns2="...">
            <someOperationReturn>
                ...
            </someOperationReturn>
        </ns2:someOperationResponse>
    </S:Body>
</S:Envelope>

请注意,它返回的是“ someOperationResponse ”,而不是“ Manager_someOperationResponse ”。

所以我的问题是:有人知道为什么会发生这种情况吗?我似乎在Web服务定义中找不到导致此行为的任何内容,也找不到在此特定Web服务中的任何设置可以指出正确的方向。

0 个答案:

没有答案