如何使wsdl符合肥皂输入

问题描述 投票:0回答:1

我们正在将我们的肥皂网络服务从码头更改为jaxws。目的是保持相同的输入消息。我使用原始的WSDL通过netbeans创建服务。 WSDL是以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://www.mycompany.nl/DcxExpeditieService/v1"
        xmlns:tns="http://www.mycompany.nl/DcxExpeditieService/v1"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <xs:schema targetNamespace="http://www.mycompany.nl/DcxExpeditieService/v1"
                xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
            <xs:element name="DcxExpeditie" type="tns:DcxExpeditie"/>
            <xs:complexType name="DcxExpeditie">
                <xs:sequence>
                    <xs:element name="Expeditie" type="tns:Expeditie"/>
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Expeditie">
                <xs:sequence>
                    <xs:element name="tag1" type="xs:string"/>
                    <xs:element name="tag2" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="DcxExpeditieRequest">
        <wsdl:part name="DcxExpeditie" type="tns:DcxExpeditie"/>
    </wsdl:message>
    <wsdl:message name="DcxExpeditieResponse">
        <wsdl:part name="DcxExpeditieResponse" type="xs:string"/>
    </wsdl:message>
    <wsdl:portType name="DcxExpeditieServicePortType">
        <wsdl:operation name="DcxExpeditieOperation">
            <wsdl:input message="tns:DcxExpeditieRequest"/>
            <wsdl:output message="tns:DcxExpeditieResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="DcxExpeditieServiceSOAP" type="tns:DcxExpeditieServicePortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="DcxExpeditieOperation">
            <soap:operation soapAction="http://www.mycompany.nl/DcxExpeditieService/v1/DcxExpeditie"/>
            <wsdl:input>
                <soap:body use="literal" namespace="http://www.mycompany.nl/DcxExpeditieService/v1"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" namespace="http://www.mycompany.nl/DcxExpeditieService/v1"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="DcxExpeditieService">
        <wsdl:port name="DcxExpeditieServiceSOAP" binding="tns:DcxExpeditieServiceSOAP">
            <soap:address location="https://someserver.mycompany.nl/vbs/dcxexpeditie"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

在soapui中使用此WSDL时,将产生以下输入示例:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.mycompany.nl/DcxExpeditieService/v1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:DcxExpeditieOperation>
         <DcxExpeditie>
            <v1:Expeditie>
               <v1:tag1>?</v1:tag1>
               <v1:tag2>?</v1:tag2>
            </v1:Expeditie>
         </DcxExpeditie>
      </v1:DcxExpeditieOperation>
   </soapenv:Body>
</soapenv:Envelope>

但是,原始输入格式为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.mycompany.nl/DcxExpeditieService/v1">
       <soapenv:Header/>
       <soapenv:Body>
          <v1:DcxExpeditie>
                <v1:Expeditie>
                   <v1:tag1>?</v1:tag1>
                   <v1:tag2>?</v1:tag2>
                </v1:Expeditie>
          </v1:DcxExpeditie>
       </soapenv:Body>
    </soapenv:Envelope>

因此没有DcxExpeditieOperation标记,并且v1命名空间在DcxExpeditie前面

这是否可能,如果可以,我该如何完成?

soap wsdl jax-ws
1个回答
0
投票

尝试将SOAP绑定从rpc更改为文档以删除DcxExpeditieOperation标记:

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

要解决名称空间问题,请参阅类型为DcxExpeditie的元素:

<wsdl:part name="DcxExpeditie" element="tns:DcxExpeditie"/>
© www.soinside.com 2019 - 2024. All rights reserved.