Tutorial guj

4 respostas
R

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]

4 Respostas

mmenezes

po cara esse codigo ta um pouquinho ruim

tente melhora-lo ok

R

Qual código? o cliente?
Pode ser problema nisto? Onde?

Essa linha não sei se eh correto :

oHeaderElement = new SOAPHeaderElement ("http://rh","RecursosHumanosService");

Pq peguei isso em outro site q não explicava os 2 parametros se puder me dar a dica do que vai nestes 2 parametros…

Obrigado

Att. Roberto

[color=red]Mensagem do moderador: Ao postar codigos utilize a tag [ code ] .[/color]

vivi_grieco

coloque seus códigos entre as tags code

R

Blz , desculpe não sabia…

Pessoal, será q ninguém poderia me ajudar… não sei onde comecar… já procurei sobre isso mas nem sinal de nada…

Att. Roberto

Criado 1 de março de 2007
Ultima resposta 1 de mar. de 2007
Respostas 4
Participantes 3