Google App Engine中基于泽西岛的REST服务 - 如何设置项目?

时间:2013-02-08 09:42:57

标签: eclipse google-app-engine jersey

有没有人使用POJO Mapping到JSON,让Google在Google AppEngine上工作? 我现在花了几个小时才开始工作,但我坚持了下来 两个地方。在Jetty本地运行我比在那里更进一步 AppEngine,但我也不在那里。以下是我遇到的两个问题 遇到:

本地

Jetty产生以下错误:

SEVERE: A message body writer for Java class
nilsnett.chinese.backend.BusinessObject, and Java type class
nilsnett.chinese.backend.BusinessObject, and MIME media type
application/json was not found

nilsnett.chinese.backend.BusinessObject是我创建的普通Java类 看起来像这样:

package nilsnett.chinese.backend;
import javax.xml.bind.annotation.XmlRootElement;
public class BusinessObject {
    public String text;
    public int value;
}

这里有什么问题?

在AppEngine

Uncaught exception from servlet java.lang.IncompatibleClassChangeError

现在我在本地也遇到了这个错误,这与我的事实有关 引用asm-3.3.1.jar(泽西岛所依赖的)和asm-4.0.jar, which AppEngine depends on. If I _only_ referenced asm-4.0.jar`本地,我 会在这里得到同样的错误。引用两者显然不能很好地工作 在AppEngine。我怎么能绕过这个?

更多数据

SDK引用:

  • AppEngine v1.7.4
  • Java SE 1.6

Jar与泽西岛相关:

  • 泽西束-1.17.jar
  • Asm-3.3.1.jar
  • 抛弃-1.1jar

我正在使用Windows 8上的Eclipse Juno进行开发。

2 个答案:

答案 0 :(得分:1)

您正在导入XmlRootElement注释但未使用它。您应该在课前添加@XmlRootElement

至于第二个问题 - 你看过: java.lang.IncompatibleClassChangeError: Implementing class deploying to app engine

答案 1 :(得分:0)

本地的第一个问题是由于缺少.jar文件。我误读了Jersey documentation,认为我只需要章节11.1 Core Server11.4.3 JSON中列出的文件:

  • jettison-1.1.jar
  • 球衣束-1.17.jar
  • ASM-3.3.1.jar

原来我还需要JAXB下列出的jar:

  • 杰克逊 - 芯 - asl.jar
  • 杰克逊映射器-asl.jar
  • 杰克逊jaxrs.jar
  • jettison.jar
  • JAXB-impl.jar中
  • JAXB-api.jar文件
  • 的activation.jar
  • STAX-api.jar文件

我被Glassfish中运行时没有引用最后一个jar的设置工作的事实所迷惑,但那是因为这个jar与Glassfish捆绑在一起。 Jetty不是这样。