Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP标头中缺少Spring WebServiceTemplate SOAPAction_Java_Spring_Soap_Spring Ws - Fatal编程技术网

Java HTTP标头中缺少Spring WebServiceTemplate SOAPAction

Java HTTP标头中缺少Spring WebServiceTemplate SOAPAction,java,spring,soap,spring-ws,Java,Spring,Soap,Spring Ws,我很难通过SpringWSWebServiceTemplate调用SOAP1.2WebService。正在发出的请求在Http标头中缺少SOAPAction,服务器抛出一个错误“如果没有有效的操作参数,则无法处理请求。请提供一个有效的soap操作”。通过wireshark监视,我发现缺少soap操作。我也不支持任何代理 我通过TCP Mon(SOAP UI之类的工具)运行请求,确保我尝试发送的SOAP XML是有效的,并且能够得到响应 这是我的spring配置: <?xml version

我很难通过SpringWSWebServiceTemplate调用SOAP1.2WebService。正在发出的请求在Http标头中缺少SOAPAction,服务器抛出一个错误“如果没有有效的操作参数,则无法处理请求。请提供一个有效的soap操作”。通过wireshark监视,我发现缺少soap操作。我也不支持任何代理

我通过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>

我遇到了同样的问题,并将其追溯到com.sun.xml.messaging.saaj.soap.MessageImpl实现()的1.3.2版本中的一个bug。 我升级到1.3.19版本,一切都很好

问题:-


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

我遇到了一个类似的问题,这是由于package-info.java文件中XmlSchema注释的名称空间与我试图调用的soap服务的预期名称空间不同。这是因为我使用xjc从一个xsd生成jaxb请求和响应对象,这个xsd是我从wsdl部分缝合在一起的,再加上我之前接口的一个服务的xsd头,所以这对我来说是一个纯粹的剪切和粘贴错误,但前面关于名称空间的回答是我所犯错误的原因快速。

SOAPAction仅在SOAP 1.1中是必需的,请参阅

SOAP1.1强制的SOAPAction HTTP头已在SOAP1.2中删除。取而代之的是application/soap+xml媒体类型上的可选操作参数


您似乎正在以多种方式设置SOAP操作头—使用
actionCallBack
,显式使用
new SoapActionCallback..
,这两种方法都不起作用吗?这是正确的。两种方法都返回相同的错误。您需要
http://networksolutions.com/ReadOrder
header right-您使用wireshark在导线上看到的是什么header。只想确保您没有发送
https://ecomapi.networksolutions.com/soapservice.asmx
。这是一个简单的工具,可以捕获来回的内容-我附上了两个屏幕截图,显示HTTP头中的差异。首先是我从TCP Mon发送的请求的屏幕截图!第二个是来自java的请求。!如果您注意到,java请求的标头中缺少SOAPAction。对不起,我无法复制您的行为。我尝试了与您使用的webserviceTemplate API相同的方法-使用您提供的显式SOAPActionCallback,并且它对我来说工作得很干净,SOAPAction头显示在头中。你能确认SpringWS的版本吗?我正在使用2.1.0
            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());
            }
        }