Eu tenho que consumir uma webservice feita em .NET. Dentro da WS tem um método que retorna um XML.
Estou utilizando o axis e o org.apache.axis.wsdl.WSDL2Java para gerar as classes JAVA para consumo.
O método convertido pelo WSDL2Java que retorna XML criou o atributo do tipo org.apache.axis.message.MessageElement []
PERGUNTO: Como posso trabalhar os dados desse tipo de atributo.
No aguardo de ajuda
Vlw
Bom… vamos começar do começo.
Não importa a linguagem na qual foi desenvolvido o WS. Na verdade, você não deveria nem pensar na linguagem que foi utilizada (afinal, tudo vira XML, mesmo).
Sou contra a utilização de um framework tipo Axis para geração de clientes , pois deixa o cliente preso ao framework. Eu, por exemplo, utilizo o gerador do JDeveloper para isso (funciona que é uma beleza! =) )
“Fuce” o cliente para descobrir quais classes ele mapeou pro dominio. Você consegue mexer nessas classes e fazer com que elas se tornem mais amigáveis para seu uso.
[]´s
ibispo
Talvez não tenha sido mais claro. Dentro dessa WS tem, por exemplo, um método que retorna int e tem um metodo que retorna uma lista de dados do BD que o programador .NET me falou que é do tipo XML (se eu digitar a URL no browse aparece o tipo xml).
O metodo que retorna int funciona perfeito. Agora esse que retorna XML o axis converteu naquele tipo org.apache.axis.message.MessageElement []
OK valeu a dica, irei dar uma pesquisada no JDeveloper para isso.
Essa era uma das minhas duvidas - É correto fazer mudanças nas classes geradas para meu uso?
E aproveitando, se houver mudanças em algum metodo da WS é correto pensar que devo processar WSDL2Java novamente?
Valeu pela resposta!
Alexandre_Saudate
Teoricamente - repito, teoricamente - é possível, sim, fazer a modificação das classes geradas. Digo teoricamente porque, sabendo que você usa o Axis, não sei se funciona (neste ambiente, nunca modifiquei nada. Usando o cliente do JDeveloper, faço direto, sem problemas).
Agora, quanto à geração do cliente, você DEVE regerar o cliente quando houver mudanças na assinatura de um método exposto.
[]´s
ibispo
asaudate:
…sabendo que você usa o Axis, não sei se funciona (neste ambiente, nunca modifiquei nada. Usando o cliente do JDeveloper, faço direto, sem problemas).
Eu utilizo aqui o Eclipse.
Então terei que modificar esse metodo que retorna esse tipo de campo org.apache.axis.message.MessageElement [] para um tipo mais ‘amigável’ afim de poder resolver meu problema.
Muito obrigado.
ibispo
Para quem quiser saber, eu recebi o retorno do tipo org.apache.axis.message.MessageElement [] da classe gerada pelo WS:
A classe criada implementa org.apache.axis.encoding.AnyContentType e com isso temos um atributo do tipo
org.apache.axis.message.MessageElement [] chamado _any. Tenho getter e setter do mesmo tb.
Bem, para eu capturar o conteudo XML executei as linhas abaixo:
ObjectobjXML=java.lang.reflect.Array.get(minhaClasse.get_any(),0);StringdadosXML=objXML.toString();System.out.println("Dados do objeto: "+dadosXML);
A partir daí, você pode converter essa string para Document e fazer o que quiser com ela.