Senhores, estou com o seguinte problema, tenho um Web Service onde a autenticação é deixada a cargo do JDBCRealm. Preciso consumir um serviço, porém não sei como enviar usuário e senha quando estou em uma classe normal. Consumir através de uma servlet é fácil:
public testservice.TestWS getTestWSPort() {
testservice.TestWS port = service.getTestWSPort();
((BindingProvider)port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "zezim");
((BindingProvider)port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "123");
return port;
}
Porém, se eu tiver em uma classe normal eu não consigo autenticar desta maneira…
Se alguém tiver um caminho diz ae!
[ ]'s
Consegui!
Quando geramos um Web Service Client no eclipse são geradas automaticamente algumas classes.
No nosso caso, precisamos alterar a seguinte classe xxxPortBindingStub (xxx = nome do seu serviço). Nesta classe temos todos os métodos disponíveis no nosso serviço, e são nestes que devemos inserir apenas mais duas linhas de código para que possamos enviar User / Password para sermos autenticados:
public TestService.GenericBean getTestById(java.lang.Integer idNew) throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setOperation(_operations[1]);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("");
_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.setProperty(org.apache.axis.client.Call.USERNAME_PROPERTY, "ze"); //Acrescentar esta linha!
_call.setProperty(org.apache.axis.client.Call.PASSWORD_PROPERTY, "123"); //Acrescentar esta linha!
_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
_call.setOperationName(new javax.xml.namespace.QName("TestService", "getTestById"));
setRequestHeaders(_call);
setAttachments(_call);
try { java.lang.Object _resp = _call.invoke(new java.lang.Object[] {idNew});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
else {
extractAttachments(_call);
try {
return (TestService.GenericBean) _resp;
} catch (java.lang.Exception _exception) {
return (TestService.GenericBean) org.apache.axis.utils.JavaUtils.convert(_resp, TestService.GenericBean.class);
}
}
} catch (org.apache.axis.AxisFault axisFaultException) {
throw axisFaultException;
}
}
Desta maneira o usuário e senha são embutidos no cabeçalho da requisição.
[ ]'s