Error ao enviar objeto formato json para VRaptor

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$_$$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$
$$_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

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

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

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 ?

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

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

Boa tarde, Felipe!

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

Obrigado pela atenção.

Abs.

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