8

JBoss 7.1.1 で RestEasy の JSON プロバイダーを設定するにはどうすればよいですか?

RestEasy のドキュメントには次のように記載されています。

RESTEasy を使用すると、JAXB アノテーション付き POJO を JSON との間でマーシャリングできます。このプロバイダーは、これを実現するために Jettison JSON ライブラリをラップします。

しかし、JBoss 7.1.1 では、クラス フィールドの @XmlTransient が無視され、@JsonIgnore が処理されたため、Resteasy は Jackson プロバイダーを使用しているように見えることがわかりました。

Resteasy に Jackson の代わりに Jettison を使用するように指示するにはどうすればよいですか?

Jboss で両方のプロバイダーを見つけました。

4

4 に答える 4

3

標準とは異なるモジュールをプルしたいだけの場合は、jboss 固有のデプロイメント記述子でこれを提供できます。

詳細については、https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7を参照してください。また、 https ://docs.jboss.org/author/display/AS7/Implicit+module を参照してください。 +dependencies+for+deploymentsを参照して、JBoss がデフォルトで使用するモジュールを確認してください。

2 つのプロバイダーを交換するにMETA-INF/jboss-deployment-structure.xmlは、以下の内容を に提供します。

これにより、プロバイダーが切り替わりました。

Br アレクサンダー。

<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.jboss.resteasy.resteasy-jackson-provider" />
    </exclusions>
    <dependencies>
      <module name="org.jboss.resteasy.resteasy-jettison-provider" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>
于 2012-11-23T17:09:04.800 に答える
2

ahus1の回答の続きとして: 複数レベルのデプロイメント アーカイブ (つまり、EJB jar と war ファイルを含む最上位の EAR ファイル) がある場合は、org.jboss.resteasy.resteasy-jackson-providerサブのいずれかの除外を構成する必要があります。デプロイメントには、RESTEasy/JAX-RS コンポーネントが含まれています。

たとえば、私のデプロイメントでは、EJB jar ファイル内の EJB の上に REST エンドポイントにアノテーションが付けられていましたが、RESTEasy をアクティブ化する@ApplicationPath-annotatedjavax.ws.rs.core.Applicationサブクラスは war ファイルにありました。トップレベル (EAR) デプロイメント (ahus1 の例のように) または EJB jar レベルのデプロイメントのみに除外を適用するアプローチは効果がないことがわかりましたが、最終的に RESTEasy で Jackson ではなく Jettison を使用するようになりました。 3 つのレベルすべて (EAR、EJB、Web) での除外:

<?xml version="1.0" encoding="UTF-8" ?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jettison-provider" />
        </dependencies>
    </deployment>
    <sub-deployment name="MyApp-ejb.jar">
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jettison-provider" />
        </dependencies>
    </sub-deployment>
    <sub-deployment name="MyApp.war">
        <exclusions>
            <module name="org.jboss.resteasy.resteasy-jackson-provider" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.resteasy.resteasy-jettison-provider" />
        </dependencies>
    </sub-deployment>
</jboss-deployment-structure>

サブデプロイメントの除外だけが必要だった可能性が非常に高く、それをメインの EAR デプロイメントに配置するのは不必要です。今のところ、3つすべてにそれを適用すると完全にうまくいくように見えるので、私はそのようにはしませんでした.

于 2013-03-12T21:46:33.770 に答える
1

私が今観察したところ、Jackson は JBoss AS 7.1.2 のデフォルトです。

まず、RestEasy モジュールはアプリのクラスローダーから隠されていますが、これは IMO であってはなりません。だから私はちょうどhttps://issues.jboss.org/browse/AS7-5605を提出しました。

第二に、あなたの質問に: 特定のプロバイダーを設定するには、AS のクラスローダーの場所からそれを削除する必要があります。もう一度、module.xml使用したくないプロバイダーをコメントアウトします。Jackson が利用可能な場合は、RestEasyそれを使用します。それ以外の場合は、Jettison を使用します。

また、それらをコンパイル時の依存関係としてプロジェクトに追加して、特定の注釈を使用できるようにします。例:

    <!-- RestEasy -->
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>jaxrs-api</artifactId>
        <version>2.3.4.Final</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.2</version>
        <scope>provided</scope>
    </dependency>

注: AS7-5605 が完了するまでは、バージョンを手動で設定する必要があります。その後 (AS の新しいバージョンでは)、これらのバージョンを削除し、JBoss BOM で定義されたバージョンを使用する必要があります。たとえば、 JBoss AS QuickStartsを参照してください。

代替プロバイダーを使用して、RestEasy の QuickStart を自由に作成して投稿してください。

于 2012-09-22T10:34:06.037 に答える
0

この行をstandalone.conf.bat/shに追加すると、問題が解決しました。

「JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true」を設定します

于 2013-08-16T13:55:26.927 に答える