Spring 使用 SOAP header 和 body 的 WS 请求端点
Spring WS Request endpoint with SOAP header and body
在我正在开发的项目中,我需要指定一个包含请求和响应的模式,并且在请求中必须是 header 和 body。
我的问题是生成在请求中用 header 指定的 wsdl。我的架构是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="example"
xmlns:tns="example"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="ExampleRequestHeader">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter1" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ExampleRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ExampleResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter3" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我的wsdl生成成功了,但是header总是被忽略
<wsdl:message name="ExampleResponse">
<wsdl:part element="tns:ExampleResponse" name="ExampleResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="ExampleRequest">
<wsdl:part element="tns:ExampleRequest" name="ExampleRequest">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="example">
<wsdl:operation name="Example">
<wsdl:input message="tns:ExampleRequest" name="ExampleRequest">
</wsdl:input>
<wsdl:output message="tns:ExampleResponse" name="ExampleResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="exampleSoap11" type="tns:example">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Example">
<soap:operation soapAction=""/>
<wsdl:input name="ExampleRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="ExampleResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
我必须做什么才能 Spring WS 假设模式中的元素是请求的 header?有可能吧?
PS:这只是一个例子,不是真正的服务名称:)
解决方案在 Spring WS 的这个 JIRA 问题中:https://jira.spring.io/browse/SWS-605
具体来说,解决方案是在@ArjenPoutsma
创建的这个maven项目https://jira.spring.io/secure/attachment/19345/soapheader.zip中
在我正在开发的项目中,我需要指定一个包含请求和响应的模式,并且在请求中必须是 header 和 body。
我的问题是生成在请求中用 header 指定的 wsdl。我的架构是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="example"
xmlns:tns="example"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="ExampleRequestHeader">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter1" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ExampleRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ExampleResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter3" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我的wsdl生成成功了,但是header总是被忽略
<wsdl:message name="ExampleResponse">
<wsdl:part element="tns:ExampleResponse" name="ExampleResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="ExampleRequest">
<wsdl:part element="tns:ExampleRequest" name="ExampleRequest">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="example">
<wsdl:operation name="Example">
<wsdl:input message="tns:ExampleRequest" name="ExampleRequest">
</wsdl:input>
<wsdl:output message="tns:ExampleResponse" name="ExampleResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="exampleSoap11" type="tns:example">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Example">
<soap:operation soapAction=""/>
<wsdl:input name="ExampleRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="ExampleResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
我必须做什么才能 Spring WS 假设模式中的元素是请求的 header?有可能吧?
PS:这只是一个例子,不是真正的服务名称:)
解决方案在 Spring WS 的这个 JIRA 问题中:https://jira.spring.io/browse/SWS-605
具体来说,解决方案是在@ArjenPoutsma
创建的这个maven项目https://jira.spring.io/secure/attachment/19345/soapheader.zip中