gpt4 book ai didi

java - HTTP header 中缺少 Spring WebServiceTemplate SOAPAction

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:55 29 4
gpt4 key购买 nike

我在通过 Spring-ws WebServiceTemplate 调用 SOAP 1.2 WebService 时遇到困难。发出的请求在 Http header 中缺少 SOAPAction,服务器抛出错误“无法处理没有有效操作参数的请求。请提供有效的 soap 操作。”通过 wireshark 监控,我能够找出 SOAP Action 丢失的情况。我也不支持任何代理。

我已通过 TCP Mon(SOAP UI 之类的工具)运行请求,确保我尝试发送的 SOAP XML 有效,并且能够获得响应。

这是我的 Spring 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
<property name="soapVersion">
<util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12" />
</property>
</bean>

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory" />
<property name="defaultUri" value="https://ecomapi.networksolutions.com/soapservice.asmx" />
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender" /> </property>
</bean>

这是我的java代码:

            public void simpleSendAndReceive() {
try{
StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
SoapActionCallback actionCallBack = new SoapActionCallback("https://ecomapi.networksolutions.com/soapservice.asmx") {
public void doWithMessage(WebServiceMessage msg) {
SoapMessage smsg = (SoapMessage)msg;
smsg.setSoapAction("http://networksolutions.com/ReadOrder");
}
};
webServiceTemplate.sendSourceAndReceiveToResult(
"https://ecomapi.networksolutions.com/soapservice.asmx",
source,
new SoapActionCallback("http://networksolutions.com/ReadOrder"),
// actionCallBack,
result);


System.out.println(source.getInputStream().toString());
System.out.println(result.getWriter().toString());

}catch (SoapFaultClientException e) {
System.out.println(e.getFaultCode());
System.out.println(e.getFaultStringOrReason());
System.out.println(e.fillInStackTrace().getLocalizedMessage());
} catch (WebServiceIOException we) {
System.out.println(we.getRootCause());
}
}

最佳答案

我遇到了同样的问题,我将其追溯到 com.sun.xml.messaging.saaj.soap.MessageImpl 实现的 1.3.2 版本中的错误 (http://java.net/jira/browse/SAAJ-37)。 我升级到1.3.19版本,一切正常。

问题:-

在将请求写入输出流之前,会调用 saveChanges() 方法。此类的 1.3.2 版本在其“saveChanges”方法的实现中覆盖了“Content-Type”请求 header 。

关于java - HTTP header 中缺少 Spring WebServiceTemplate SOAPAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11631833/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com