2013-02-22 65 views
1

我在Tomcat 7.0上測試了一個使用Jersey和Servlet 3.0實現的非常簡單的REST服務器。我已設定一個簡單的POJO:澤西運行在Servlet 3.0/Tomcat 7.0上的簡單REST服務沒有運行,但http狀態爲500

package toplevel; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Path("/pojo") 
public class PoJo { 

    @GET 
    @Produces("text/plain") 
    public String hello() { 

     return "Hello, World"; 
    } 
} 

我已經把在WEB-INF/web.xml文件如下(上的Servlet 3.0上運行):

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

<display-name>RestTest</display-name>  

    <servlet> 
    <servlet-name>toplevel.PoJo</servlet-name> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>toplevel.PoJo</servlet-name> 
    <url-pattern>/pojo</url-pattern> 
    </servlet-mapping> 

</web-app> 

當我部署,我得到一個HTTP狀態500響應。在我看來,網絡服務器認識到應該從/ pojo提供某些東西,但是沒有找到相應的類PoJo。球衣特定的罐子(版本1.17)在WEB-INF/lib目錄中:

activation-1.1.1.jar jersey-client-1.17.jar junit-4.9.jar 
asm-3.3.1.jar   jersey-core-1.17.jar persistence-api-1.0.2.jar 
jaxb-api-2.2.4.jar  jersey-server-1.17.jar stax-api-1.0-2.jar 
jaxb-impl-2.2.4-1.jar jsr311-api-1.1.1.jar 

有沒有人認識到這一點?

+2

500肯定會有一些細節? (以防萬一:不要在IE中測試,該瀏覽器可能會隱藏有用的消息。) – Arjan 2013-02-22 19:03:11

+0

感謝您的迴應。是啊...類型例外報告 消息 說明服務器遇到內部錯誤,導致無法完成此請求。 例外 顯示java.lang.NullPointerException \t sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301) \t java.lang.ClassLoader.loadClass(ClassLoader.java:356) \t org.apache。 catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1629) \t org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) \t org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase。 java:461) – 2013-02-22 19:41:54

回答

1

您需要告訴澤西島哪裏可以找到您的REST資源。你的web.xml應該是這樣的:

<servlet> 
    <servlet-name>Service</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>toplevel</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
+0

感謝您的快速響應,但我相信這是不正確的,因爲我使用Servlet 3.0和Jersey 1.17。參見**例2.11 **。在http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e188 – 2013-02-22 19:35:49

+1

上使用帶有Servlet 3.0的web.xml部署JAX-RS應用程序是的 - 但在示例中,資源擴展了Application '。你的資源沒有。 – condit 2013-02-22 19:43:13

+0

嗯.... PoJo不需要擴展應用程序。您所指的文件用於在不使用'web.xml'的情況下部署.... – 2013-02-22 19:49:27

0

添加jersey-servlet:1.17.jar照顧了我這個問題。

相關問題