Como usar o código gerado pelo Plugin do XFire no Eclipse?

7 respostas
Pedrosa

Ola, gostaria de entender como funciona a geração das classes pelo Plugin do XFire e como extrair as informações?

Existe algum manual ou alguma referência?

No site do framework, não encontrei nada.

Estou usando conforme:
http://xfire.codehaus.org/Eclipse+Plugin

7 Respostas

zepunk

Através do WSDL.
O wsdl é onde estão descrito todas as informações do web services, métodos e parametros.
Com o wsdl ele gera as classe stubs.

Pedrosa

Ok entendi, mas qual dessas classes usar para extrair as informações no meu WS, tenho um exemplo Client que pega o contéudo e joga no xml:

public class ClientBook {
	public static void main(String[] args)throws Exception {
		URL url = new URL("http://localhost:8080/MJXFire/services/MeuServico?wsdl");
		Client cliente = new Client(url);
		Object[] resultado = cliente.invoke("getBooks", null);
		DOMUtils.writeXml((Document)resultado[0], System.out);
	}
}

E gera algo assim:

<ns1:Book xmlns:ns1="http://ws.empresa.com.br">
<author xmlns="http://ws.empresa.com.br">Autor</author>
<isdn xmlns="http://ws.empresa.com.br">123456789</isdn>
<title xmlns="http://ws.empresa.com.br">Titulo</title>
</ns1:Book>

Ao inves de jogar no xml, como faço para obter o contéudo de cada nó, nesse caso: autor, isdn, title, note que usei o DOMUtils.writeXml.

zepunk

Cara eu nunca usei este plugin.
Eu uso normalmente o WSDL2Java http://www.myspotter.com/wsdl2java.shtml que é bem facil de usar.
Onde você consegue usar o seu web service como se estivesse na sua aplicação.

Pedrosa

Será que é possível eu pegar com o Xtream pelo metodo xstream.fromXML(xml) o que fica armazenada aqui no DOMUtils.writeXml do XFire ou existe uma maneira mais simples?

zepunk

Normalmente os meus métodos do web Service retorna uma string com conteudo xml, e eu utilizo o XStream, é a maneira mais facil que acho para ler xml ainda mais trantando de web services.

Daniel_Quirino_Olive

Pedrosa:
Ok entendi, mas qual dessas classes usar para extrair as informações no meu WS, tenho um exemplo Client que pega o contéudo e joga no xml:

public class ClientBook {
	public static void main(String[] args)throws Exception {
		URL url = new URL("http://localhost:8080/MJXFire/services/MeuServico?wsdl");
		Client cliente = new Client(url);
		Object[] resultado = cliente.invoke("getBooks", null);
		DOMUtils.writeXml((Document)resultado[0], System.out);
	}
}

E gera algo assim:

<ns1:Book xmlns:ns1="http://ws.empresa.com.br">
<author xmlns="http://ws.empresa.com.br">Autor</author>
<isdn xmlns="http://ws.empresa.com.br">123456789</isdn>
<title xmlns="http://ws.empresa.com.br">Titulo</title>
</ns1:Book>

Ao inves de jogar no xml, como faço para obter o contéudo de cada nó, nesse caso: autor, isdn, title, note que usei o DOMUtils.writeXml.

Perai perai perai! Veja se o plugin do XFire gerou para você alguma classe chamada “Book”. Fiz uns testes aqui com o WSDL da Amazon e este plugin gerou todos os objetos que eu precisava através de JAXB.

Pedrosa

Daniel, essa classe que mencionei é outra coisa, mas como adaptar esse código para uso do Stream:

Realmente ele gera uma classe Book, algo parecido com que estou fazendo manualmente aqui.

public class ClientBook {
	public static void main(String[] args)throws Exception {
		URL url = new URL("http://localhost:8080/MJXFire/services/MeuServico?wsdl");
		Client cliente = new Client(url);
		Object[] resultado = cliente.invoke("getBooks", null);
		
		XStream xstream = new XStream();
                //o problema é aqui DOMUtils.writeXml é void
		String xml = DOMUtils.writeXml((Document)resultado[0], System.out);
		Pedido pedido = (Pedido)xstream.fromXML(xml);
		
		System.out.println("autor " + pedido.getAuthor());
		System.out.println("titulo " + pedido.getTitle());
		System.out.println("isdn " + pedido.getIsdn());
		
	}
}

//Pedido
public class Pedido {
	private String author;
	private String isdn;
	private String title;
	public Pedido(String author, String isdn, String title) {
		super();
		this.author = author;
		this.isdn = isdn;
		this.title = title;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getIsdn() {
		return isdn;
	}
	public void setIsdn(String isdn) {
		this.isdn = isdn;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
}

Nessa linha ocorre o problema:

String xml = DOMUtils.writeXml((Document)resultado[0], System.out);

Como jogar o que esse método writeXml imprime para variavel xml sendo que ele é void, ou seja só joga o conteudo do xml no console.

Criado 19 de janeiro de 2007
Ultima resposta 19 de jan. de 2007
Respostas 7
Participantes 3