Problema com @WebParam Mode  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
jubiraco
Debugger

Membro desde: 27/08/2009 15:42:58
Mensagens: 56
Localização: Curitiba
Offline

Olá,

estou estudando JAX-WS e estou tentando aprender a usar os WebParam.Mode (IN, OUT e INOUT).

Para testes, criei a seguinte interface:


Abaixo, a implementação do serviço:


Abaixo, as classes utilizadas como parâmetro:
Person:


Player:


Quando tento subir o serviço, esta exceção é lançada:


Como estou apenas estudando (não vou publicar meus serviços em ambiente de produção), estou usando a classe Endpoint para publicá-los:


Alguém sabe o que estou fazendo de errado?

Obrigado,
Abraço!
Rafael Carneiro
Moderador
[Avatar]

Membro desde: 31/03/2007 12:40:41
Mensagens: 809
Localização: Fortaleza
Offline

Essa classe CreatePlayerResponse é um cliente?

Rafael Carneiro
http://www.rafaelcarneiro.com | @rcarneiro | JForum
[WWW] [MSN]
jubiraco
Debugger

Membro desde: 27/08/2009 15:42:58
Mensagens: 56
Localização: Curitiba
Offline

Olá,


Essa classe CreatePlayerResponse é um cliente?


Não. Eu acredito que o CreatePlayerResponse é o wrapper para a mensagem que é criado automaticamente pelo JAX-WS.

Obrigado,
Abraço
Rafael Carneiro
Moderador
[Avatar]

Membro desde: 31/03/2007 12:40:41
Mensagens: 809
Localização: Fortaleza
Offline

Tem certeza? Procurei no google e não encontrei nada a respeito.

Rafael Carneiro
http://www.rafaelcarneiro.com | @rcarneiro | JForum
[WWW] [MSN]
jubiraco
Debugger

Membro desde: 27/08/2009 15:42:58
Mensagens: 56
Localização: Curitiba
Offline

Sim, tenho.

O padrão usado pelo JAX-WS é DOCUMENT/LITERAL e WRAPPED (parameterStyle = ParameterStyle.WRAPPED por default).

A menos que eu especifique o contrário, usando @SOAPBinding(parameterStyle = ParameterStyle.BARE), duas classes (uma para request e outra para response) wrappers serão criadas.

Obrigado,
Abraço!
victor.benjamin.guj
What is classpath?

Membro desde: 12/02/2009 14:50:04
Mensagens: 5
Offline

Olá,

Eu acredito que esteja faltando um parâmetro de resposta(Mode.OUT) ou retorno do método createPlayer. arg0 que a mensagem de erro de refere, é parâmetro player, se chama arg0 pois vc não deu um nome a ele em @WebParam, e o erro é porque ele não corresponde a resposta. Acrescente uma resposta.



Victor Benjamin
jubiraco
Debugger

Membro desde: 27/08/2009 15:42:58
Mensagens: 56
Localização: Curitiba
Offline

Olá,

você diz fazer isso:

?

Eu já tentei desta maneira e o erro persiste. A única diferença é que na exceção, o "arg0" é substituído por "person".

Tentei executar um código semelhante em outro computador, com outras versões do JDK e JAX-WS e funcionou.
Acredito que seja algum problema de incompatibilidade.

Obrigado,
abraço!
victor.benjamin.guj
What is classpath?

Membro desde: 12/02/2009 14:50:04
Mensagens: 5
Offline

Qual servidor de aplicação, versão e JDK que você está utilizando?
victor.benjamin.guj
What is classpath?

Membro desde: 12/02/2009 14:50:04
Mensagens: 5
Offline

Provavelmente você está usando JDK 6. Que possui o JAXB. E seu servidor de aplicação possui uma outra versão do JAXB. O que está acontecendo é que ClassLoader está carregando primeiro o JDK. E a versão JAXB da JDK é incompatível com o JAX-WS do servidor. Se o servidor rodar em cima do JDK 5, faça o teste. Acredito que funcionará.
jubiraco
Debugger

Membro desde: 27/08/2009 15:42:58
Mensagens: 56
Localização: Curitiba
Offline

Olá,
Provavelmente você está usando JDK 6. Que possui o JAXB. E seu servidor de aplicação possui uma outra versão do JAXB. O que está acontecendo é que ClassLoader está carregando primeiro o JDK. E a versão JAXB da JDK é incompatível com o JAX-WS do servidor. Se o servidor rodar em cima do JDK 5, faça o teste. Acredito que funcionará.


Na verdade, não estou usando servidor algum. Estou publicando os serviços usando a classe Endpoint do próprio JAX-WS.

Eu concordo contigo: também acho que talvez seja algum problema de incompatibilidade entre a versão do JDK 6 que uso (.17 eu acho) e do JAX-WS.

Em outra máquina (a do meu serviço), um código semelhante funcionou.

O problema é Mode.IN.

Se comentar o método que o usa, deixando somente o método que usa o Mode.OUT, o código funciona perfeitamente.
Se substituir o Mode.IN por Mode.INOUT também funciona.

O problema é somente com o IN mesmo

Obrigado,
Abraço!

victor.benjamin.guj
What is classpath?

Membro desde: 12/02/2009 14:50:04
Mensagens: 5
Offline

Foi o que eu te sugeri na minha primeira resposta. Mas talvez tenha me expressado mal. Quando eu disse acrescentar uma resposta, era para adicionar um parâmetro OUT ou um retorno, que geralmente da no mesmo. Talvez eu tenha usado o termo errado. Invés de resposta saida.

jubiraco
Debugger

Membro desde: 27/08/2009 15:42:58
Mensagens: 56
Localização: Curitiba
Offline

victor.benjamin.guj,

só agora fui entender o quê vc quis dizer hehehe
Então, quando eu executo o código acima, no computador de casa, tenho aquele problema (que estamos suspeitando do Mode.IN sem OUT).

Porém, se eu testar o seguinte código na máquina da empresa em que trabalho:


Implementação:


Publicação:


Código do Cliente:


O código acima funciona na máquina da empresa, mesmo tendo um único parâmetro com Mode.IN e sem retorno.

Acredito que o problema deve ser mesmo alguma incompatibilidade no meu ambiente...
Se eu descobrir o que está dando pau no meu ambiente, posto a resposta aqui.

Obrigado,
abraço!



 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team