Este grupo de especialistas despúes de algunos días de investigación y de recopilar de información, obtuvimos la respuesta, queremos que todo este artículo sea de utilidad para tu trabajo.
Solución:
Una respuesta completa es la siguiente.
Mientras estás usando WebServiceTemplate
como clase para comunicarse con el servicio web, no entiendo por qué, pero no llena correctamente el encabezado HTTP.
Algunos WSDL tienen una parte que dice:
Y el WebServiceTemplate
ignora esta parte. El error anterior significa que su soapAction
El parámetro en el encabezado está vacío. Y no debería serlo. Consulte con Wireshark. Lo hice, usando un cliente de Chrome Soap y Spring. El segundo tiene un encabezado no válido.
Para solucionar esto, debe seguir la Sección 6.2.4 aquí: http://docs.spring.io/spring-ws/sites/2.0/reference/html/client.html
Lo que dice es básicamente agregar la parte del encabezado por su cuenta, con WebServiceMessageCallback
interfaz. Puedes leer más en la referencia.
Básicamente termina así:
webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback()
public void doWithMessage(WebServiceMessage message)
((SoapMessage)message).setSoapAction("http://tempuri.org/Action");
);
Donde puede configurar correctamente el valor del encabezado. Trabajó para mí también. Todo el día de lectura.
Resolví esto pero nunca publiqué la respuesta. Esto es lo que terminé con que funciona bien:
public WebServiceTemplate getWebServiceTemplate() throws SOAPException
if (webServiceTemplate == null)
final MessageFactory msgFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
final SaajSoapMessageFactory newSoapMessageFactory = new SaajSoapMessageFactory(msgFactory);
webServiceTemplate = new WebServiceTemplate(newSoapMessageFactory);
return webServiceTemplate;
public Object sendReceive(Object requestObject, ArrayList classesToMarshall, final String action)
throws ClassNotFoundException, SoapFaultException, SoapFaultClientException, WebServiceTransportException,
IllegalStateException, SOAPException
final WebServiceTemplate wst = getWebServiceTemplate();
final SoapMarshallUtil smu = getSoapMarshallUtil();
smu.configureMarshaller(wst, classesToMarshall);
// soap 1.2
SoapActionCallback requestCallback = new SoapActionCallback(action)
public void doWithMessage(WebServiceMessage message)
SaajSoapMessage soapMessage = (SaajSoapMessage) message;
SoapHeader soapHeader = soapMessage.getSoapHeader();
QName wsaToQName = new QName("http://www.w3.org/2005/08/addressing", "To", "wsa");
SoapHeaderElement wsaTo = soapHeader.addHeaderElement(wsaToQName);
wsaTo.setText(uri);
QName wsaActionQName = new QName("http://www.w3.org/2005/08/addressing", "Action", "wsa");
SoapHeaderElement wsaAction = soapHeader.addHeaderElement(wsaActionQName);
wsaAction.setText(action);
;
Object responseObject = wst.marshalSendAndReceive(this.uri, requestObject, requestCallback);
return responseObject;
Comentarios y puntuaciones
Tienes la opción de añadir valor a nuestra información añadiendo tu veteranía en las observaciones.