在Java中使用Jersey时出现错误$ ErrorMessagesException

时间:2013-12-14 01:22:20

标签: java rest jersey

我正在使用Jersy来开发REST webservices,这是我的简单代码:

@GET
@Path("/retrieveCustomerInformation/{jsonString}")
@Produces(MediaType.APPLICATION_JSON)
public String retrieveCustomerInformation(@PathParam("jsonString")JSONObject jsonObject) 
    throws Exception  {
      //Other codes here

    }

但是当我从浏览器ping其余的服务URL时,我得到的是异常:

javax.servlet.ServletException: Servlet.init() for servlet jersey-serlvet threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)

,根本原因是:

com.sun.jersey.spi.inject.Errors$ErrorMessagesException
com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)

有人可以指导我,导致此错误的原因是什么?我发现很难理解这个错误消息,因为它没有提供任何有用的信息来调试。

这是我的web.xml

<servlet>
    <servlet-name>jersey-serlvet</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>com.test/param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

我正在使用Jersey 1.8,JDK 1.7和App在Tomcat 7.0上运行。如果需要,我可以提供更多信息。

4 个答案:

答案 0 :(得分:3)

您的问题似乎是重复的,可能已得到适当解决。我前段时间也遇到过同样的问题。 Click here to see the accepted answer that resolved it for me

如果您不愿意关注该链接,请首先尝试将 jersey-multipart.jar mimepull.jar 添加到您的项目库中...如果您的项目是Maven项目,请将以下依赖项添加到pom.xmlmimepull依赖项应与其一起发布。的

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

<强>

请务必确保您使用的 jersey-multipart 版本与您的 jersey 版本相同'在项目中使用。

如果以上解决方案无法解决您的问题,您可能还希望看到 here 以获取更多有用的提示。干杯!

答案 1 :(得分:3)

检查是否存在冲突@Path注释。 这将导致相同的错误。传递路径问题是一个奇怪的错误,但您可以通过重命名匹配路径轻松测试它。

以下代码中兑现路径的示例

某些课程

@Path("/storage")
public class BookingRestService {

@GET
@Path("/bookings")
@Produces(value = MediaType.APPLICATION_XML)

和另一个班级

@Path("/storage")
public class StorageRestService {

通过重命名任何@Path("/storage")问题,会影响您的工作进度。

答案 2 :(得分:0)

从参考

添加依赖项

Jersey Application Deployment and Runtime Environments

中的

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.rest.portal</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.scanning.recursive</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>com.rest.portal.HelloWord</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

仅在Jersey 1.x中使用

<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

在2.x系列中使用

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

并添加必要的jersy jar文件

  1. ASM-5.0.2.jar
  2. 球衣-common.jar
  3. Jersey的servlet的容器​​core.jar添加
  4. Jersey的servlet的container.jar
  5. 球衣-的server.jar

答案 3 :(得分:0)

另一个用例,它会导致同样的异常,这会破坏我的代码。 如果您要编写这样的资源:

#include <list>
#include <iostream>

using namespace std; 

#define foreach(a,b,c,d) for(a; b; c)if(d)

int main(){
  list<int> a;

  for(int i=0; i<10; i++)
    a.push_back(i);

  for(auto i=a.begin(); i!=a.end(); i++)
    if((*i)&1)
      cout << *i << ' ';
  cout << endl;

  foreach(auto i=a.begin(), i!=a.end(), i++, (*i)&1)
    cout << *i << ' ';
  cout << endl;

  return 0;
}

以下数据类型public String getPOST(@QueryParam("type") Character type){} 将导致异常。