Servlet direcionando para um WebService em outra aplicação  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Attila
What is classpath?

Membro desde: 18/12/2006 12:12:00
Mensagens: 5
Localização: Guarujá
Offline

Pessoal,

Estamos versionando um sistema existente, no qual utilizamos o JBOSS como servidor web.
Dai foi solicitado que fosse criado uma Servlet (AppRouter.ear) para receber uma requisição e dependendo da versão ativa, direcionará para outro contexto(arquivo-v1.ear).

Tentei utilizar o RequestDispatcher.forward() para direcionar, mas pelo que li não é possível realizar o direcionamento para outra aplicação.

Dai utilizei também o Response.sendRedirect(), consegui direcionar, porém como se trata de um Webservice SOAP, estou tendo dificuldades com relação aos dados do request/response para consumir este Webservice.

Alguém tem alguma sugestão para esta solução?

Abraço!

Att,

João Attila
[Email] [MSN]
jmag
JavaGuru

Membro desde: 10/09/2007 09:54:37
Mensagens: 216
Localização: São Paulo, SP
Offline

Bom a um tempo atrás precisei criar um client para consumir serviços SOAP do JBoss AS 6, a classe é meio amarrada, mas funcionou para o meu Objetivo.



Vê ai se te ajuda, o Bean é passado como parâmetro.


E o WSDL é passado como parametro tambem..

urlService = blabla.?wsdl

blaService = clientFactory.createFactory(urlService);

hehe lendo melhor nao era isso que vc tava perguntando rsrs,mas fica ai se servir pra alguma coisa..
abraço!

This message was edited 3 times. Last update was at 23/08/2011 13:30:36


Mauricio Magnani
JBoss Certified Application Administrator
https://jbossdivers.wordpress.com/


[Email] [WWW] aim icon [ICQ]
Attila
What is classpath?

Membro desde: 18/12/2006 12:12:00
Mensagens: 5
Localização: Guarujá
Offline

Então, não me serve bem isso pois nesta aplicação eu não terei as classes dos serviços.

A idéia é assim: O cara vai acessar um link http://localhost:8180/SistemaRouter/Servlet?service=Corretor

Dai na servlet eu devo direcionar esse request para um serviço localizado em outra aplicação

http://localhost:8180/SistemaServico/Corretor


É possível fazer isso? Há alguma forma melhor?

Att,

João Attila
[Email] [MSN]
jmag
JavaGuru

Membro desde: 10/09/2007 09:54:37
Mensagens: 216
Localização: São Paulo, SP
Offline

E ai cara... bom nunca precisei fazer isso, mas acredito que sim hein, e faria do mesmo jeito que está fazendo rsrs...
Agora se nao deu certo assim, realmente nao sei o que fazer e precisaria dar um pesquisada...
abraço!

Mauricio Magnani
JBoss Certified Application Administrator
https://jbossdivers.wordpress.com/


[Email] [WWW] aim icon [ICQ]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Acho que usar um ESB (Enterprise service Bus) resolve seu caso.
Mas se não quiser usar de tal recurso, que não é simples, constroi um Servlet que atua como proxy entre a requisição e seu webservice.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Attila
What is classpath?

Membro desde: 18/12/2006 12:12:00
Mensagens: 5
Localização: Guarujá
Offline

Fiz uma explicação melhor para deixar mais claro o problema...



1. A idéia original era a de criar uma Servlet para receber as requisições de um browser/cliente, verificar qual serviço deve ser chamado e de qual versão e encaminhar o cliente para a URL do Webservice conforme EAR da versão correta utilizando o método forward() da classe RequestDispatcher. Este método simplesmente direciona no servidor a requisição para outra Servlet/Webservice sem que o cliente/browser saiba que houve o redirecionamento, e o segundo componente é o responsável de retornar para a o cliente a resposta da requisição inicial.
- Fizemos o PoC (Prova de Conceito) utilizando na Servlet o método citado, porém constatamos que não há possibilidade de utilizar este método quando direcionamos para Componentes de diferentes aplicações, tanto utilizando endereço relativo ("../AutoModular/v1001v") como endereços absolutos ("http://server/AutoModular/v1001/").

2. Após o insucesso da idéia original, foi testado o uso do método sendRedirect() da classe HttpServletResponse para realizar o mesmo processo do item 1.
- Fizemos o PoC (Prova de Conceito) utilizando na Servlet o método citado passando o endereço absoluto ("http://server/AutoModular/v1001/"), o direcionamento começou a funcionar, porém constatamos que neste direcionamento a Servlet retorna a requisição para o cliente/brower no Header apenas o novo endereço e o browser/cliente é quem é o responsável por realizar uma nova requisição. Desta forma os dados que foram encaminhados inicialmente pelo cliente são perdidos, e na segunda requisição feita não ocorre o envio destes dados. Outro ponto negativo aqui é que existem 2 requisições por parte do cliente o que derruba a performance.

This message was edited 2 times. Last update was at 24/08/2011 09:56:51


Att,

João Attila
[Email] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team