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

问题描述 投票:0回答:4

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

java rest jersey
4个回答
4
投票

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

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

部分课程

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

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

和另一个班级

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

通过重命名任何

@Path("/storage")
问题得到解决。


3
投票

您的问题似乎是重复的,可能已得到适当解决。前段时间我也有同样的问题。 单击此处查看为我解决问题的已接受答案

如果您不愿意点击链接,首先,尝试将

jersey-multipart.jar
mimepull.jar
添加到您的项目库中...如果您的项目是 Maven 项目,请添加以下依赖项到你的
pom.xml
mimepull
依赖项应随附。

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

请记住确保您使用的

jersey-multipart
版本与您在项目中使用的
jersey
版本相同。

以防万一上述解决方案无法解决您的问题,您可能还想在此处查看更多有用的提示。干杯!


0
投票

从引用中添加依赖

Jersey 应用程序部署和运行时环境

在你的 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. 球衣-common.jar
  3. 球衣-servlet-container-core.jar
  4. 球衣-servlet-container.jar
  5. 球衣服务器.jar

0
投票

另一个用例,导致相同的异常,破坏了我的代码。 如果你要这样写资源:

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

以下数据类型,

Character
,会引发异常

© www.soinside.com 2019 - 2024. All rights reserved.