开发者

How to built SOAP Header namespaces based on the WSDL file

I've been experiencing some issues with the header presentation of a SOAP Request. I think I'm missing something.

My (partial) wsdl looks like this:

<wsdl:definitions   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
                    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
                    xmlns:aws="http://xml.xxx.com"
                    xmlns:security_authenticate_6_1="http://xml.xxx.com/VLSSLQ_06_1_1A" 
                    xmlns:security_authenticatereply_6_1="http://xml.xxx.c开发者_StackOverflowom/VLSSLR_06_1_1A"
                    targetNamespace="http://xml.xxx.com">  
  <wsdl:types>
    <xsd:schema targetNamespace="http://xml.xxx.com">
      <xsd:import namespace="http://xml.xxx.com/ws/2009/01/WBS_Session-2.0.xsd" schemaLocation="WBS_Session-2.0.xsd"/>      
      <xsd:import namespace="http://xml.xxx.com/VLSSLQ_06_1_1A" schemaLocation="Security_Authenticate_06_1_1A.xsd"/>
      <xsd:import namespace="http://xml.xxx.com/VLSSLR_06_1_1A" schemaLocation="Security_AuthenticateReply_06_1_1A.xsd"/>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="Session" xmlns:ns0="http://xml.xxx.com/ws/2009/01/WBS_Session-2.0.xsd">
    <wsdl:part name="Session" element="ns0:Session"/>
  </wsdl:message>  
  <wsdl:message name="Security_Authenticate_6_1">
    <wsdl:part name="Security_Authenticate_6_1" element="security_authenticate_6_1:Security_Authenticate"/>
  </wsdl:message>
  <wsdl:message name="Security_AuthenticateReply_6_1">
    <wsdl:part name="Security_AuthenticateReply_6_1" element="security_authenticatereply_6_1:Security_AuthenticateReply"/>
  </wsdl:message>
  <wsdl:portType name="XXXWebServicesPT">    
    <wsdl:operation name="Security_Authenticate">
      <wsdl:input message="aws:Security_Authenticate_6_1"/>
      <wsdl:output message="aws:Security_AuthenticateReply_6_1"/>
    </wsdl:operation>    
  </wsdl:portType>
  <wsdl:binding name="XXXWebServicesBinding" type="aws:XXXWebServicesPT">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>    
    <wsdl:operation name="Security_Authenticate">
      <soap:operation soapAction="http://webservices.xxx.com/1ASIWJTUTUA/VLSSLQ_06_1_1A"/>
      <wsdl:input>
        <soap:header message="aws:Session" part="Session" use="literal"/>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:header message="aws:Session" part="Session" use="literal"/>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="XXXWebServices">
    <wsdl:port name="XXXWebServicesPort" binding="aws:XXXWebServicesBinding">
      <soap:address location="https://test.webservices.xxx.com"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

I want to access the Security_Authenticate action, in which case, the header must look something like:

<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
    <soapenv:Header>
      <wbs:Session xmlns:wbs='http://xml.xxx.com/ws/2009/01/WBS_Session-2.0.xsd'>
        <wbs:SessionId></wbs:SessionId>
        <wbs:SequenceNumber></wbs:SequenceNumber>
        <wbs:SecurityToken></wbs:SecurityToken>
      </wbs:Session>
    </soapenv:Header>
    <soapenv:Body>
      <vls:Security_Authenticate>
        <vls:tagX>
          <vls:tagY>yyy</vls:tagY>
          <vls:tagZ>Z</vls:tagZ>
        </vls:tagX>
      </vls:Security_Authenticate>
    </soapenv:Body>
</soapenv:Envelope>

How should I built my soapenvelope and my header namespaces?

Thanks.


You have to declare the namespace before you use the object in the xsd, so in your case, to use the Session object:

<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
  <soapenv:Header>
    <wbs:Session xmlns:wbs='http://xml.xxx.com/ws/2009/01/WBS_Session-2.0.xsd'>
      <wbs:SessionId></wbs:SessionId>
      <wbs:SequenceNumber></wbs:SequenceNumber>
      <wbs:SecurityToken></wbs:SecurityToken>
    </wbs:Session>
  </soapenv:Header>
  ...
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