Java spring WS需要将请求属性包装为;“请求”;在旧WS合同中

Java spring WS需要将请求属性包装为;“请求”;在旧WS合同中,java,spring,web-services,soap,wsdl,Java,Spring,Web Services,Soap,Wsdl,我需要从一个WSDL文件中使用一个soup web服务。我想使用springws和maven-jaxb2-plugin来解决这个问题。WS-server可以使用一个旧的SOAP契约。我在WSDL文件中找到类似于的内容。WSDL文件: <?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://sche

我需要从一个WSDL文件中使用一个soup web服务。我想使用
springws
maven-jaxb2-plugin
来解决这个问题。WS-server可以使用一个旧的SOAP契约。我在WSDL文件中找到类似于
的内容。WSDL文件:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"     xmlns:tns="http://impl.sub.xxx.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"     name="hahaPaymentWSImpl" targetNamespace="http://impl.sub.xxx.com/">
  <wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://impl.sub.xxx.com/" targetNamespace="http://impl.sub.xxx.com/" version="1.0">

  <xs:complexType name="singlePaymentRequest">
    <xs:sequence>
      <xs:element minOccurs="0" name="accountName" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="singlePaymentResponse">
    <xs:sequence>
      <xs:element minOccurs="0" name="amount" type="xs:double"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

  </wsdl:types>

  <wsdl:message name="singlePayment">
    <wsdl:part name="request" type="tns:singlePaymentRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="singlePaymentResponse">
    <wsdl:part name="return" type="tns:singlePaymentResponse">
    </wsdl:part>
  </wsdl:message>

  <wsdl:portType name="hahaPaymentWS">
    <wsdl:operation name="singlePayment">
      <wsdl:input message="tns:singlePayment" name="singlePayment">
    </wsdl:input>
      <wsdl:output message="tns:singlePaymentResponse" name="singlePaymentResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="hahaPaymentWSImplSoapBinding" type="tns:hahaPaymentWS">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="singlePayment">
      <soap:operation soapAction="" style="rpc"/>
      <wsdl:input name="singlePayment">
        <soap:body namespace="http://impl.sub.xxx.com/" use="literal"/>
      </wsdl:input>
      <wsdl:output name="singlePaymentResponse">
        <soap:body namespace="http://impl.sub.xxx.com/" use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="hahaPaymentWSImpl">
    <wsdl:port binding="tns:hahaPaymentWSImplSoapBinding" name="hahaPaymentWSPort">
      <soap:address location="http://999.00.837.212:8888/services/hahaPaymentWS"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
我发现
soupUI
可以工作,因为
soupUI
标记包装请求属性:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns3:singlePayment xmlns:ns3="http://impl.sub.xxx.com/">
<request>
         <accountName>xxx</accountName>
</request>
      </ns3:singlePayment>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

xxx

我想知道这是服务器合同的一个问题吗?如何轻松解决此问题?

wsimport
JDK中的工具保存我。
步骤1,生成java文件:

wsimport -keep -verbose http://xxxx/xxx.wsdl
步骤2,将文件复制到项目并调用:

ObjectFactory objectFactory  = new ObjectFactory();
SinglePaymentRequest request = objectFactory.createSinglePaymentRequest();
request.setAccountFlag("0");
hahaPaymentWS hahaPaymentWS = new hahaPaymentWSImpl().gethahaPaymentWSPort();
SinglePaymentResponse response = hahaPaymentWS.singlePayment(request);
System.out.println(JSON.toJSONString(response));
我认为
springws
maven-jaxb2-plugin
与旧的SOAP契约存在兼容性问题

ObjectFactory objectFactory  = new ObjectFactory();
SinglePaymentRequest request = objectFactory.createSinglePaymentRequest();
request.setAccountFlag("0");
hahaPaymentWS hahaPaymentWS = new hahaPaymentWSImpl().gethahaPaymentWSPort();
SinglePaymentResponse response = hahaPaymentWS.singlePayment(request);
System.out.println(JSON.toJSONString(response));