5

Spring-ws WebServiceTemplate を介して SOAP 1.2 WebService を呼び出すのが困難です。行われているリクエストの HTTP ヘッダーに SOAPAction がなく、サーバーは「有効なアクション パラメータがないとリクエストを処理できません。有効な SOAP アクションを指定してください」というエラーをスローします。Wireshark を介して監視することで、SOAP アクションが欠落していることがわかりました。私はプロキシの背後にもいません。

TCP Mon (SOAP UI のようなツール) を介してリクエストを実行することにより、送信しようとしている SOAP XML が有効であることを確認し、応答を取得できました。

これが私の春の設定です:

<?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());
            }
        }
4

3 に答える 3

1

私は同じ問題に直面し、com.sun.xml.messaging.saaj.soap.MessageImpl 実装 ( http://java.net/jira/browse/SAAJ- 37)。1.3.19 バージョンにアップグレードしましたが、すべて問題ありませんでした。

問題:-

要求を出力ストリームに書き込む前に、saveChanges() メソッドが呼び出されます。このクラスの 1.3.2 バージョンは、'saveChanges' メソッドの実装で 'Content-Type' リクエスト ヘッダーを上書きしていました。

于 2012-11-07T04:03:06.183 に答える
0

SOAPAction は SOAP 1.1 でのみ必須です。セクション コンテンツ タイプを参照してください。

SOAP 1.1 の必須の SOAPAction HTTP ヘッダーは、SOAP 1.2 で削除されました。その代わりに、application/soap+xml メディア タイプのオプションのアクション パラメータがあります。

于 2014-08-19T09:20:06.397 に答える