Jax-WS

4 respostas
BlackDog

Galera,

Tenho um WebServices implementado em Jax-WS, meu problema é que o cliente que fizeram em .Net está enviando alguns dados em branco. Já o outro implementando em PHP funciona. Minha pergunta é, tem como logar o envelope recebido pelo servidor ?

At.

4 Respostas

Alexandre_Saudate

Dê uma procurada pelo uso da anotação @HandlerChain. Ela intercepta os dados na entrada e na saída do web service.

[]´s

BlackDog

asaudate:
Dê uma procurada pelo uso da anotação @HandlerChain. Ela intercepta os dados na entrada e na saída do web service.

[]´s

Cara, não entendi direito, eu devo criar uma classe que escreve o soap no arquivo ? tem algum exemplo pratico disso ?

Alexandre_Saudate

BlackDog:
asaudate:
Dê uma procurada pelo uso da anotação @HandlerChain. Ela intercepta os dados na entrada e na saída do web service.

[]´s

Cara, não entendi direito, eu devo criar uma classe que escreve o soap no arquivo ? tem algum exemplo pratico disso ?

Tenho sim, veja:

@HandlerChain(file = "serversoaphandlers.xml") //O arquivo serversoaphandlers.xml está no mesmo pacote que o serviço
@WebService
public class ErrorMessageService  {
	//corpo do meu serviço...
}

serversoaphandlers.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">

  <jws:handler-chain>
    <jws:handler>
      <jws:handler-name>NomeDoMeuHandler</jws:handler-name>
      <jws:handler-class>Handler</jws:handler-class>      
    </jws:handler>
  </jws:handler-chain>
  
</jws:handler-chains>

Handler.java :

public class Handler implements SOAPHandler<SOAPMessageContext>{

	public Set<QName> getHeaders() {
	           return null;
	}

	public void close(MessageContext context) {
		
	}

	public boolean handleFault(SOAPMessageContext context) {
		return true;
	}

	public boolean handleMessage(SOAPMessageContext context) {	

		SOAPMessage message = context.getMessage();
                                //Trate aqui o objeto message
  
		return true;
	}	

}

Esta classe message contém todos os dados que o web service recebe, inclusive como XML (tente usar message.getSOAPBody() para pegar o corpo do envelope). Assim, você consegue logar tudo que quiser da mensagem, beleza?

[]´s

BlackDog

Entendido !!!

Muito obrigado !!!

Abs.

asaudate:
BlackDog:
asaudate:
Dê uma procurada pelo uso da anotação @HandlerChain. Ela intercepta os dados na entrada e na saída do web service.

[]´s

Cara, não entendi direito, eu devo criar uma classe que escreve o soap no arquivo ? tem algum exemplo pratico disso ?

Tenho sim, veja:

@HandlerChain(file = "serversoaphandlers.xml") //O arquivo serversoaphandlers.xml está no mesmo pacote que o serviço
@WebService
public class ErrorMessageService  {
	//corpo do meu serviço...
}

serversoaphandlers.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">

  <jws:handler-chain>
    <jws:handler>
      <jws:handler-name>NomeDoMeuHandler</jws:handler-name>
      <jws:handler-class>Handler</jws:handler-class>      
    </jws:handler>
  </jws:handler-chain>
  
</jws:handler-chains>

Handler.java :

public class Handler implements SOAPHandler<SOAPMessageContext>{

	public Set<QName> getHeaders() {
	           return null;
	}

	public void close(MessageContext context) {
		
	}

	public boolean handleFault(SOAPMessageContext context) {
		return true;
	}

	public boolean handleMessage(SOAPMessageContext context) {	

		SOAPMessage message = context.getMessage();
                                //Trate aqui o objeto message
  
		return true;
	}	

}

Esta classe message contém todos os dados que o web service recebe, inclusive como XML (tente usar message.getSOAPBody() para pegar o corpo do envelope). Assim, você consegue logar tudo que quiser da mensagem, beleza?

[]´s

Criado 15 de junho de 2010
Ultima resposta 15 de jun. de 2010
Respostas 4
Participantes 2