2009-04-24 34 views
12

Estoy intentando consumir un servicio web .NET 2.0 utilizando Axis. He generado el cliente de servicios web utilizando Eclipse WST Plugin y parece estar bien hasta ahora.Establecer encabezado SOAP personalizado utilizando Axis 1.4

Aquí el encabezado SOAP se esperaba:

<soap:Header> 
<Authentication xmlns="http://mc1.com.br/"> 
    <User>string</User> 
    <Password>string</Password> 
</Authentication> 
</soap:Header> 

No se encontró ninguna documentación sobre cómo configurar esta cabecera desde un cliente Eje. Cuando generé el cliente utilizando Visual Studio C# Express 2008, genera una clase llamada Authentication con dos atributos de cadena (User y Password) y todos los métodos del cliente reciben un objeto de esta clase como primer parámetro, pero no sucedió con Axis Cliente de WS

¿Cómo puedo configurar este encabezado en mis llamadas de cliente?

Respuesta

27

¿Quizás puede usar el método org.apache.axis.client.Stub.setHeader? Algo como esto:

MyServiceLocator wsLocator = new MyServiceLocator(); 
MyServiceSoap ws = wsLocator.getMyServiceSoap(new URL("http://localhost/MyService.asmx")); 

//add SOAP header for authentication 
SOAPHeaderElement authentication = new SOAPHeaderElement("http://mc1.com.br/","Authentication"); 
SOAPHeaderElement user = new SOAPHeaderElement("http://mc1.com.br/","User", "string"); 
SOAPHeaderElement password = new SOAPHeaderElement("http://mc1.com.br/","Password", "string"); 
authentication.addChild(user); 
authentication.addChild(password); 
((Stub)ws).setHeader(authentication); 

//now you can use ws to invoke web services... 
+0

después de tantas horas frustrantes, esta es la respuesta que necesitaba. gracias – LiorH

+0

¡Esto era exactamente lo que necesitaba! – talanb

+0

'SOAPHeaderElement authentication = new SOAPHeaderElement (" http://mc1.com.br/ "," Autenticación ");' Esta declaración me da a mí y el error 'no puede iniciar la clase abstracta java' ¿cómo resolver este problema? – Salman

2

Si usted tiene un objeto que representa el contenedor Authentication con identificador de usuario y contraseña, puede hacerlo de esta manera:

import org.apache.axis.client.Stub; 

//... 

MyAuthObj authObj = new MyAuthObj("userid","password"); 
((Stub) yourServiceObject).setHeader("urn://your/name/space/here", "partName", authObj); 
+1

¿Qué tipo de objeto es 'MyAuthObj'? Tal vez el que para el OP es 'Autenticación'? Si es así, ¿cómo puede el cliente crear una instancia de dicho objeto? ... ¡Gracias! – bluish

1

tengo el mismo problema y resuelto por el fragement a continuación :

ServiceSoapStub clientStub = (ServiceSoapStub)new ServiceLocator().getServiceSoap(url); 
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement("http://www.abc.com/SSsample/","AuthHeader"); 
SOAPElement node = header.addChildElement("Username"); 
node.addTextNode("aat"); 
SOAPElement node2 = header.addChildElement("Password"); 
node2.addTextNode("sd6890"); 

((ServiceSoapStub) clientStub).setHeader(header); 
Cuestiones relacionadas