Spring集成:如何正确调用SOAP Web服务?

时间:2018-07-25 09:10:16

标签: java spring web-services soap spring-integration

具有琐碎特征的SOAP WS:
-WSDL地址:

http://<ip>:<port>/service/name?wsdl

-目标方法名称:

getData(...)

Spring集成配置(“ spring-context.xml”)的一部分,用于调用WS:

...
<int:chain input-channel="data" output-channel="stdout">  
    <!-- transform message to request -->
    <int:transformer
        ref="soapRequestTransformer" 
        method="createReq">
    </int:transformer>
    <!-- define the WS method to be called (getData) -->
    <int:header-enricher>
        <int:header 
            name="SoapAction" 
            value="http://<ip>:<port>/service/name/getData"/>
    </int:header-enricher>
    <!-- call WS -->
    <int-ws:outbound-gateway uri="http://<ip>:<port>/service/name"/>  
</int:chain>
...

变压器成功后,我有请求对象:

request.getHeaders(): {sequenceNumber=1, correlationId=2bfb560c- 
96ba-9c35-96dc-ba16104604b9, id=32f43a24-dee2-461c-a9b9-92c8ee37aaec, 
sequenceSize=12, timestamp=1532509142590}
request.getPayload(): org.types.GetDataRequest@77409e4b

如何正确设置spring-integration以正确调用WS?

1 个答案:

答案 0 :(得分:0)

  

问题是未调用WS。

这个问题看起来如何?没有至少一些堆栈跟踪,我们什么也不能说。

  

是否正确使用了WS方法的名称?

SoapAction值是特定于供应商的。您必须咨询提供的WS,以确定应该在标题中显示什么以及如何显示。

  

如何传递参数?

不确定nay参数。是的,您也可以发送一些query params,但是看起来好像不是您的问题。请更具体些。

顺便说一句,如果您发送一些POJO(例如您的org.types.GetDataRequest),则需要使用marshaling网关而不是简单的网关:

 <int-ws:outbound-gateway marshaller="someMarshaller" uri="http://<ip>:<port>/service/name"/>  

当然不能确定,如果您有一个好的XSD通用模型,则基于该WSDL中提供的信息...