2013-12-14 25 views
5
使用泽西当

我使用Jersy到develeop REST Web服务$ ErrorMessagesException,这是我简单的代码:错误在Java中

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

    } 

但是,当我平安从浏览器中的其他服务的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) 

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

这是我的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> 

我用的球衣1.8,JDK 1.7和App上的Tomcat 7.0上运行。如果需要,我可以提供更多信息。

回答

3

你的问题似乎是重复的,可能已被妥善解决。我前段时间也有同样的问题。 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以获取更多有用的提示。干杯!

0

从参考

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> 

添加依赖在新泽西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. 球衣常见。罐子
  3. 新泽西州的servlet容器-core.jar添加
  4. 球衣,servlet的container.jar
  5. 新泽西州的server.jar
3

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

代码兑现下面

路径有些类

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

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

和其他类

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

通过重命名任何@Path("/storage")问题的例子抓住损害你的工作进度。

0

还有一个用例,这将导致相同的异常,这打破了我的代码。 如果你写这样的资源:

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

以下数据类型,Character,会造成异常。