Problema pra passar objeto como parametro na chamada de Webservice Restful (Jersey)

Olá pessoal, blz?

Eu estou fazendo um Ws que agiria como um intermediário entre uma aplicação e o banco de dados, e um dos primeiros testes éra chamar um método do Ws que receberia valores coletados à partir de uma tela da aplicação e deveria inseri-los no banco de dados, só que pro meu azar não ta tudo tão fácil quanto os tutoriais que tem por ae mostram.

Os dados são coletados em uma página JSP (apenas por conveniencia, mas futuramente páginas PHP, e talvez ASP irão utilizar o Ws), e são atributos distribuídos em 4 classes diferentes, sendo que uma destas pode ser chamada de classe “principal”, pq ela tem a instancia das outras 3 classes, e a idéia é usar JAXB para gerar um XML no formato:

...etc

Todas as classes ja estão com as anotações do Jaxb e o XML do lado client está perfeito, e a chamada do Ws está sendo feita assim:

ClientResponse response = service.path("rest").path("atendimento") .accept(MediaType.APPLICATION_XML) .post(ClientResponse.class, atendimento);

atendimento é uma instancia da classe principal, este ponto os atributos já foram setados, o XML já foi exibido no console (porém não foi gerado nenhum arquivo efetivamente).

E desta forma está implementado no Ws:

@POST @Consumes(MediaType.APPLICATION_XML) public Response adicionarAtendimento(JAXBElement<Object> atendimento){ ResponseBuilder response; atendimento.getValue();

Desta forma o que tem acontecido, é que o getValue do atendimento retorna um objeto com quase todos atributos nulos, ou zero no caso de atributos numéricos. Bem diferente do objeto passado como parametro pelo client. Curiosamente, uma dessas classes internas chega ao Ws com os valores atribuídos pelo client, mas não faço nem idéia do porque.

Alguem tem alguma idéia???

Fiz seguindo um tutorial que achei, mas reparei que no client embora as classes tenham as anotações do Jaxb, estou chamando o Ws passando mesmo uma instancia da classe, era pra ser assim mesmo? E quando for preciso chamar o Ws à partir de uma tela PHP ou .Net, não vai ser possível passar a instancia da classe também, qual a melhor forma de implementar este método???

Espero que alguem possa me ajudar, pois estou bem perdido nessa rsrsrs.

Obrigado!

Amigo, ja tentou usar o próprio tipo da classe atendimento ao invés de JAXBElement ? Pelo que sei o Rest converte o xml recebido no tipo apropriado da classe se suas classe estiverem com as devidas anotações @XmlRootElement do JAXB

@POST  
    @Consumes(MediaType.APPLICATION_XML)  
    public Response adicionarAtendimento(TipoDaClasseAtendimento atendimento){ ... }

Obrigado por tentar ajudar dan20.

Você esta certo, é preciso usar o mesmo tipo da classe ao invés de Object, porém não éra esse o problema, esse Object que está aí foi uma das tentativas que tentei pra solucionar o problema, estava até pensando em receber um InputStream já que nem o tipo da classe e Object estavam funcionando…

No final, o que aconteceu foi que eu fiz o lado do Ws e um amigo que cuidou do lado client usou diferentes nomes para os atributos, até uma das classes estava com nome diferente do Ws, assim por algum motivo o JAXB se perdia quando recebia os valores e ficava tudo null. Então foi só pedir pra ele utilizar os mesmos beans do Ws que resolveu o problema.

Abs