例外:com.sun.jersey.spi.inject.Errors $ ErrorMessagesException

时间:2013-06-18 05:39:08

标签: java java-ee jersey

我正在使用Jersey API进行Web服务。我正在从客户端向服务器发送多部分数据。当Web服务开始执行时,我会遇到异常。

@POST
@Path("uploadphoto")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/plain")
public String uploadNotices(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) {
    String uploadedFileLocation = "d:/" + fileDetail.getFileName();
    // save it
    try {
        writeToFile(uploadedInputStream, uploadedFileLocation);
    } catch(Exception e) {
        return "no";
    }
    return "yes";
}

// save uploaded file to new location
private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws Exception {
    OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
    int read = 0;
    byte[] bytes = new byte[1024];

    out = new FileOutputStream(new File(uploadedFileLocation));
    while ((read = uploadedInputStream.read(bytes)) != -1) {
        out.write(bytes, 0, read);
    }
    out.flush();
    out.close();
}

堆栈跟踪:

SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
  SEVERE: Missing dependency for method public java.lang.String com.homebulletin.resources.NoticeResources.uploadNotices(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0
  SEVERE: Missing dependency for method public java.lang.String com.homebulletin.resources.NoticeResources.uploadNotices(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1
  SEVERE: Method, public java.lang.String com.homebulletin.resources.NoticeResources.uploadNotices(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.homebulletin.resources.NoticeResources, is not recognized as valid resource method.
Jun 18, 2013 10:55:17 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:760)
    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319)
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)

Jun 18, 2013 10:55:17 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet Home Bulletin
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:760)
    at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319)
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)

11 个答案:

答案 0 :(得分:21)

您的项目中似乎缺少几个罐子。尝试将这些添加到您的项目中:

  

jersey-multipart.jar

     

<强> mimepull.jar

如果您使用的是maven,则可以添加此依赖项:

<dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>1.8</version>
    </dependency>

如果需要,请更改jar的版本

还要确保您的泽西多部分jar的版本应与泽西束jar的版本相同

答案 1 :(得分:13)

忘记在方法名称之上添加@POST@Get也会导致此错误

答案 2 :(得分:5)

它遇到了同样的错误,因为具有相同路径名(字符串)的相同@Path注释。

@Path('samepath')   /// samepath cause Jersey Error at run time.
/* Method 1*/

@Path('samepath')
/* Method 2 */

答案 3 :(得分:3)

使用@FormParam(期望@POST@GET参数时,我看到完全相同的错误。

希望它会帮助某人,因为它不是非常直观的发现。

答案 4 :(得分:3)

  

com.sun.jersey.spi.inject.Errors $ ErrorMessagesException

当我有两个具有相同路径但查询参数不同的@GET方法时发生。

如果重命名控制器类,可能会发生mvn install没有mvn clean并将war文件放到/webapps文件夹中。

答案 5 :(得分:1)

使用以下代码替换web.xml

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>  org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

答案 6 :(得分:0)

我遇到了这个问题,因为我的课程中没有参数构造函数

@Path("/deviceconfigs")
public class DeviceConfigInterface extends ComInterfaceGen<DeviceConfigApi> {
    public DeviceConfigInterface(Class<DeviceConfigApi> type) {
        super(DeviceConfigApi.class);
    }
}.

当我没有使用参数构造函数时,问题就解决了。

答案 7 :(得分:0)

我遇到了类似的问题,因为我错过了为POST方法添加“Consumes”注释。希望它可以帮到某人。

答案 8 :(得分:0)

我知道要晚了。但是,请在此处进行更新以供将来参考。 最好检查一下jar版本。 我遇到过同样的问题。我使用的是1.16版的jersey核心和服务器,但是我添加了1.18版。它给出了相同的错误。但是后来我意识到并更改为1.16,然后运行良好。

它不适用于其他版本。

答案 9 :(得分:0)

因此,有多种潜在原因,仅提及最常见的原因

  • 您缺少一些JAR文件
  • 您有多个具有相同@Path注释和相同HTTP方法(即具有不同参数或查询参数)的java方法
  • 您有一个Web服务方法,该方法的响应或请求参数类型无效(例如,注释类作为参数类或其他怪异的东西)

答案 10 :(得分:0)

有时候,您在GET方法中指定了@FormDataParam而不是@QueryParam,在我看来,这就是问题所在。