在 HTTP header 中使用 SOAPAction 在 JAVA 中使用 SOAP 服务
Using SOAPAction in HTTP header to consume SOAP Service in JAVA
我正在尝试在 Java 中使用 spring WebServiceGatewaySupport
.
实现肥皂服务消费者
当我使用 curl
使用如下服务时,它给出了正确的响应。
curl -d @request.xml -H 'SOAPAction:abc:mnEvent#DoAction' https://myhost.org/cd/doAction.jsp
我正在尝试使用 JAVA 实现相同的功能,方法是在继承自 WebServiceGatewaySupport
的模板 class 中添加以下 HttpHeaders
public O callWebService(String url, I request) {
return (O) getWebServiceTemplate().marshalSendAndReceive(url, request, new WebServiceMessageCallback() {
@Override
public void doWithMessage(WebServiceMessage message) {
TransportContext transportContext = TransportContextHolder.getTransportContext();
HttpComponentsConnection connection = (HttpComponentsConnection) transportContext.getConnection();
connection.getHttpPost().addHeader("SOAPAction", "abc:mnEvent#DoAction");
}
});
}
使用此代码,我收到如下错误消息。
SOP-330006 The method 'DoAction, ""' is not defined in SOAP service 'abc:mnEvent'.
将 curl
命令移动到 JAVA 时我错过了什么?
错误消息SOP-330006 The method 'DoAction, ""' is not defined in SOAP service 'abc:mnEvent'.
表明,请求中有两个肥皂操作。
- 在 HttpHeader 中添加了显式 SoapAction
- SoapMessage 中的隐式 SoapAction
为避免此问题,我们需要从 header 中删除 soapAction 并将其设置在 SoapMessage 中。
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
soapMessage.setSoapAction("abc:mnEvent#DoAction");
我正在尝试在 Java 中使用 spring WebServiceGatewaySupport
.
当我使用 curl
使用如下服务时,它给出了正确的响应。
curl -d @request.xml -H 'SOAPAction:abc:mnEvent#DoAction' https://myhost.org/cd/doAction.jsp
我正在尝试使用 JAVA 实现相同的功能,方法是在继承自 WebServiceGatewaySupport
HttpHeaders
public O callWebService(String url, I request) {
return (O) getWebServiceTemplate().marshalSendAndReceive(url, request, new WebServiceMessageCallback() {
@Override
public void doWithMessage(WebServiceMessage message) {
TransportContext transportContext = TransportContextHolder.getTransportContext();
HttpComponentsConnection connection = (HttpComponentsConnection) transportContext.getConnection();
connection.getHttpPost().addHeader("SOAPAction", "abc:mnEvent#DoAction");
}
});
}
使用此代码,我收到如下错误消息。
SOP-330006 The method 'DoAction, ""' is not defined in SOAP service 'abc:mnEvent'.
将 curl
命令移动到 JAVA 时我错过了什么?
错误消息SOP-330006 The method 'DoAction, ""' is not defined in SOAP service 'abc:mnEvent'.
表明,请求中有两个肥皂操作。
- 在 HttpHeader 中添加了显式 SoapAction
- SoapMessage 中的隐式 SoapAction
为避免此问题,我们需要从 header 中删除 soapAction 并将其设置在 SoapMessage 中。
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
soapMessage.setSoapAction("abc:mnEvent#DoAction");