3

JAX-RS 1.12 で開発され、Tomcat 7 で実行されている既存の Web アプリケーションをアップグレードするプロジェクトに取り組んでいます。現在、JAX-RS2.0 にアップグレードしています。Tomcat サーバーの起動中にリソースがロードされませんか?

以下、詳細です。JAX-RS 2.0 用に以下の jar を追加

jersey-client-2.0-m07-1 jersey-common-2.0-m07-1 jersey-container-servlet-2.0-m07-1 jersey-container-servlet-core-2.0-m07-1 jersey-server-2.0-m07- 1 javax.ws.rs-api-2.0-m10 osgi-resource-locator-1.0.1 javax.inject-2.1.28 javax.inject-1 hk2-utils-2.1.28 hk2-locator-2.1.28 hk2-api -2.1.28 guava-13.0 cglib-2.1.28 asm-all-repackaged-2.1.28

Web.xml 内

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>ConfigLiteJersey2</display-name>

<!-- Jersey Servlet to Support JAXRS Services -->
<servlet>
    <servlet-name>ConfigLiteServices</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>        
     <init-param>
        <param-name>javax.ws.rs.core.Application</param-name>
        <param-value>com.cisco.config.resource</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
     <servlet-mapping>
    <servlet-name>ConfigLiteServices</servlet-name>
    <url-pattern>/config/*</url-pattern>
</servlet-mapping>

マイ リソース ファイル

@Path("/configset")
public class ConfigSetResource {   
    @POST
@Path("/id{configsetid: (/[^/]+?)?}")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public ConfigSetResponse getConfigSet(@PathParam("configsetid") String sConfigSetId)    throws    Exception {
     //Code
    }
    }

以下の URL ipaddress:8080/ConfigLiteJersey2/config/configset/id を使用してリソース API にアクセスしようとしています

HTTP ステータス 404 の取得 見つかりません。

web.xml で正しい servletclass マッピングを指定していないようです。これについてあなたの考えを共有してください

4

4 に答える 4

2

Jersey にパッケージのリソースをスキャンさせたい場合は、param-name を次のように変更します。

<param-name>jersey.config.server.provider.packages</param-name>
于 2013-05-02T05:56:27.060 に答える
0

長いGoogle検索の後、私はこのように私のものを設定し、完全に機能しました

build.gradle は次のようになります

compile 'log4j:log4j:1.2.7'
compile 'org.slf4j:slf4j-log4j12:1.6.6'
compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.6'

ApplicationConfig.java ファイルは次のようになります。

@ApplicationPath("/app")
public class ApplicationConfig extends ResourceConfig {

    public ApplicationConfig() {
        packages("com.flexisaf.resources");

    }
}

web.xml ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!-- Default page to serve -->

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <display-name>SAFHRMS</display-name>
    <servlet>
        <servlet-name>com.flexisaf.safhrms.client.config.ApplicationConfig</servlet-name>

        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>com.flexisaf.safhrms.client.config.ApplicationConfig</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>safhrms.jsp</welcome-file>
    </welcome-file-list>

</web-app>

これは私の問題を解決します..ありがとう

于 2015-07-02T13:02:38.903 に答える
0

サーブレット バージョン 3.0 を使用している場合は、こちらの jersey マニュアルの例に従うことをお勧めします: https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3.descriptor

org.foo.rest.ConfigLiteApplication など、javax.ws.rs.core.Application を実装するクラスを作成します。次に、web.xml を次のようにします (例に合わせて、ジャージのページを少し変更します)。

<web-app>
    <servlet>
        <servlet-name>org.foo.rest.ConfigLiteApplication</servlet-name>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>org.foo.rest.ConfigLiteApplication</servlet-name>
        <url-pattern>/config/*</url-pattern>
    </servlet-mapping>
</web-app>

これは JAX-RS 1.1 と JAX-RS 2.0 の両方で機能し、ジャージー クラスに名前を付ける必要がないため、ジャージー バージョンに依存しないはずです。ConfigLiteApplication クラスは、含めるリソースをロードする必要があります。たとえば、http://tomee.apache.org/examples-trunk/rest-example-with-application/README.htmlから適合させます。

@ApplicationPath("/config")
public class ConfigLiteApplication extends Application {
    public Set<Class<?>> getClasses() {
        return new HashSet<Class<?>>(Arrays.asList(ConfigSetResource.class));
    }
}

最新の IDE では、このクラスを管理できる可能性があります。

また、私があなただったら、/id で一致させたい場合は、この正規表現の一致を注意深く確認します。

@Path("/id{configsetid: (/[^/]+?)?}")

これを複数の関数に分割するか、この種の正規表現を回避するために作業することを検討します。例えば

@POST
@Path("/id")
public ConfigSetResponse getConfigSet() {
     return this.getConfigSet(null);
}
@POST
@Path("/id/{configsetid}")
public ConfigSetResponse getConfigSet(@PathParam("configsetid") String sConfigSetId) {
     //Code
}
于 2014-10-28T07:40:21.310 に答える