cliente - soapmessage example java
Agregar Soap Action Header usando Java (1)
Estaba enfrentando un problema similar y aquí está lo que funcionó para mí. Yo había generado el sei usando wsimport.
Si los encabezados son parte del wsdl, puede generar el SEI que acepte los encabezados con -XHuboaditivos.
Si no lo son, deberá agregar el encabezado programáticamente usando SOAPHandler. ¡Es simple sin embargo!
Aquí hay un enlace con una descripción detallada. http://www.javadb.com/using-a-message-handler-to-alter-the-soap-header-in-a-web-service-client/
Cambie el método, manejeMensaje como abajo
public boolean handleMessage(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
SOAPMessage message = smc.getMessage();
try {
SOAPFactory soapFactory = SOAPFactory.newInstance();
SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.addHeader();
SOAPHeaderElement se=header.addHeaderElement(new QName("http://schemas.microsoft.com/ws/2005/05/addressing/none", "Action"));
//se.setMustUnderstand(true); //Ideal way to set if webservice supports
se.addTextNode("some text");
se.addAttribute(soapFactory.createName("S:mustUnderstand"),"1"); //S: or s: depending on xmlns
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
SOAPMessage message = smc.getMessage();
message.writeTo(System.out);
System.out.println("");
} catch (Exception ex) {
ex.printStackTrace();
}
}
return true;
}
// Código para adjuntar controlador.
Service1 service1 = new Service1();
IService1 iService1 = service1.getBasicHttpBindingIService1();
BindingProvider bindingProvider = (BindingProvider) iService1;
final Binding binding = bindingProvider.getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null) {
handlerList = new ArrayList<Handler>();
}
handlerList.add(new HeaderHandler());
binding.setHandlerChain(handlerList);
ServiceResponse serviceResponse = iService1.callServiceMethod1(serviceRequest);
¿Cómo agrego un encabezado de acción de jabón en java? <a:Action s:mustUnderstand="1">MyServiceName</a:Action>
el servicio en SoapUI usando <a:Action s:mustUnderstand="1">MyServiceName</a:Action>
en Header y funciona bien según este error de desajuste de la acción SOAP de la acción al probar un servicio WCF con SoapUI . Sin este encabezado, obtengo The SOAP action specified on the message, '''', does not match the HTTP SOAP Action,
error que es el mismo error que recibo de mi aplicación cliente Java.
PD: utilicé Apache CXF para generar los stubs del wsdl. También intenté usar JAX-WS RI usando wsimport para generar los stubs del cliente de Java. Mismo error usando ambos casos.
¿Alguna idea? No pude encontrar una publicación concluyente correcta que aborde este problema en Java on SO.
Esto es lo que probé, pero supongo que no se recomienda usar clases del paquete com.sun ... y podría causar problemas de portabilidad en diferentes jdks. JAX-WS - Agregar encabezados SOAP