Tuesday, April 29, 2014

Envio de headers a SOAP webservice




Hola a todos, tengo que consumir una web service, y lo que hice es generar el cliente usando el wizard que tiene eclipse, hasta ahi todo bien, pero la web service que tengo q consumir tiene una capa de seguridad adicional, se le tiene q mandar como header 2 datos, el usuario y el password, y no se como hacerlo desde java, este es el codigo donde se hace la invocacion:






Java Code:






public DatoResponse funcion(DatoRequest parameters) throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setOperation(_operations[0]);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("http://mi/dominio/funcion");
_call.setEncodingStyle(null);
_call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
_call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
_call.setOperationName(new javax.xml.namespace.QName("", "funcion"));

setRequestHeaders(_call);
setAttachments(_call);
try {
java.lang.Object _resp = _call.invoke(new java.lang.Object[] {parameters});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
else {
extractAttachments(_call);
try {
return (DatosResponse) _resp;
} catch (java.lang.Exception _exception) {
return (DatosResponse) org.apache.axis.utils.JavaUtils.convert(_resp, DatosResponse.class);
}
}
} catch (org.apache.axis.AxisFault axisFaultException) {
throw axisFaultException;
}
}




He intentado con lo siguiente:





Java Code:






SOAPHeaderElement authentication = new SOAPHeaderElement("http://mi/dominio/funcion/","Authentication");
SOAPHeaderElement user = new SOAPHeaderElement("http://mi/dominio/funcion/","username", "USUARIOWS");
SOAPHeaderElement password = new SOAPHeaderElement("http://mi/dominio/funcion/","password", "PASSWORDWS");

try {
authentication.addChild(user);
authentication.addChild(password);
} catch (SOAPException e) {
System.out.println("ERR");
}
_call.addHeader(authentication);










Java Code:






_call.setProperty("username", "CONSULTAS");
_call.setProperty("password", "WSCONSULTAS");










Java Code:






_call.setUsername("CONSULTAS");
_call.setPassword("WSCONSULTAS");




Pero ninguna de estas opciones funciona, como puedo enviar dichas cabeceras?. Les agradezco de antemano.




No comments:

Post a Comment