Estou tentando “Deserializar” um Json com o VRaptor e está ocorrendo o seguinte erro:
[code]Servlet.service() for servlet [default] in context with path [/estige] threw exception
com.thoughtworks.xstream.converters.ConversionException: valor : valor : valor : valor
---- Debugging information ----
message : valor : valor
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : valor : valor
class : br.com.aurum.estige.representacoes.Pesquisa
required-type : java.util.ArrayList
line number : -1
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:246)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:218)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:162)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:82)...[/code]
Alguém poderia me ajudar? Não estou conseguindo identificar o problema.
Mais desculpa a minha ignorância, eu adicionei “vraptor-gson-1.1.jar” no classpath do meu projeto e o mesmo problema ocorre. Eu preciso fazer mais alguma coisa?
Também estou usando o VRaptor 3.2.0, será que é necessário atualizar?
Eu estava utilizando está classe para deserializar o Json, pois no mesmo projeto eu deserializava em XML, então simplesmente criei esssa classe abaixo para o JSON…
@Component
@Deserializes("application/json")
public class CustomJsonDeserializer extends JsonDeserializer {
public CustomJsonDeserializer(final ParameterNameProvider provider,
final TypeNameExtractor extractor) {
super(provider, extractor);
}
@Override
protected XStream getXStream() {
final XStream xStream = super.getXStream();
xStream.alias("cliente", Cliente.class);
xStream.alias("pesquisa", Pesquisa.class);
xStream.alias("parametro", Parametro.class);
xStream.alias("fornecedor", Fornecedor.class);
xStream.processAnnotations(Cliente.class);
return xStream;
}
}
Então, com o Gson eu preciso criar uma classe que extend a GsonDeserialization?
Tentei aqui, adicionei o pacote do plugin no classpath e dá o erro
GRAVE: Servlet.service() for servlet [default] in context with path [/estige] threw exception
com.thoughtworks.xstream.mapper.CannotResolveClassException: pesquisa : pesquisa
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:68)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:71)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:38)
@Component @Deserializes(“application/json”)
public class EstigeJsonDeserializer extends GsonDeserialization{
public EstigeJsonDeserializer(final ParameterNameProvider paramNameProvider,
final Localization localization) {
super(paramNameProvider, localization);
}
}
[/code]
Não deu erro, mais também não “deserializou” meu arquivo de json. Entrou no método mais trouxe o objeto vazio…
Não sei o que pode ser…
Segue a chamada do método da minha classe
@Post
@Consumes("application/json")
@Path("/cliente/{idDoCliente}/consulta/{idDaConsulta}/pesquisa")
public void buscaProcesso(final int idDoCliente, final int idDaConsulta, final Pesquisa pesquisaRealizada) {
...
}
@XStreamAlias("pesquisa")
public class Pesquisa {
private int codigoDeVinculo;
private List<Parametro> parametros = new ArrayList<Parametro>();
public Pesquisa() {}
public Pesquisa(final int codigoDeVinculo, final List<Parametro> parametros) {
this.codigoDeVinculo = codigoDeVinculo;
this.parametros = parametros;
}
Como o projeto utilizava xml, está com a notação @XStreamAlias(“pesquisa”), eu não preciso fazer alguma coisa do tipo para o Gson?
só para deixar registrado, caso alguém tenha o mesmo problema p/ “deserializar” em uma classe que possua uma lista de objetos, o modelo do Json deve ser assim:
Estou tentando usar o plugin (https://github.com/renanreismartins/vraptor-gson/). Já adicionei o pacote do plugin mas quando vou deserializar pego a exceção de que ele não está conseguindo instanciar o gsonDeserialization. Alguma luz?
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'gsonDeserialization': Unsatisfied dependency expressed through constructor argument with index 1 of type [java.util.Collection]: : No matching bean of type [com.google.gson.JsonDeserializer] found for dependency [collection of com.google.gson.JsonDeserializer]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.google.gson.JsonDeserializer] found for dependency [collection of com.google.gson.JsonDeserializer]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}