| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2011 15:19:21
|
Talles Santana
Entusiasta Java
![[Avatar]](/images/avatar/7dd6e3b1e5f9049c821dddb40d9f3a93.png)
Membro desde: 17/12/2008 22:40:03
Mensagens: 21
Offline
|
Pessoal,
estou com o seguinte cenário:
Uma aplicação java já faz autenticação dos usuários e precisa repassar(propagar a identidade) o id do usuário quando realizar a invocação de um web service(java).
Preciso fazer isso da forma menos intrusiva e mais simples para causar o mínimo de impacto e alteração nas aplicações e/ou web services.
Tive uma idéia para solucionar o problema:
Uma invocação de web service no final das contas é uma mensagem HTTP que tem uma mensagem SOAP no payload.
Assim, a aplicação consumidora do serviço coloca o id do usuário dentro da mensagem SOAP.
O serviço passaria a lidar com a questão de 'ler' o id do usuário dentro da mensagem SOAP.
Ambiente de desenvolvimento: Oracle Workshop for WebLogic.
Servidor: Oracle Weblogic Server
Infelizmente, não encontrei recursos no ambiente que me permitam alterar a mensagem de invocação do serviço.
Podem me ajudar com essa tarefa?
Grato,
Talles Santana
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2011 15:38:07
|
amhfilho
JavaTeenager
Membro desde: 26/01/2005 08:23:41
Mensagens: 167
Localização: São José dos Campos - SP
Offline
|
Você quer desenvolver um serviço? Ou um cliente para um serviço existente? Nâo deu pra entender muito o seu pronblema
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2011 15:49:01
|
Talles Santana
Entusiasta Java
![[Avatar]](/images/avatar/7dd6e3b1e5f9049c821dddb40d9f3a93.png)
Membro desde: 17/12/2008 22:40:03
Mensagens: 21
Offline
|
Já tenho o serviço e já tenho o cliente do serviço.
O cliente do serviço é uma aplicação que, para desempenhar seu papel, pode realizar uma chamada ao serviço.
Eu quero apenas passar o ID do usuário, que o cliente sabe qual é, para o serviço no momento de sua invocação/chamada.
Gostaria de fazer isso sem alterar a assinatura do serviço.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2011 16:50:15
|
amhfilho
JavaTeenager
Membro desde: 26/01/2005 08:23:41
Mensagens: 167
Localização: São José dos Campos - SP
Offline
|
Se este ID não está na assinatura, você tem que alterar. A não ser que você passe isto dentro de algum outro elemento existente e trate isso na implementação do serviço
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2011 23:57:39
|
Talles Santana
Entusiasta Java
![[Avatar]](/images/avatar/7dd6e3b1e5f9049c821dddb40d9f3a93.png)
Membro desde: 17/12/2008 22:40:03
Mensagens: 21
Offline
|
Não dá para 'incluir' um elemento na requisição SOAP e o serviço tratar(ler) isso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/02/2011 11:12:13
|
Talles Santana
Entusiasta Java
![[Avatar]](/images/avatar/7dd6e3b1e5f9049c821dddb40d9f3a93.png)
Membro desde: 17/12/2008 22:40:03
Mensagens: 21
Offline
|
Então pessoal, seguindo o livro Professional Oracle Weblogic Server criei um serviço(classe) seguindo o modelo code-frist. O código do método do serviço é bem simples, seu funcionamento não é relevante.
Em seguida, criei uma aplicação consumidora do serviço. Ok, tudo funcionando.
Ao introduzir uma política no método do servico(getPoco(int id)), seguindo os moldes do livro, minha classe cliente não funciona mais e ao invocar o serviço é lançada a exceção indicando que a requisição não atende a política. Ok, isso era esperado já que incluí a política.
Então, realizei a alteração necessária na aplicação cliente para incluir o token na mensagem de requisição de modo que atenda a política.
Contudo, ao fazer o downcast (Map<String, Object> rc = ((BindingProvider) port).getRequestContext() dos stubs para obter o contexto da mensagem recebo
uma class cast exception. Já pesquisei na internet, mas até agora não vi nada que pudesse me ajudar. Alguém tem idéia do que seja? Foram os stubs gerados de forma incorreta ou tenho que adicionar algo no código?
Exception in thread "Main Thread" java.lang.ClassCastException: br.propid.clientepoco.wsclient.BuscaPocoService_PortType_Stub
at br.propid.cliente.Consumidor.main(Consumidor.java:35)
Ordem:
criei a classe do serviço, criei o build.xml do serviço e executei.
criei o build.xml do cliente, creiei a classe consumidora do serviço.
Para incluir a politica:
criei o UserTokenPolicy.xml e inclui a anotação na classe do serviço
adicionei, na classe cliente, o código que deveria inserir o token que atende a política
Abaixo, as fontes.
Classe Consumidora do Serviço
BUILD XML DO CLIENTE
Classe que representa o Serviço
BUILD XML DO SERVICO
UsernameTokenPolicy.xml
|
|
|
 |
|
|