Ajuda

Teria alguém q pudesse me dar um exemplo de como criar um xml que satisfaca essas condições. Não consigo gerar um xml formatado utilizando
Axis para atender o que esta pedindo no tutorial.

Att. Roberto

http://www.guj.com.br/java.tutorial.artigo.180.1.guj

<soapenv ...> 
<soapenv:Header> 
<wsse:Security 
xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext" 
soapenv:mustUnderstand="true"> 
<wsse:UsernameToken> 
<wsse:Username>usuario</wsse:Username> 
<wsse:Password Type="wsse:PasswordText">senha</wsse:Password> 
</wsse:UsernameToken> 
</wsse:Security> 
</soapenv:Header> 
<soapenv:Body> 
... corpo do SOAP ... 
</soapenv:Body> 
</soapenv:Envelope> 

Erro:

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultSubcode: 
 faultString: WSDoAllReceiver: Request does not contain required Security header
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}hostname:BetoDell

WSDoAllReceiver: Request does not contain required Security header
	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:287)
	at Testes.MeuCliente1.main(MeuCliente1.java:62)

Você cria esse SOAP de request na mão? E o envia como?

Meu codigo de teste seria este abaixo:

No meu metodo de verificaçao de senha q fica no servidor chega a ser
instaciado, então acho q chego a conclusao q esta tudo implementado
conforme o tutorial, apenas esse erro. Agora não sei como fazer a
chamada deste servico. Nao estou usando senha encriptada ainda…

Att. Roberto

public static void main(String[] args) {
		try {
			
		

			RecursosHumanosServiceLocator wsloc = new RecursosHumanosServiceLocator();

			SOAPHeaderElement oHeaderElement;
			SOAPHeaderElement oHeaderElementToken;
			
			javax.xml.soap.SOAPElement oElement;
			javax.xml.soap.SOAPElement oElementToken;
			RecursosHumanosSoapBindingStub ws;
			ws = (RecursosHumanosSoapBindingStub) wsloc.getRecursosHumanos();
			
			oHeaderElement = new SOAPHeaderElement("http://schemas.xmlsoap.org/ws/2002/07/secext","Security");			
			oHeaderElement.setPrefix("wsse");
			oHeaderElement.setMustUnderstand(true);
			oHeaderElement.setActor(null);
			
			oHeaderElementToken =new SOAPHeaderElement("http://schemas.xmlsoap.org/ws/2002/07/secext","UsernameToken");
			oHeaderElementToken.setPrefix("wsse");
			oHeaderElementToken.setMustUnderstand(true);
			oHeaderElementToken.setActor(null);
			oElement = oHeaderElementToken.addChildElement("Username");
			oElement.addTextNode("wss4j");			
			oElement = oHeaderElementToken.addChildElement("Password");
			oElement.setAttribute("Type", "wsse:PasswordText");			
			oElement.addTextNode("wss4j");			
			oHeaderElement.addChildElement(oHeaderElementToken);
			ws.setHeader(oHeaderElement);
			ws.getHeaders();
			
			Empregado f = ws.pesquisar(1);
			System.out.println(f.getNome() + " - " + f.getCargo() + " - "
					+ String.valueOf((f.getSalario())));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

Nunca fiz isso funcionar com o Axis gerando o cliente :frowning:

Teria algum problema se eu usar o password e o username do stub pra levar essas informações?

Qual seria a diferença?