2013-05-14 55 views
0

即時通訊嘗試掀起一個小型jax-rs演示。演示jax-rs資源未綁定在jboss上的預期位置

我有這個資源類:

@Path("/cart") 
public class ShoppingCartResource { 

    @EJB 
    private ShoppingCartService shoppingCartService; 

    @GET 
    public String getCart() { 
     ShoppingCart cart = shoppingCartService.getCart(); 
     return "cart with "+cart.getProducts().size()+" items"; 
    } 
} 

這個類是擠滿稱爲休息-1.0-SNAPSHOT.war A *的.war裏面,本身被稱爲耳-1.0-SNAPSHOT.ear的*的.ear內部的我置於的JBoss /部署目錄7.1.3

我的web.xml是空的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 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" 
     version="3.0"> 
</web-app> 

和我的application.xml(在耳)由行家自動生成:

<?xml version="1.0" encoding="UTF-8"?> 
<application 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/application_6.xsd" version="6"> 
    <display-name>ear</display-name> 
    <module> 
    <ejb>services-impl-1.0-SNAPSHOT.jar</ejb> 
    </module> 
    <module> 
    <web> 
     <web-uri>rest-1.0-SNAPSHOT.war</web-uri> 
     <context-root>/rest</context-root> 
    </web> 
    </module> 
    <library-directory>lib</library-directory> 
</application> 

當我啓動的JBoss公司從日誌拿起我的戰爭,因爲顯而易見的:

09:52:19,392 INFO [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /rest 
09:52:19,401 INFO [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "ear-1.0-SNAPSHOT.ear" 

,但我不能不管我什麼網址打這個資源。 我已經試過:

  1. 本地主機:8080/REST /車
  2. 本地主機:8080 /耳-1.0-SNAPSHOT/REST /車

和我不斷收到404 在哪裏資源約束,或者如果它沒有真正的約束,我做錯了什麼?

回答

1

顯然,如jax-rs文檔here(該節所述as7,但它實際上適用於任何Java EE 6中描述的那樣,在沒有servlet/filter映射的情況下部署jax-rs資源的合法方法符合AS)。

的解決辦法是有一個空的web.xml文件,然後包括與@ApplicationPath註釋的應用程序類:

@ApplicationPath("/root-path") 
public class MyApplication extends Application 
{ 
} 
0

JAX-RS應用程序需要web.xml中的配置部分來正確設置管理其餘調用的servlet。 在的web.xml這樣創建一個部分:

<servlet> 
    <servlet-name>JerseyRestService</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>...</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>JerseyRestService</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

的servlet節中的初始化參數應包括含有其他類的包。 url-pattern參數可以更改爲您的首選網址前綴。

+0

沒有實現無關的方式做到這一點?我真的不喜歡根據球衣或反彈的想法 – radai 2013-05-14 10:00:52

+0

有沒有辦法,AFAIK。 – remigio 2013-05-14 10:05:21

+0

經過一番挖掘,我發現了一個 - Application類中的@ApplicationPath +空web.xml – radai 2013-06-16 06:17:39