Tengo dificultades para llamar a un SOAP 1.2 WebService a través de Spring-ws WebServiceTemplate. A la solicitud que se está realizando le falta SOAPAction en Http Header y el servidor arroja un error con "No se puede gestionar la solicitud sin un parámetro de acción válido. Proporcione una acción válida válida". Pude descubrir que faltaba la Acción SOAP al monitorear a través de wireshark. Tampoco estoy detrás de ningún proxy.Spring WebService Template SOAPA falta en el encabezado HTTP
Me he asegurado de que el XML de SOAP que estoy tratando de enviar sea válido ejecutando la solicitud a través de TCP Mon (herramienta como SOAP UI) y pude obtener una respuesta.
Aquí es mi primavera 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>
y este es mi código de 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());
}
}
Parece que está estableciendo los encabezados de Acción SOAP de varias maneras aquí a la derecha - usando 'actionCallBack', usando' 'SoapActionCallback..', ¿ambos enfoques no funcionan? –
Eso es correcto. Ambos enfoques devuelven el mismo error. – user1546703
Necesita un encabezado 'http: // networksolutions.com/ReadOrder' a la derecha: ¿qué encabezado ve sobre el cable utilizando wireshark? Solo quiero asegurarme de que no está enviando 'https: // ecomapi.networksolutions.com/soapservice.asmx'. Esta es una herramienta simple para capturar lo que va y viene - http://sourceforge.net/projects/nettool/ –