Web Services JAX-WS: Criar os stubs em tempo de execução. [RESOLVIDO]

Eu estou começando a projetar o meu projeto de graduação.

Na fase inicial o que eu preciso fazer é um sistema de gerenciamento de servidores: grupos de servidores onde todos conhecem e enviam mensagens uns para os outros (como uma rede P2P, porém utilizando JAX-WS).

Estava desenhando uns diagramas quando me surgiu uma dúvida:

No NetBeans (IDE que eu estou usando), quando eu quero executar as operações de um determinado WebService, eu informo o WSDL dele e a própria IDE cria todos os stubs, ou seja, todas as classes necessárias para eu me comunicar com o serviço…

Imaginando a situação em que um novo servidor está sendo inserido no grupo de servidores, todos os outros devem ser capazes de se comunicar com este novo servidor (que tem o web service rodando também) e o novo servidor também deve ser capaz de se comunicar com todos os outros que já estão no grupo. Entendam “se comunicar” como “acessar os serviços disponíveis pelo web service do servidor”.

Enfim, todo este trabalho de reconhecimento e comunicação será automático via os web services.

Aí me surgiu a dúvida: em tempo de execução (uma vez que uma requisição de inclusão de novo servidor é feita), como eu crio todas aquelas classes que o NetBeans já gera a partir do WSDL ? Ou serrá que tem uma maneira mais fácil de fazer isso e eu to me complicando a toa? Me parece que esta solução não vai ser nada trivial (uma vez que possível)…

Obrigado desde já a todos.

se for pra simplesmente criar as classes WSDL2JAVA acredito que resolva seu problema

Não tenho certeza se entendi direito.

Você não poderia gerar simplesmente os clients desses webservices é “deploya-los” em cada servidor?

Se de repente for muito necessário ter este tipo de comunicação de forma transparente (sem uma tipagem forte do contrato), recomendo você dar uma olhada em Rest. Basicamente, ele também é um webservice, porém utilizando o protocolo HTTP para transportar as mensagens através dos métodos disponibilizados pela especificação do mesmo (GET, PUT, DELETE, etc…)

[]s

Consegui resolver o problema aqui pessoal…

No meu caso, o Web Service fica no endereço /WSProjeto/Recursos

O NetBeans criou uma classe que representa o serviço chamada: RecursosService.
Quando eu quero usar os serviços eu tenho que fazer o seguinte:

RecursosService servico = new RecursosService(); Recursos porta = servico.getRecursosPort(); ArrayList<RecursoBean> lista = (ArrayList<RecursoBean>) porta.getRecursos();

Quando eu faço isso, ele utiliza o endereço padrão para o wsdl, que no caso é: http://localhost/WSProjeto/Recursos?wsdl

Para acessar o mesmo web service em hosts diferentes basta eu criar o serviço especificando o endereço do wsdl no host desejado, ex:

RecursosService servico = new RecursosService(new URL("http://192.168.0.102:8084/WSProjeto/Recursos?wsdl")); Recursos porta = servico.getRecursosPort(); ArrayList<RecursoBean> lista = (ArrayList<RecursoBean>) porta.getRecursos();

:smiley: