web-dev-qa-db-ja.com

REST JAX-RS javax.ws.rs.ProcessingException:

RESTクライアントコードがREST以下のコードを使用してサービスを呼び出す:コード:

public void putWatcher(Watcher watcher)
    {
        System.out.println("In REST Client putWatcher.***********");

        target = target.path(RESOURCE_WATCHERS).path(watcher.getWatcheruri());
        System.out.println(target.getUri());
        Invocation.Builder builder = target.request();
        builder.put(Entity.json(watcher));
//      Response response = target.request().put(Entity.json(watcher));
        System.out.println("Returned from REST Call");
    }

例外:

: javax.ws.rs.ProcessingException: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family;
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.Java:255)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.Java:667)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.Java:664)
    at org.glassfish.jersey.internal.Errors.process(Errors.Java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.Java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.Java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.Java:424)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.Java:664)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.Java:424)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.put(JerseyInvocation.Java:318)

Caused by: Java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family;
    at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.Java:63)
    at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.Java:54)
    at org.glassfish.jersey.message.internal.Statuses.from(Statuses.Java:93)
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.Java:323)
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.Java:227)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.Java:246)
    ... 29 more

私のRESTサービスはTomcat 8サーバーにデプロイされ、クライアントコードはJBoss 7.2にデプロイされますクライアントアプリケーションは、RESTクライアントもバンドルするSIP-Servletsアプリケーションです。

スタンドアロンとしてクライアントをテストするとJavaアプリケーションは機能しますが、JBossにデプロイするとエラーが発生します。私のPOMファイルは:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>
<!-- logging dependency -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging-api</artifactId>
    <version>1.0.4</version>
    <scope>provided</scope>
</dependency>
<!-- web j2ee dependencies -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<!-- sip dependencies -->
<dependency>
    <groupId>org.mobicents.servlet.sip</groupId>
    <artifactId>sip-servlets-spec</artifactId>
    <version>1.7.0.FINAL</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.13</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.13</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.13</version>
</dependency>

私はまた、このリンクで提案されているようにやろうとします https://github.com/gondor/openstack4j/issues/ JBOSS構成standalone.xmlからJAX-RSを無効にするように言っています。サーバーの起動時にstandalone-sip.xmlを使用しているので、それだけを変更しました。次の2行を削除しました:

<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
<extension module="org.jboss.as.jaxrs"/>

これも機能していません。無効にする方法がわかりません。JAX-RSを検索して、見つかった行を削除しました。

1つのSO投稿では、javax.ws.rs.core.Response responeの代わりにResponse responseを使用する提案がありましたが、それも試したが運が悪かった。

もう1つの情報:REST呼び出し自体が成功し、Tomcatサーバーで確認できます。

他に何ができるか提案してください。

ありがとう

10
user3275095

最近この問題にぶつかった。 javax.ws.rs.coreの古い実装を提供するライブラリが原因でした。私はそれを次のように修正しました:

    <dependency>
        <groupId>org.Apache.axis2</groupId>
        <artifactId>axis2-jaxws</artifactId>
        <version>1.6.2</version>
        <scope>runtime</scope>
        <exclusions>
            <!-- Causes Java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; -->
            <exclusion>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
8
user1202136

あなたのJBossインスタンスのライブラリカタログを見て、JAX-WSのすべての実装を削除できますか?私には、WARファイルにバンドルされているJerseyと競合しているようです。

編集:

実際、サーバーとWebアプリケーションの間のJAX-WSバージョンの競合を解決する必要があると思います。メソッドfamilyOfで不足していますResponse.Status.Familyが導入されました Java 7 ですが Java EE 6 にはありません。 Java EE 6互換のJerseyバージョンを見つけるか、サーバーをアップグレードしてください。

そして、後でMavenが問題を引き起こす場合、実際のキックについては、

mvn dependency:tree

そして

<dependency>
...
        <exclusions>
            <exclusion>...</exclusion>
3