Amigos estou fazendo o tutorial do axis e implementando a parte de segurança…
está quase 100%… mas estou com um erro na hora
de fazer a quisição ao meu web service.
Quando faco a primeira requisição para meu web service da o seguinte erro…
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString: WSHandler: cannot create instance of password callback: seguranca.AutorizacaoCallback; nested exception is:
java.lang.ClassCastException: seguranca.AutorizacaoCallback; nested exception is:
org.apache.ws.security.WSSecurityException: WSHandler: cannot create instance of password callback: seguranca.AutorizacaoCallback; nested exception is:
java.lang.ClassCastException: seguranca.AutorizacaoCallback
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:BetoDell
WSHandler: cannot create instance of password callback: seguranca.AutorizacaoCallback; nested exception is:
java.lang.ClassCastException: seguranca.AutorizacaoCallback; nested exception is:
org.apache.ws.security.WSSecurityException: WSHandler: cannot create instance of password callback: seguranca.AutorizacaoCallback; nested exception is:
java.lang.ClassCastException: seguranca.AutorizacaoCallback
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at rh.RecursosHumanosSoapBindingStub.pesquisar(RecursosHumanosSoapBindingStub.java:285)
at Testes.MeuCliente1.main(MeuCliente1.java:36)
parte do wsdd q configura a chamada da minha classe :
<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
<parameter name="passwordCallbackClass" value="seguranca.AutorizacaoCallback"/>
<parameter name="action" value="UsernameToken"/>
</handler>
Minha classe que será usada pra validar a senha:
package seguranca;
import java.io.IOException;
import javax.security.auth.callback.*;
import org.apache.ws.security.WSPasswordCallback;
public class AutorizacaoCallback {
public AutorizacaoCallback(){
System.out.println("Handler BgmAxisAutorizacaoCallback");
}
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
// atribui o password para um determinado usuário
if ("wss4j".equals(pc.getIdentifer())) {
pc.setPassword("security");
}
} else {
throw new UnsupportedCallbackException(callbacks[i],
"Unrecognized Callback");
}
}
}
}
Meu código cliente:
RecursosHumanosServiceLocator wsloc = new RecursosHumanosServiceLocator();
SOAPHeaderElement oHeaderElement;
javax.xml.soap.SOAPElement oElement;
RecursosHumanosSoapBindingStub ws;
ws = (RecursosHumanosSoapBindingStub) wsloc.getRecursosHumanos();
oHeaderElement = new SOAPHeaderElement("http://rh","RecursosHumanosService");
oHeaderElement.setPrefix("sec");
oHeaderElement.setMustUnderstand(false);
oElement = oHeaderElement.addChildElement("username");
oElement.addTextNode("wss4j");
oElement = oHeaderElement.addChildElement("password");
oElement.addTextNode("wss4j");
ws.setHeader(oHeaderElement);
Empregado f = ws.pesquisar(1);
[color=red]Mensagem do moderador: Ao postar codigos utilize a tag [ code ] . [/color]