Estou trabalhando em um projeto na firma, em uma aplicação legada feita em EJB 2 (eca!)… precisamos desenvolver um serviço novo para expor algumas novas funcionalidades e a idéia a principio é fazer algo com REST, mas reaproveitando as classes do modelo já existente.
Agora as duvidas: :lol:
Na camada do server, a ideia é retornar um XML. Pelo que conheço do JAX-RS, é necessário que a classe esteja com as anotações do JAX-B, e visto que não podemos mexer no modelo existente não poderemos incluir essa anotação. Há alguma outra forma de retornar essas classes como resources? Talvez parseando para XML na mao antes de retornar do serviço, ou algum outro framework da vida…O Restfulie conseguiria fazer isso?
Na camada do client (aqui vai ser o maldito EJB), vamos ler esse XML e converter para o objeto. Ok. Ocorre que o projeto está utilizando Java 1.4, há algum framework/ferramenta/sei lá o que compativel com essa versão, que permita fazer essa conversao? Não pretendo converter esse troço na mao nao, rs.
Para os colegas que porventura passarem pela mesma dificuldade (torço para que NÃO :lol: ), embora seja meio bizarro um serviço REST com um modelo legado…coisas de arquitetos fanfarroes. Mas eis a solução que adotei e espero que seja util a alguem…
O framework que usamos no serviço REST, o Jersey, de fato obriga a classe a ter anotações do JAX-B para que a mesma retorne como um XML, ou que um XML enviado do client entre como parametro de algum metodo. Ok. Para resolver a questão, usei uma anotação da especificação JAX-RS, a @Provider, que permite extender o provider JAX-RS que porventura voce está utilizando.
Entao criei uma classe anotada com @Provider e com @Produces(APPLICATION_XML), e que implementa a interface MessageBodyWriter, os metodos dessa interface me permitem receber o retorno do metodo do serviço REST (no caso, um objeto qualquer), converte-lo para a hipermidia apropriada (no caso, o XML) e escrever no stream do response HTTP. Para a conversão do objeto em XML usei o XStream.
Tambem criei uma implementação da interface MessageBodyReader (ambas interfaces são da especificação JAX-RS), que me permite receber um XML que esteja sendo enviado na request HTTP a partir do client, e converte-lo para objeto, a fim de ser usado como parametro dos metodos expostos no serviço. Alem de implementar essa interface, essa classe está anotada com @Provider e com @Consumes(APPLICATION_XML)
Para a conversão objeto->xml e vice-versa no client, usei tambem o XStream. Que framework boladao, alias!
Até que foi uma solução bem elegante, hehe, e espero que seja util a alguem.
Li o que postou , e estou com uma dificuldade semelhante a sua.
Como transformou o xml em objeto?
No meu caso eu enviei para o meu servidor uma string xml, onde tem um pdf transformado em base64, ai gerou uma String, e essa string eu passei por uma string xml.
A verdade é que não consigo montar o pdf novamente no servidor, não estou entendendo como tirar a string do xml, fazer o base64 para transformar e montar meu pdf.
Já pesquisei um mooonte, só que não consegui ajuda.
Entao, isso vai depender de como voce está deserializando o seu xml na outra ponta. Você está usando algum framework, XStream, Jax-B, o que? Se chega um xml como uma String, então é de se supor que você consiga converter isso pra um objeto que tenha a mesma estruta do xml enviado.
Uma vez que voce tenha esse xml já convertido como objeto, estou supondo que a string encodada estará em alguma propriedade do seu objeto. Aí basta você “desencodar”, talvez usando o commons-codec da Apache que ajuda.
Qualquer coisa poe ai os codigo que a gente tenta ajudar!