0

小さなjax-rsデモを作成しようとしています。

私はこのリソースクラスを持っています:

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

    @EJB
    private ShoppingCartService shoppingCartService;

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

このクラスは、jboss 7.1.3 の /deployments ディレクトリに配置した ear-1.0-SNAPSHOT.ear という *.ear 内にある、rest-1.0-SNAPSHOT.war という *.war 内にパックされています。

私の 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(耳の中)はmavenによって自動生成されます:

<?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"

しかし、どのURLを試しても、このリソースにアクセスできません。私はもう試した:

  1. ローカルホスト:8080/rest/cart
  2. ローカルホスト:8080/ear-1.0-SNAPSHOT/rest/cart

リソースがバインドされている場所、または実際にバインドされていない場合、何が間違っているのですか?

4

2 に答える 2

1

どうやら jax-rs docs hereで説明されているように、サーブレット/フィルターマッピングなしで jax-rs リソースをデプロイする合法的な (仕様に準拠した) 方法があるようです(セクションには as7 と記載されていますが、実際には Java EE 6 準拠の AS に適用されます)。

解決策は、空の web.xml を用意してから、次の注釈が付けられた Application クラスを含めること@ApplicationPathです。

@ApplicationPath("/root-path")
public class MyApplication extends Application
{
}
于 2013-06-16T06:16:17.350 に答える
0

JAX-RS アプリケーションでは、残りの呼び出しを管理するサーブレットを適切に設定するために、 web.xmlに構成セクションが必要です。次のように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>

サーブレットセクションの init パラメータには、残りのクラスを含むパッケージを含める必要があります。url-patternパラメータは、好みの URL プレフィックスに変更できます。

于 2013-05-14T09:12:04.567 に答える