Error ao enviar objeto formato json para VRaptor

7 respostas Resolvido
G

Boa tarde Pessoal.

Estou tendo problemas ao deserealizar objeto json com VRaptor4.

Fazendo alguns teste, percebe uma situação:

Estou usando curl so para teste o serviço, porem quando faço esta requisição ex:
curl -v -H “Content-Type: application/json” -d " {“id”:1,“descricao”:“Teste json”}"http://localhost:8080/meuProjeto/rest/salvarAnotacao

o erro ocorre mas se eu tirar os espaços dos caracteres o objeto json, por exemplo: na descrição eu junto o valor Teste json para Testejson o deserializer funciona sem problema algum.

Podem me ajudar se isso esta ocorrendo por alguma falhar minha ou se pode ser algum problema no VRaptor4?

Meu método:

@Post
@Consumes("application/json")
public void salvarAnotacao(Anotacao anotacao) {
	System.out.println(anotacao.getDescricao());
	result.nothing();
}

Class:

public class Anotacao {
  @Id @GeneratedValue
  private Long id;
  private String descricao;
  @ManyToOne
  private Evento evento;
  @ManyToOne
  private Usuario usuario;
      //gets/sets
}
    

@Entity
public class Usuario{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty
@NotNull
@Column(nullable = false, length = 150)
private String nome;
@NotEmpty
@NotNull
@Column(nullable = false, length = 100)
private String email;
@Column(length = 20)
private String telefone;
@Column(length = 50)
private String cargo;
@NotEmpty
@NotNull
@Column(nullable = false, unique = true, length = 20)
private String login;
@NotEmpty
@NotNull
@Column(nullable = false)
private String senha;
@Enumerated(EnumType.ORDINAL)
@Column(nullable = false)
private UsuarioPerfil perfil;
@ManyToOne
private Grupo grupo;
@OneToMany
private List<Evento> eventos;
    //gets/sets
}
@Entity
public class Evento {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String title;
private Boolean allDay;
@Temporal(TemporalType.TIMESTAMP)
private Calendar start;
@Temporal(TemporalType.TIMESTAMP)
private Calendar end;
@Column(length = 10)
private String color;
private String url;
private Boolean compartilhar;
@ManyToOne
private Grupo grupo;
@ManyToOne(fetch = FetchType.EAGER)
private Usuario usuario;
@OneToMany(mappedBy = "evento", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Anotacao> anotacoes;
    //gets/sets
}

Error:

mai 16, 2016 3:12:21 PM org.apache.catalina.core.StandardWrapperValve invoke

GRAVE: Servlet.service() for servlet [default] in context with path [/agenda-online] threw exception

br.com.caelum.vraptor.view.ResultException: Unable to deserialize data

at br.com.caelum.vraptor.serialization.gson.GsonDeserialization.deserialize(GsonDeserialization.java:153)

at br.com.caelum.vraptor.serialization.gson.GsonDeserialization$Proxy$_$$<em>WeldClientProxy.deserialize(Unknown Source)

at br.com.caelum.vraptor.observer.DeserializingObserver.deserializes(DeserializingObserver.java:96)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)

at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)

at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)

at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)

at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)

at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)

at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)

at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)

at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:90)

at br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$</em>$$_WeldClientProxy.start(Unknown Source)

at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:93)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)

at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)

at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)

at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)

at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)

at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)

at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)

at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)

at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)

at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:123)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at br.com.meta3.calendario.interceptor.CORSFilter.doFilter(CORSFilter.java:42)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

Caused by: com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 22

at com.google.gson.internal.Streams.parse(Streams.java:54)

at com.google.gson.JsonParser.parse(JsonParser.java:84)

at com.google.gson.JsonParser.parse(JsonParser.java:59)

at com.google.gson.JsonParser.parse(JsonParser.java:45)

at br.com.caelum.vraptor.serialization.gson.GsonDeserialization.deserialize(GsonDeserialization.java:108)

 53 more

Caused by: java.io.EOFException: End of input at line 1 column 22

at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1377)

at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:471)

at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:403)

at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:666)

at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)

at com.google.gson.internal.Streams.parse(Streams.java:44)

 57 more

7 Respostas

igomes

Voce vai receber esse json em um parametro de um controller ?
Ele usa o gson para json, voce pode consultar o mesmo.

G

O meu controller ira receber este objeto. Porem eu acho que o problema não e na data, irei alterar a pergunta.

igomes

Esse data não é espeficamente a data, em ajax por exemplo o json, vai dentro de um data.
Coloca um log, ve o json já chegando certinho.
Como este json está sendo gerado ?
https://jsonformatter.curiousconcept.com/ aqui vc valida ele.
Se tiver ok, vai validando com as propriedades da sua classe.
Seu json. tem um objeto usuário/evento ?

G

E porque coincidentemente em outra parte do meu código eu tive um problema referente a data, o que me levou a fazer esta confusão. No entanto eu mudei o titulo e adicionei novas referências.

Sobre o json esta chegando certo ate o método do VRaptor que fica responsável de fazer a deserialização.

Irei mostrar uma situação.

Quanto dentro do meu json tem espaço entre uma string por exemplo, como um nome com um sobrenome, como neste caso: “{descricao”:“Giovani Felipe”}" , por algum motivo ele da erro na hora de deserializar o json mas se eu passar este mesmo json porem com o nome e sobrenome sem espaço “{descricao”:“GiovaniFelipe”}" ou seja juntos, o deserializer executa normalmente.

Exemplo de quando ocorrer tudo certo:

Exemplo de quando percebi que o json estava se quebrando no primeiro carácter que seja igual ao espaço " ".

Como o imputStream e injetável pelo CDI, irei ver se consigo visualizar o momento que a requisição chega até quando os dados enviados pelo protocolo http e transformado em um imputstream.

Espero ter deixado mais claro. E muito obrigado pela força que esta dando ai, espero resolver isso logo rsrsrs pq não tenho ideia do porque isso esta ocorrendo.rsrs

Felipeweb_Programado

Giovani posta suas outras duas classes que fazem relacionamento com a classe Anotacao por favor e se possível a stackTrace completa por favor.

G

Boa tarde, Felipe!

Eu alterei as informações da minha pergunta com os dados que você pediu.

Obrigado pela atenção.

Abs.

G
Solucao aceita

Obrigado a todos, mas conseguir resolver. A princípio era conflito de bibliotecas.

Criado 6 de maio de 2016
Ultima resposta 31 de mai. de 2016
Respostas 7
Participantes 3