Java 使用抛弃将JSON Twitter答案映射到Jaxb的帮助

Java 使用抛弃将JSON Twitter答案映射到Jaxb的帮助,java,json,jaxb,resteasy,jettison,Java,Json,Jaxb,Resteasy,Jettison,我对使用JSON格式操作有点陌生,在JAXB中也不是很熟悉。 我试图做的是构建一个小客户端,在Twitter上启动搜索。我的起始框架是JBoss RESTEasy(JAX-RS实现),它通过抛弃框架将JSON映射到JAXB,提供了一种使用Rest服务JSON服务的优雅方式(如果您想提供Rest服务并从JAXB生成JSON,它也可以以另一种方式工作) 因此,我向Twitter发出了一个简单的请求: http://search.twitter.com/search.json?q=java 答案是以

我对使用JSON格式操作有点陌生,在JAXB中也不是很熟悉。 我试图做的是构建一个小客户端,在Twitter上启动搜索。我的起始框架是JBoss RESTEasy(JAX-RS实现),它通过抛弃框架将JSON映射到JAXB,提供了一种使用Rest服务JSON服务的优雅方式(如果您想提供Rest服务并从JAXB生成JSON,它也可以以另一种方式工作)

因此,我向Twitter发出了一个简单的请求:

http://search.twitter.com/search.json?q=java
答案是以下JSON格式

{
"results":
[
  {"from_user_id_str":"67875385",
  "profile_image_url":"http://a2.twimg.com/axt_normal.png",
  "created_at":"Sun, 28 Nov 2010 22:38:39 +0000",
  "from_user":"extant",
  "id_str":"9013327095136256",
  "metadata":{"result_type":"recent"},
  "to_user_id":null,
  "text": "New blog post: No fancy swap in java",
  "id":9013327095136256,
  "from_user_id":67875385,
  "geo":null,
  "iso_language_code":"en",
  "to_user_id_str":null,
  "source":"wordpress"
  }, 
  <more tweets...>
],
"max_id":9013327095136256,
"since_id":0,
"refresh_url":"?since_id=9013327095136256&q=java",
"next_page":"?page=2&max_id=9013327095136256&q=java",
"results_per_page":15,
"page":1,"completed_in":0.020154,
"since_id_str":"0",
"max_id_str":"9013327095136256",
"query":"java"
} 
我的Twitter RESTEasy客户端是一个简单的界面

public interface TwitterResource {
 @Path("/search.json")
 @Consumes("application/*+json")
 @GET
 SearchResults search(@QueryParam("q")String query); 
}
可通过以下RESTEasy代码利用此漏洞:

...
TwitterResource tr = ProxyFactory.create(TwitterResource.class, "http://search.twitter.com");
SearchResults sr = tr.search("java");
...
此代码给出以下例外情况:

Exception in thread "main" org.jboss.resteasy.plugins.providers.jaxb.JAXBUnmarshalException: javax.xml.bind.JAXBException
 - with linked exception:
[org.codehaus.jettison.json.JSONException: JSONObject["results"] is not a JSONObject.]
 at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.readFrom(AbstractJAXBProvider.java:86)
我假设它来自SearchResults类上错误的JAXB映射,但不知道如何更正它(而且JSON到XML的转换非常复杂)。任何能纠正它的线索都很好


提前感谢

好的,抛弃(我确信这是一个bug)和JSON的JAXB映射没有找到解决方案。但是由于RESTEasy支持Jackson框架,我切换到Jackson,现在一切都好了

事实上,我发现我的第一个解决方案是使用更干净的方法来避免JSON到JAXB的转换


谢谢我自己;-)

是的,这是做JSON的一个相当常见的“生命周期”——抛弃是一个古老的库,当通过XML API处理JSON(在某种程度上)是有意义的时候编写的。但此后发生了很多事情;唉,鉴于这段历史,大多数教程都从抛弃(或xstream+抛弃)方法开始,然后才介绍Jackson方法
...
TwitterResource tr = ProxyFactory.create(TwitterResource.class, "http://search.twitter.com");
SearchResults sr = tr.search("java");
...
Exception in thread "main" org.jboss.resteasy.plugins.providers.jaxb.JAXBUnmarshalException: javax.xml.bind.JAXBException
 - with linked exception:
[org.codehaus.jettison.json.JSONException: JSONObject["results"] is not a JSONObject.]
 at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.readFrom(AbstractJAXBProvider.java:86)