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());
}
}
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/nettoolJe 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
Vous devez vous connecter pour publier un commentaire.
J'ai connu le même problème et j'ai tracé de nouveau à un bug dans la version 1.3.2 de la com.soleil.xml.de messagerie.saaj.le savon.MessageImpl de mise en œuvre (http://java.net/jira/browse/SAAJ-37).
J'ai mis à la 1.3.19 version et tout était bien.
La Question:-
Avant la rédaction de la demande pour le flux de sortie, la saveChanges() la méthode est appelée. La version 1.3.2 de cette classe est l'écrasement de la "Content-Type" en-tête de requête dans la mise en oeuvre de la "saveChanges" la méthode.
OriginalL'auteur John Shepherd
J'ai eu un problème similaire qui a été en raison de l'espace de noms de la XmlSchema annotation dans l'package-info.java fichier différent de ce que le service soap j'ai essayé d'appeler prévu. Il en est résulté de moi, en utilisant xjc pour générer le jaxb de demande et de réponse des objets à partir d'un fichier xsd que j'avais cousus à partir du wsdl parties en plus le xsd en-tête à partir d'un précédent service, j'ai été interfaçage, donc c'était un pur couper et coller erreur de ma part, mais la réponse précédente sur ici sur l'espace de noms est ce que clued-moi pour mon erreur rapidement.
OriginalL'auteur Frequentcrasher
SOAPAction est obligatoire uniquement dans SOAP 1.1, voir la section Type de Contenu.
OriginalL'auteur Amio.io