Interceptar entrada e saída de um WEBService com filter

Fala Galera, boa tarde!

Estou desenvolvendo um WEBService aqui e preciso criar um filter.
Este filter tem que pegar alguns dados do XML de entrada.

Pesquisei aqui no forum e achei este exemplo.
http://www.guj.com.br/posts/list/209998.java#1067432

Pela arquitetura utilizada e a necessidade, não funcionaria usar este exemplo…

Preciso criar um filter comum implementando o doFilter etc…e dentro dele eu preciso pegar uma informação do XML de entrada…como um interceptador mesmo…
Tem como fazer isto? Tentei recuperar de várias maneiras através dos atributos de request e response e não deu certo…

Obrigado!!

Leo

Através de um filter, não. Mas você pode criar uma espécie de “alias” pro serviço, desenvolvendo um novo, que vai ficar na sua máquina local, só que com o mesmo contrato do serviço real. Aí, você encaminha a request pra ele, não sem antes mostrar o dado interceptado.

Coloquei um exemplo desses no meu blog, é um dos últimos posts : http://alesaudate.com . O nome do post é “Patterns of Systems Integrations #1: Services Mediator”. (Desculpe não colocar o link direto, não tenho acesso ao blog daqui do trabalho).

Se tiver alguma dúvida (ou não conseguir acessar o blog, sei lá), dá um toque que eu te explico por aqui…

[]´s

Fala Alexandre,

Li seu post e acho que ainda não atende…

Meu problema é o seguinte…sou de uma empresa 3ª que presta serviços…
A empresa “Original” já definiu os processos, arquitetura de como o sistema vai funcionar…até o WSDL já foi criado e não pode ser alterado…

Teremos uma TV que vai acessar os serviços que a gente está desenvolvendo…

O que eu estou desenvolvendo são 3 serviços… Validar Login; Consultar Informação X, Consultar Informação Y.
Da parte da TV, eu não sei como vai ser desenvolvida…sei que o usuário vai pelo controle remoto e acessa o meu serviço.

Quando ele acessar meu serviço, indiferente do serviço, eu tenho que controlar a sessão dele(tempo logado, tempo de expiração, etc) através de um componente JAR já feito…e este jar é um FILTER…E o filter espera um valor do XML de entrada para validar a sessão…
No filter há várias consistências e validações…inclusive métodos que geram um ID para eu navegar nas aplicações…Por isto tem que ser utilizado este FILTER…

Já o WSDL, eu não posso alterar nada pois já foi homologado pelo cliente.

Como que poderia funcionar este Service Mediator? É como um proxy?

Se vc tiver, eu uso talk e msn no servico…
leoino@gmail.com ou leonar_inoue@hotmail.com

Abraço e obrigado pela dica anterior.

[quote=Leo]Fala Alexandre,

Li seu post e acho que ainda não atende…

Meu problema é o seguinte…sou de uma empresa 3ª que presta serviços…
A empresa “Original” já definiu os processos, arquitetura de como o sistema vai funcionar…até o WSDL já foi criado e não pode ser alterado…

Teremos uma TV que vai acessar os serviços que a gente está desenvolvendo…

O que eu estou desenvolvendo são 3 serviços… Validar Login; Consultar Informação X, Consultar Informação Y.
Da parte da TV, eu não sei como vai ser desenvolvida…sei que o usuário vai pelo controle remoto e acessa o meu serviço.

Quando ele acessar meu serviço, indiferente do serviço, eu tenho que controlar a sessão dele(tempo logado, tempo de expiração, etc) através de um componente JAR já feito…e este jar é um FILTER…E o filter espera um valor do XML de entrada para validar a sessão…
No filter há várias consistências e validações…inclusive métodos que geram um ID para eu navegar nas aplicações…Por isto tem que ser utilizado este FILTER…

Já o WSDL, eu não posso alterar nada pois já foi homologado pelo cliente.

Como que poderia funcionar este Service Mediator? É como um proxy?

Se vc tiver, eu uso talk e msn no servico…
leoino@gmail.com ou leonar_inoue@hotmail.com

Abraço e obrigado pela dica anterior.

[/quote]

Bom… o Service Mediator, que eu descreví, é simplesmente um padrão para resolver problemas como o seu. A idéia é que se pegue o WSDL original e altere somente o endereço. Ou seja, na parte onde vai soap:address (ou qualquer que seja o protocolo que você use para trafegar os dados), você substitui o endereço. No endereço novo, vai o seu “mediador”, que vai encaminhar a requisição pro serviço original. Note que é algo completamente sem impacto, já que é esperado que você desenvolva serviços em um endereço mas altere estes endereços quando o sistema for para produção.

Eu não sei se entendí muito bem como funciona o seu filtro… teoricamente, é um filtro de login no sistema que trabalha com XML, certo? Não acho que exista uma maneira de fazer o que você quer sem que se chame isso de gambiarra, mas a gente pode ir conversando…

Eu te adiciono no GTalk mais tarde, quando chegar em casa (também não tenho acesso aqui…). Ah, por falar nisso… tire os @ e “.” do seu email aqui, senão vai chover spam, OK?

[]´s!