4

次の質問では、Jersey と JAX-RS 仕様の間の依存関係の理論について説明します。

依存関係を追加できると想定していました:

  <!--  javax.ws.rs.core e.g. Request -->
  <dependency>
     <groupId>javax.ws.rs</groupId>
     <artifactId>jsr311-api</artifactId>
     <version>1.0</version>
  </dependency>

私のAPI定義mavenプロジェクトに追加し、実装にJersey/Grizzlyを使用します。

    <jersey.version>1.15</jersey.version>
    <grizzly.version>2.2.20</grizzly.version>       

この仮定に反して、次のエラー メッセージが表示されました。

15.02.2013 08:41:25 org.glassfish.grizzly.http.server.HttpServerFilter handleRead
WARNUNG: Unexpected error
java.lang.IncompatibleClassChangeError: Class javax.ws.rs.core.Response$Status does not implement the requested interface javax.ws.rs.core.Response$StatusType
    at com.sun.jersey.spi.container.ContainerResponse.getStatus(ContainerResponse.java:571)

Jersey 1.15で使用すべき正しいJAX-RS API依存関係は何ですか?

実装を他の JAX-RS 準拠のライブラリに置き換えることができるようにしたいと考えています。

4

2 に答える 2

5

問題は、JSR 311 API の依存関係がバージョン 1.0 であるのに対し、Jersey 1.15 は JSR 311 バージョン 1.1 の実装であることです。http://jsr311.java.net/nonav/releases/1.0/javax/ws/rs/core/Response.Status.htmlhttp://jsr311.java.net/nonav/releases/1.1/javax/wsを比較してください/rs/core/Response.Status.htmlを確認すると、後者はResponseTypeインターフェースを実装しているのに、前者は実装していないことがわかります。

次のように宣言することで、ビルド時のクラスパスに JSR 311 バージョン 1.1.1 API クラス ファイルを配置できるはずです。

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
    <scope>provided</scope>
</dependency>

実際、jersey-corepom.xmlはすでにこれを行っています。上記はhttp://repo1.maven.org/maven2/com/sun/jersey/jersey-core/1.15/jersey-core-1.15.pomの最初の依存関係です。 .

Glassfish のようなコンテナーでは、コンテナーは実行時に API クラスを提供する責任があるため、これで完了です (これが、ジャージー独自の Maven POM のスコープがprovidedではなくである理由compileです)。ただし、Grizzly Web コンテナーの場合、実行時に API クラスが使用可能であることを確認する必要がある可能性があります (<dependency>上記の宣言を使用しますが、<scope>からprovidedに変更するcompileとこれが実行されます)。

于 2013-02-17T00:23:10.160 に答える
-1

単純に jersey を使用する場合は、次のような標準の注釈でコードに注釈を付けます。

import javax.ws.rs.Path;

クラスは実際にはジャージー jar によって提供されます。ただし、これはアノテーションの標準名であるため、jersey の依存関係を削除し、JSR-311 の別の実装を使用すると、あまり苦労せずに機能させることができる場合があります。しかし、私の意見では、これは実際よりも理論的に優れているように見えます。この種のことは、期待どおりにスムーズに進むことはめったにありません。

残念ながら、あなたの質問に対する満足のいく答えはありません(ただし、間違っていれば幸いです)...

于 2013-02-15T08:57:01.283 に答える