Google AppEngine JSONArrayProvider $ App无法实例化

时间:2012-06-03 00:15:14

标签: java google-app-engine jersey jackson

我正在运行Java REST Web服务Google AppEngine。它在我的本地Google Plugin for Eclipse开发服务器上运行良好。但是,在将其部署到AppEngine Cloud后,我收到以下错误,每4毫秒重复记录一次:

    com.sun.jersey.core.spi.component.ProviderFactory __getComponentProvider: The provider class, class com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General, could not be instantiated. Processing will continue but the class will not be utilized

这与以下问题相同:

Jersey error on Google App Engine

然而,解决方案到达那里并不适合我。解决方案是“添加jackson * .jar libs,问题就消失了。”我确实将所有的Jackson罐子添加为$ ECLIPSE_PROJECT_HOME / war / WEB-INF / lib / jackson-all-1.9.7.jar,但我仍然得到错误。我理解问题的本质(杰克逊没有被Jersey检测为提供者),但我觉得这个错误只在部署后才发生,而不是在开发中。

也许我会尝试新的2.0.0系列杰克逊......

我是否需要将指向Jackson的任何内容添加到我的$ ECLIPSE_PROJECT_HOME / war / WEB-INF / web.xml文件中?现在,我有:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
    <servlet>
        <servlet-name>jerseywebapp</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.pathways.openciss.rest.impl</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param> 
            <param-name>com.sun.jersey.config.property.classnames</param-name> 
            <param-value>org.codehaus.jackson.jaxrs.JacksonJsonProvider</param-value> 
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/resources/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>jerseywebapp</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>OpenCISS.html</welcome-file>
    </welcome-file-list>
</web-app>

我已经尝试过,有没有POJOMappingFeature和JacksonJsonProvider参数打开和关闭,无济于事......

提前感谢任何建议。

1 个答案:

答案 0 :(得分:4)

解决。我使用的杰克逊图书馆没有与泽西捆绑在一起。我删除了杰克逊的图书馆,刚安装了包含杰克逊的泽西档案:

http://maven.java.net/service/local/artifact/maven/redirect?r=releases&g=com.sun.jersey&a=jersey-archive&v=1.12&e=zip

...链接网站:

http://jersey.java.net/nonav/documentation/latest/chapter_deps.html

泽西档案(目前为1.12)效果很好。一旦我在其/lib文件夹中添加了所有的罐子,错误消失了,正如另一张海报所见。我不理解的是,应该使用泽西岛档案,而不是来自泽西岛和杰克逊网站的混合罐,因为泽西档案包含杰克逊罐子。