2013-12-14 27 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,會造成異常。