【问题标题】:Errors$ErrorMessagesException when using Jersey in Java在 Java 中使用 Jersey 时出现 Errors$ErrorMessagesException
【发布时间】:2013-12-14 01:22:19
【问题描述】:

我正在使用 Jersy 开发 REST Web 服务,这是我的简单代码:

@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 并且应用程序在 Tomcat 7.0 上运行。如果需要,我可以提供更多信息。

【问题讨论】:

    标签: java rest jersey


    【解决方案1】:

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

    如果您不愿意点击链接,首先,请尝试将 jersey-multipart.jarmimepull.jar 添加到您的项目库中...并且如果您的项目是 Maven 项目,请将以下依赖项添加到您的 pom.xmlmimepull 依赖项应该随它一起提供。

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

    记得确保您使用的 jersey-multipart 版本与您使用的 jersey 版本相同项目。

    万一上述解决方案不能解决您的问题,您可能还想查看 here 以获取更多有用的提示。干杯!

    【讨论】:

      【解决方案2】:

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

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

      某类

      @Path("/storage")
      public class BookingRestService {
      
      @GET
      @Path("/bookings")
      @Produces(value = MediaType.APPLICATION_XML)
      

      和另一个班级

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

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

      【讨论】:

        【解决方案3】:

        从引用中添加依赖

        Jersey Application Deployment and Runtime Environments

        在您的 web.xml 中

        <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. jersey-common.jar
        3. jersey-servlet-container-core.jar
        4. jersey-servlet-container.jar
        5. jersey-server.jar

        【讨论】:

          【解决方案4】:

          还有一个用例,它会导致同样的异常,从而破坏了我的代码。 如果你要这样写资源:

          public String getPOST(@QueryParam("type") Character type){}
          

          以下数据类型Character 将导致异常。

          【讨论】:

            猜你喜欢
            • 2016-04-09
            • 1970-01-01
            • 2015-04-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-17
            相关资源
            最近更新 更多