Mensagens enviadas por: acdesouza
Índice dos Fóruns » Perfil de acdesouza » Mensagens enviadas por acdesouza
Autor Mensagem
Parece que achei

O lance é que o Comparator dá baixa prioridade para o pacote: br.com.caelum.vraptor.serialization

E, o JSON está em br.com.caelum.vraptor.restfulie.serialization.

Por isso que, dependendo da ordem, funciona. Porque o Serialization do plugin tem que estar na frente do Serialization do Restfulie.

Para resolver, sugiro colocar o pacote do restfulie como menos prioridade do que os 3rd parties, porém, mais prioridade do que o outros da caelum.

O que acha?
Lucas Cavalcanti wrote:alguma sugestão de como fazer a ordenação dos serializers?


Extrai o Comparator para um arquivo, e fiz um teste para ele:







O primeiro passa, o segundo quebra. Estou analisando para corrigir.
Lucas Cavalcanti wrote:o que vc pode fazer é sobrescrever o componente RepresentationResult, ordenando do jeito que vc precisa...

só copiar a classe https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/serialization/DefaultRepresentationResult.java para o seu projeto, e ordenar do jeito que vc precisa...


Beleza. Isso resolve no projeto atual.

Lucas Cavalcanti wrote:mas como vc tá fazendo um plugin, o que a implementação padrão está fazendo é dando menos prioridade para serializers do pacote br.com.caelum.vraptor.serialization.


Isso. É, exatamente, isso que deveria estar acontecendo. Mas, debugando a classe br.com.caelum.vraptor.serialization.DefaultRepresentationResult, observei que a ordenação não está funcionando.
Como eu disse, a ordenação não está sendo determinística, isto é, dependendo da ordem de entrada o resultado muda. Estou pensando em remover o PackageComparator da classe para testá-lo.

Lucas Cavalcanti wrote:o que vc pode fazer é trocar o pacote do plugin pra outra coisa (tipo br.com.acdesouza.serialization), isso já vai resolver o problema.

