0

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

方法,公共 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:92) 在 com.sun.jersey.server.impl.model.method.ResourceHttpMethod.(ResourceHttpMethod.java:69) 在 com .sun.jersey.server.impl.model.method.ResourceHttpMethod.(ResourceHttpMethod.java:61) 在 com.sun.jersey.server.impl.model.ResourceClass.processMethods(ResourceClass.java:283) 在 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到所有 s 中。@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 上运行(它不起作用)。有任何想法吗?

4

1 回答 1

0

好的,所以我发现了。Glassfish 与旧的 Jersey 依赖项捆绑在一起,因此我必须提供一个 JVM 参数来强制它给我的应用程序一些空间并提供自己的依赖项版本。另外我提供了一个 sun-web.xml。

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

于 2013-03-20T19:31:17.107 回答