6

ApacheFelixを使用して実装された既存のOSGiアプリケーションにRESTクライアントを統合する必要があります。RESTサービスは、JAX-RSのRESTeasy実装(バージョン2.3.2.Final)に基づいています。クライアントの依存関係を含む別のバンドルを作成し、必要なRESTeasyパッケージをエクスポートして、クライアントが使用されるバンドルにインポートしましたが、残念ながら、OSGiコンテキスト内で機能させることができません。

私は2つの異なるアプローチを試しました。一般的なClientRequestを使用する最初のもの:

ClientRequest request = new ClientRequest(MyService.URL_TEST+"/stats");
request.body(javax.ws.rs.core.MediaType.APPLICATION_XML, stats);
ClientResponse<String> response = request.post(String.class);

この場合に発生するエラーはかなり奇妙です。

[java] java.lang.RuntimeException: java.lang.ClassCastException:
org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor cannot be cast to 
org.jboss.resteasy.client.ClientExecutor

ここで、ApacheHttpClient4ExecutorがClientExecutorインターフェイスを実装していることは確かです。

このようにRESTeasyの周りに独自のRESTクライアントラッパーを使用しようとすると、次のようになります。

MyService myService = MyServiceClient.getInstance();
myService.saveStatistics(stats);

別の例外が発生します:

[java] java.lang.LinkageError: ClassCastException: attempting to
castjar:file:/D:/Development/Eclipses/eclipse_4.2_j2ee_x64/lib/jaxrs-api-2.3.2.Final.jar
!/javax/ws/rs/ext/RuntimeDelegate.classtobundle:
//78.0:1/javax/ws/rs/ext/RuntimeDelegate.class

私が理解している限り、LinkageErrorは、おそらく、RESTeasyがいくつかのクラスローダートリックを使用してRuntimeDelegateを初期化する方法に関係しています。これは、おそらくOSGiフレームワークの制限に該当します。最初に述べたjava.lang.ClassCastExceptionのソースが同じであるという疑いがあります。

RESTeasyをOSGi内で動作させる方法はありますか?

PS:RESTeasyと同様の問題についての議論ですが、OSGiの外部です:java.lang.LinkageError:ClassCastException

更新: これらはrestclientバンドルに含まれているライブラリです:activation-1.1.jar commons-codec-1.2.jar commons-httpclient-3.1.jar commons-io-2.1.jarcommons-logging-1.0.4.jarflexjson-2.1。 jar httpclient-4.1.2.jar httpcore-4.1.2.jar javassist-3.12.1.GA.jar jaxb-api-2.2.3.jarjaxb-impl-2.2.4.jarjaxrs-api-2.3.2。 Final.jar jcip-annotations-1.0.jar jettison-1.3.1.jar jsr250-api-1.0.jar junit-4.10.jar log4j-1.2.14.jar resteasy-jaxb-provider-2.3.2.Final.jar resteasy -jaxrs-2.3.2.Final.jar resteasy-jettison-provider-2.3.2.Final.jar scannotation-1.0.3.jar slf4j-api-1.6.4.jar slf4j-log4j12-1.6.4.jar myservice- common-0.1.0.3.jar my-service-client-0.1.0.3-SNAPSHOT.jar stax-api-1.0-2.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.2.jar

これらはrestclientバンドルからのエクスポートです:javax.ws.rs、javax.ws.rs.ext、javax.ws.rs.core、org.jboss.resteasy.client、org.jboss.resteasy.client.cache、org .jboss.resteasy.client.extractors、org.jboss.resteasy.client.marshallers、org.jboss.resteasy.client.core.executors、javax.xml.bind.annotation、org.jboss.resteasy.plugins.providers、org .jboss.resteasy.plugins.providers.jaxb、org.jboss.resteasy.spi

4

4 に答える 4

0

SpringSource Bundle Repoを見てください。RESTful 通信を行うために ( gsonと組み合わせて)使用しているApache HTTP クライアントを含む、共通ライブラリの非常に便利なビルド済みバンドルがいくつかあります。

于 2013-03-15T11:16:49.747 に答える