Imaginei que deveria resolver. Mas, não deu certo. O histórico do nome dos pacotes foi:
  • br.com.caelum.vraptor: descobri o problema;

  • br.com.contrib.vraptor: tentativa de resolver;

  • br.com.beyondclick.vraptor: segunda tentativa de resolver;

  • E, nos dois casos deu o problema.

    Lucas Cavalcanti wrote:vc não precisa do provider. Ao invés disso, anote as classes do plugin com @Component, e registre no packages o pacote base do plugin.

    Eu não estou usando. Foi um momento de desespero para ver se resolvia
    O lance é o seguinte:

    O VRaptor recupera os Serializers e os coloca em uma lista.
    Para evitar o problema que eu relatei, ele ordena esta lista colocando os Serializers, que começam com o pacote br.com.caelum.vraptor.serialization no final.
    Só que o pacote da minha classe é br.com.caelum.vraptor.serialization.gson, o que fazia com que ele colocasse como igual.

    Então mudei o nome do pacote para br.com.contrib.vraptor.serialization, mas não resolveu.

    Debugar o VRaptor me fez acreditar que o problema está na classe br.com.caelum.vraptor.serialization.DefaultRepresentationResult.

    Ela recebe uma lista de Serialization e a ordena. O problema é exatamente esta ordenação. Dependendo da ordem inicial da lista, a lista ordenada é modificada.

    Alguém poderia ajudar? Seguem os exemplos:

    Caso em que dá erro ============
    =======================================

    Casos em que não dá erro ===========================

    *********************************************************

    ============================================
    Caros,

    Estou tentando usar o vraptor-gson-plugin, para serializar os JSONs usando a API Gson, do Google.

    O problema é que a escolha, por parte do VRaptor, de qual a implementação de br.com.caelum.vraptor.serialization.JSONSerialization não parece ser determinística. Ou seja, quando eu inicio a aplicação uma vez, ele usa o padrão do VRaptor, com XStream. Quando eu executo uma outra vez, usa o Gson.

    Observe que, diferente do que a última frase posso insinuar, não é intercalado. É, como se o VRaptor estivesse jogando cara-ou-coroa entre as duas implementações e quem ganha é usado.

    Para resolver o problema já tentei as seguintes abordagens:
    1. Criar um br.com.caelum.vraptor.util.gson.GsonSerializationProvider, que herda de SpringProvider e colocar ele no web.xml:


    Neste caso, imaginei que ao ativar o restfulie, o pacote de serialização padrão ganhava prioridade.

    2. Colocar o pacote onde estão os serializadores no web.xml


    Aqui não imagino uma explicação.

    Imaginei que deveria rolar uma forma de "desregistrar", no VRaptor, o serializador padrão de JSON. Mas, não achei como.


    Alguém teria uma idéia?
    Lucas Cavalcanti wrote:pra usar os componentes do Restfulie server vc precisa colocar no web.xml (eles são opcionais):



    Muuuuuuuuuuuito OBRIGADO!!!!!
    garcia-jj wrote:Você pode criar uma factory para esse compoente (Restfulie).


    Não, não posso. O VRaptor quem cria ele.

    garcia-jj wrote:Não conheço o Restfulie, então não sei se tem uma forma mais mágica de cria-lo. Talvez o Lucas saiba se tem outra forma melhor.


    Isso O ponto é que eu não estou entendendo porque o VRaptor ainda não criou uma instância do Restfulie. Estou com esperança de que o Lucas me de uma força!
    Caros,

    Estou fazendo um plugin para o VRaptor serializar JSON usando o Gson, da Google.
    Eu conheci o vraptor-gson-serializer, mas ele obriga a usar uma anotação em cada resource, o que eu não gostei. Além disso, ele não serializa os HypermediaResources.

    Meu problema é que o Spring não está conseguindo instanciar a classe que recebe o objeto Restfulie, por não encontrar nenhuma instância dele disonível.

    A classe que não está conseguindo ser instanciada pelo Spring é a br.com.caelum.vraptor.restfulie.serialization.GsonRestfulSerializationJSON, e não estou conseguindo escrever um teste que demonstre o erro.

    O erro, resumidamente, é:


    Alguma luz?

    O código está no github: https://github.com/acdesouza/vraptor-gson-plugin
    Só para linkar os assuntos:
  • Discussão sobre serialização dos links com representação JSON, na lista de discussão dos desenvolvedores.

  • Pull-request, no Github para a adição da funcionalidade.
  • Lucas Cavalcanti wrote:o snapshot deve estar em vraptor-core/lib/[optional]/jersey


    Isso! Mas não encontrei nos repos do Maven. Estou usando o Central, Java.net e Jboss.
    Lucas Cavalcanti wrote:... qqer coisa grita


    AAAAHHHHH

    Então, baixei o VRaptor do github, dei um checkout para a tag 3.3.1 e criei um branch a partir dessa tag com o nome vraptor-3.3.2

    Até aí tudo bem, mas não estou conseguindo compilar o projeto usando o maven. Mesmo depois de executar o maven_fix.sh

    Falta a dependência do jersey-core/server. No pom.xml está dizendo que depende de uma versão 1(com o groupId errado), só que esta não existe. No ant está sendo usado uma versão 1.5-SNAPSHOT, só que não acho o snapshot usado. Tem alguma coisa que estou esquecendo de fazer?

    Esqueci de falar, mudei o groupId para com.sun.jersey e a versão para 1.5-SNAPSHOT, como diz no pom.xml dentro do jar que o ant usa.

    Outra coisa: Continuo a conversa por aqui mesmo ou mando para a lista vraptor-dev?
    Sim. #comofaz?

    Estou vendo a implementação das classes do pacote: br.com.caelum.vraptor.restfulie.serialization

    Acredito que saberia criar um parse, mas não sei como fazer ele ser utilizado. Por onde começo?
    Mas o RestfulSerialization é só para o XStreamXMLSerialization, certo? Estava precisando para o JSON.

    Não encontrei uma implementação de serializador para JSON. Devo implementar um?

    A idéia é ter um JSON assim:

    Não reparei se dava erro. Estou olhando a implementação dos serializadores e não estou entendendo onde ele faz o parse dos links.

    Olhando a classe DefaultRepresentationResult, vi que ela só executa os serializadores. E, a XStreamXMLSerialization seriaiza para XML. Certo?
    Então, nesta segunda, não entendi onde ele faz a criação dos links. Poderia me ajudar?
    Vamos lá....

    1.


    2.


    3. Fiz um outro teste passando o header 'Accept: application/json'



    Resumindo: Nem o recursive, nem a representação em JSON, estão tratando os relations da classe root.
     
    Índice dos Fóruns » Perfil de acdesouza » Mensagens enviadas por acdesouza
    Ir para:   
    Powered by JForum 2.1.8 © JForum Team