Jersey Multipart 1.13和Glassfish 2.1.1看起来不兼容



在Glassfish 2.1.1服务器上使用Jersey Multipart 1.13部署war时,会出现以下错误消息:

方法,公共javax.ws.rs.core.Response no.xx.nn.resources.ConverterResources.post(java.lang.String,java.lang.String,java.io.InputStream),标注了资源的POST,类oo.xx.nn.resources。ConverterResources,不能被识别为带有@HttpMethod注释的有效Java方法。com.sun.jersey.server.impl.model.method.ResourceHttpMethod.(ResourceHttpMethod.java:69) at com.sun.jersey.server.impl.model.method.ResourceHttpMethod.(ResourceHttpMethod.java:61) at com.sun.jersey.server.impl.model.ResourceClass. processmethods (ResourceClass.java:283) at com.sun.jersey.server.impl.model.ResourceClass.(ResourceClass.java:131)

通过尝试和失败,我发现这属于以下代码:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response post(@FormDataParam("providerId") int providerId,
                     @FormDataParam("datasetId") int datasetid,
                     @FormDataParam("file") InputStream file)

更具体地说,是@FormDataParam参数注释。当移除这些元素时,战争便能够顺利展开。我试过将@DefaultValue添加到所有的@FormDataParam中,但没有任何运气。此外,我还尝试添加@Produces,也没有任何运气。这个错误似乎与当前的@Consumes(..)也没有任何关系。

我的web.xml看起来很标准:

<servlet>
    <servlet-name>xxxx</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>oo.xx.nn.resources</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>xxxx</servlet-name>
    <url-pattern>/zzzz/*</url-pattern>
</servlet-mapping>

我已经包含了所有必需的Jersey依赖项,如下所示:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.13</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.13</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-multipart</artifactId>
    <version>1.13</version>
</dependency>

我也试过从IDEA部署到Tomcat6和Glassfish 3.1.1,这工作得很好。可以在本地和远程Java 7上运行(在远程Java 7上无法运行)。什么好主意吗?

我知道了。Glassfish与旧的Jersey依赖捆绑在一起,所以我不得不给JVM一个参数,迫使它给我的应用一些空间,并提供自己的依赖版本。此外,我还提供了sun-web.xml。

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

相关内容

  • 没有找到相关文章

最新更新