Consumir Webservices feita em .NET [RESOLVIDO]

5 respostas
ibispo

Olá amigos,

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

5 Respostas

Alexandre_Saudate

ibispo:
Olá amigos,

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.

  1. 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).
  2. 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! =) )
  3. “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:

Object objXML = java.lang.reflect.Array.get(minhaClasse.get_any(), 0);
String dadosXML = 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.

Vai ai a dica.

Vlw.

Criado 5 de janeiro de 2010
Ultima resposta 5 de jan. de 2010
Respostas 5
Participantes 2