プロジェクトでPOCを実行しています。ここでは、SOAPベースのリクエストを送信し、それに応じてWebサービスからSOAP応答を取得します。 Springのフレームワークが提供するwebservicesテンプレート(クライアントサイドAPI)をアプリケーションで活用することを目指しています。私たちのアーキテクチャーによれば、OSGI準拠のバンドル(WebサービステンプレートAPIを使用してWebサービスとやり取りするコード用)を作成し、それをApache Felixコンテナにデプロイします。 Felixコンテナにすべての従属OSGI準拠バンドルをインストールして、すべての依存関係を解決しました。OSGIフレームワークでランタイムにJavaクラスを動的にロードする方法は?
webservicesテンプレートごとに、デフォルトのWebサービスメッセージ送信者は、クラスローダーによって実行時に動的にロードされるHttpUrlConnectionMessageSenderです。 Felixコンテナは、依存OSGIバンドル(WebサービスバンドルにはHttpUrlConnectionMessageSenderが含まれています)からクラスを読み込むことができないため、以下の例外が発生しています。以下の例外ログを参照してください。
* org.springframework.beans.factory.BeanInitializationException: Could not find default strategy class for interface [org.springframework.ws.transport.WebServiceMessageSender]; nested exception is java.lang.ClassNotFoundException:org.springframework.ws.transport.http.HttpUrlConnectionMessageSender at org.springframework.ws.support.DefaultStrategiesHelper.getDefaultStrategies(DefaultStrategiesHelper.java:126)
at org.springframework.ws.support.DefaultStrategiesHelper.getDefaultStrategies(DefaultStrategiesHelper.java:90)
at org.springframework.ws.client.core.WebServiceTemplate.initMessageSenders(WebServiceTemplate.java:320)
at org.springframework.ws.client.core.WebServiceTemplate.initDefaultStrategies(WebServiceTemplate.java:306)
at org.springframework.ws.client.core.WebServiceTemplate.<init>(WebServiceTemplate.java:143)
at test.soapservice.service.SOAPServiceImpl.<init>(SOAPServiceImpl.java:40)
at test.soapservice.service.SOAPServiceActivator.start(SOAPServiceActivator.java:17)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:641)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1895)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)
at org.apache.felix.gogo.command.Basic.start(Basic.java:729)
によって引き起こさ
:java.lang.ClassNotFoundExceptionが:私の理解あたりとしてorg.springframework.ws.transport.http.HttpUrlConnectionMessageSender
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:164)
at org.springframework.ws.support.DefaultStrategiesHelper.getDefaultStrategies(DefaultStrategiesHelper.java:114)
、フェリックス・コンテナは、動的にClassUtilsを使用してクラスをロードすることができません.forName()は別のバンドルに存在します。これは、現在のバンドルが依存バンドルのクラスローダーとは異なるクラスローダーを持つコラボレーションの問題として認識されます。
このコミュニティのユーザーに同じ例外が発生しましたか? 「はい」の場合は、実行時クラスの依存関係を解決するために必要なステップは何ですか?上記の問題を解決するためにあなたの考え/指針を共有してください。迅速な対応が高く評価され、私たちのPOCを成功させるのに役立つかもしれません。事前に
おかげで、Class.forName()
の形で Mridulチョプラ
あなたは間違いなくマニフェストに 'org.springframework.ws.transport.http'を追加しましたか? – artbristol
クラスを名前でロードすることはまったく問題ではありません。バイトコード検査ツール(bnd)を使用してマニフェストを生成することはできません。 artbristolのように、マニフェストをカスタマイズし、 'org.springframework.ws.transport.http'をインポートする必要があります。あなたの目録を見せることができますか? –