0

私のWebアプリはEclipseとNetbeasで正常に動作しますが、依存関係を含めた後にmavenで実行しようとすると、例外がスローされます.依存関係は.

     <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-bundle-jaxrs</artifactId>
       <version>2.1.2</version>
     </dependency>

この依存関係を含めるのは、ResponseBuilderImpl builder = new ResponseBuilderImpl() を使用しているためです
。ビルダーと依存関係を削除すると、maven で機能しますが、含めると例外が発生します。これは私の残りのサンプルの残りのコードです。

       @Path("/{userId}/logout")
   @PUT
   public Response logout(@PathParam ("userId") String userId,@Context HttpServletRequest request,@Context HttpServletResponse response)throws ServletException, IOException 
   {
    ResponseBuilderImpl builder = new ResponseBuilderImpl();
    log.debug("request user id for logout::"+userId);
    MapUserLogin mapUserLogin=new MapUserLogin();
    mapUserLogin.removeMap(userId);
    log.debug("after remove userinformation from hashmap");

    System.out.print("LOGOUT SUCCESSFULLUY");
    builder.status(200).entity("SUCCESS");
    return builder.build();

   }

したがって、ResponseBuilderImpl の場合、インポート org.apache.cxf.jaxrs.impl.ResponseBuilderImpl をインポートしました。削除して文字列型を返すだけの場合は機能しますが、上記のコードを使用している場合、maven のみが例外をスローします例外は.

INFO: Deployed Application(path=C:\App\apache-tomee-jaxrs-1.5.2\webapps\Snefocaremaven)
Oct 01, 2013 10:51:10 AM org.apache.openejb.observer.ObserverManager fireEvent
SEVERE: error invoking org.apache.openejb.observer.ObserverManager$Observer@21d4f61d
java.lang.reflect.InvocationTargetException
4

1 に答える 1

1

CXF 固有のものを使用する正当な理由がない限りResponseBuilderImpl、JAX-RS クラスの静的ファクトリ メソッドを使用しResponseて ResponseBuilder を取得する必要があります。

Response response = Response.status(200).entity("SUCCESS").build();

JAX-RS フレームワークは、内部メカニズムを使用して正しい実装をロードおよび初期化します。独自の機能を使用していない限り、コンパイル時に CXF 依存関係を必要としないことに注意してください。

更新:

ResponseBuilder partial = Response.status(200);

さらに変更できる変更可能なビルダー インスタンスを作成します。ビルダーのステータスも変更できる必要があることに注意してください。残念ながら (?) JAX-RS API から利用できる「単純な」ファクトリ メソッドはありません。最初にこの方法の作成を試してみて、Responseそれが機能するかどうか、またはもっと微妙な問題があるかどうかを確認することをお勧めします。

ResponseBuilder partial = Response.status(200); // mock status
ResponseBuilder filled = fillResponse(partial); // whatever the method is called
return filled.build();

次に、リファクタリングを検討して、たとえばエンティティと応答コードを認識しているメソッドに応答ビルド全体を移動するなどして、モック ステータスを使用してビルダーを作成する必要がなくなります。

于 2013-10-01T09:02:36.267 に答える