Printemps WebServiceTemplate SOAPAction manquant dans l'en-Tête HTTP

J'ai de la difficulté à appeler un WebService SOAP 1.2 via Spring-ws WebServiceTemplate. La demande est manquant SOAPAction en-Tête Http et le serveur renvoie une erreur avec "Incapable de gérer la demande sans une action valide paramètre. Veuillez fournir un soap valide l'action." J'ai été en mesure de comprendre le SAVON d'Action manquait le monitoring via wireshark. Je suis également pas derrière un proxy.

J'ai fait en sorte que le SOAP, XML, je suis en train d'envoyer est valide par l'exécution de la demande par l'intermédiaire de TCP Mon ( outil comme SOAP UI) et a réussi à obtenir de réponse.

Ici, est mon de printemps config:

<?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>

Et c'est mon code 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());
            }
        }
Vous semblez être la mise en Action SOAP-têtes de multiples façons, ici, de droite à l'aide de actionCallBack, de manière explicite à l'aide de new SoapActionCallback.., sont les deux approches ne fonctionne pas?
C'est correct. Les deux approches donnent la même erreur.
Vous avez besoin d'un http://networksolutions.com/ReadOrder en-tête droite - ce qui l'en-tête voyez-vous sur le fil à l'aide de wireshark. Voulez juste pour s'assurer que vous n'êtes pas d'envoi https://ecomapi.networksolutions.com/soapservice.asmx. C'est un outil simple pour capturer ce qui se passe en arrière - sourceforge.net/projects/nettool
Je joins deux captures d'écran qui montrent les différences dans les en-têtes HTTP. La première est la capture d'écran pour la demande, je suis d'envoi de TCP Lun !TCPMon-Tête de la Requête et la deuxième est la demande faite à partir de java.!Java-Tête de la Requête Si vous remarquez, SOAPAction est manquant dans l'en-tête pour le java demande.
Je ne suis pas en mesure de reproduire votre problème, désolé. J'ai essayé la même webserviceTemplate API que vous avez utilisé - avec explicite SOAPActionCallback la façon que vous avez fournies et il fonctionne correctement pour moi, le SOAPAction en-tête s'affiche dans l'en-tête. Pouvez-vous confirmer la version de Spring-WS - je suis en utilisant 2.1.0

OriginalL'auteur user1546703 | 2012-07-24