Olá pessoal!
Eu criei um cliente usando a ferramenta WSDL2Java que gera as classes a partir de um WSDL.
A única coisa que preciso fazer é instanciar os objetos e chamar o método. Ex:
Service ser = new ServiceLocator();
Port port = service.getPort();
String res = port.execute();
A requsição funcionou perfeitamente, mas gostaria de saber como faço para pegar as mensagens SOAP de requisição e resposta que são geradas.
Gostaria de guardas os xmls no log da minha aplicação.
Utilize alguma ferramenta para capturar o trafego SOAP, como por exemplo o TCPMOM.
Se vc esta usando axis, o TCPMOM acompanha o axis, é so dar uma procurada.
[]´s
goathi
jgbt ,
Obrigado por responder!
Eu conheço o TCPMonitor e o SOAPMonitor, mas a idéia é gravar isso no log da minha aplicação, entende?
Eu acho impressionante a dificuldade em achar algo relacionado a isso na internet. Isso é uma coisa simples e extremamente útil. Não entendo como não há uma forma simples de pegar uma informação como essa.
Valeu!
jgbt
Ferramenta pronta eu nao sei se tem, mas sei que da p/ azer , pois ja vi fazerem em um projeto que eu participei. Tinha um flag que logava ou em arquivo ou no BD o trafego SOAP.
Infelizmente isso ja faz um bom tempo e não participei da solução, então não posso dar dar muito detalhes de como foi implementado.
[]´s
goathi
Pois é.
Eu li a respeito da classe org.apache.axis.MessageContent. Aí fiz assim ( depois de fazer todas as chamadas às classes criadas pelo WSDL2Java ):
MessageContext mc = MessageContext.getCurrentContext();
Mas ele retorna null.
Realmente não é possível que não haja uma forma de pegar o XMLs de requisição e resposta.
Se alguém já passou por isso, por favor, compartilhe o conhecimento pois tenho certeza que muita gente vai precisar disso um dia. Uma coisa simples, gravar esse xml em log.
Ao final desse processo eu tenho um Document que contem a mensagem SOAP que o servico retornou. Mas diferente de vc eu nao criei o cliente do servico com o WSDL2Java, faço aki tudo na unha
Nao sei como ficaria no seu caso.
goathi
Pois é.
Já tenho todo o cliente pronto pelo WSDL2Java.
Não que eu não queira fazer na mão, mas acho esta ferramente muito prática e bastante confiável. Sem falar que o código fica bem limpo e organizado, tudo muito bem abstraído.
Deve haver uma forma mesmo usando as classes geradas pelo WSDL2Java.
Valeu mesmo assim amigão!
Abraço!
A
andre2k2
Tb acho q vc nao deve fazer na unha não, da muito trabalho. No meu caso eu fui obrigado a fazer pq a WSDL do servico por algum motivo estava ferrada nos enderecos e era impossivel acessar o servico, dai tive q fazer na unha… mas de qq modo vc pode vasculhar nessa classe port quem sabe não encontra lá um método que pega o SOAPPart? esse meu objeto ‘porta’ extende de Port, talvez não tenha ficado claro mas da pra dar uma fuçada nessa classe deve ter alguma coisa sim!
goathi
Valeu cara!
Estou fuçando no código para ver se posso implementar algo. O chato é que toda vez que eu precisar gerar as clases vou ter que implementar esta funcionalidade e isso não é legal!
Mas o pior é que se eu não conseguir vou ter que fazer na mão como você pois sou praticamente obrigado a guardar o SOAP em log. Política da empresa envolvida.
Mas valeu!
Abraço!
A
andre2k2
Implemente seu codigo numa classe filha da classe gerada pelo WSDL2Java. Assim vc nao precisa reimplementar… qd regerar a classe seu codigo está prontinho
Dá uma olhada na classe gerada tb, eu ja olhei algumas e realmente tem codigo lá que pode te dar uma luz nessa busca! Conseguindo manda msg aqui pra gente saber como vc conseguiu!
G
Gustavo_Andre
Boa Tarde!
Acho que já deve ter resolvido seu problema, mas caso não tenha segue a solução utilizada por mim quando utilizei o framework axis.
Consegui resolver meu problema fazendo o que está descrito abaixo. Assim pego o XML de envio e de retorno do servidor.
Você deverá colocar o código que irá pegar os XML´s dentro de FINALLY para sempre ser executado.
try{///// a referência "servicoRemoto" é um tipo "Stub", por isso é permitido o cast.NOME_DA_CLASSESoapBindingStubstub=(NOME_DA_CLASSESoapBindingStub)servicoRemoto;org.apache.axis.client.Callaxis=stub._getCall();MessageContextgen=axis.getMessageContext();///// Mostrar o XML de request(envio)Messagemsg=gen.getRequestMessage();SOAPEnvelopereplyDoc=msg.getSOAPEnvelope();System.out.println(replyDoc.getAsString());System.out.println("------------------");///// Mostrar o XML de response(resposta)Messagemsg1=gen.getResponseMessage();SOAPEnvelopereplyDoc1=msg1.getSOAPEnvelope();System.out.println(replyDoc1.getAsString());}catch(AxisFaulte){System.out.println(e.getMessage());}catch(Exceptionea){System.out.println(ea.getMessage());}