2017-11-22 17 views
1

私のチームはApache Karafの上に構築された古いコードベースを継承し、いくつかのJAX-WSサービスを持っています。現在、Beanに注入されているわけではないオブジェクトに問題があります。WebServiceContext(時には)OSGiが挿入されていない - Apache Karaf

当社のサービスは、以下のように定義されています。我々はすでに我々がオンラインで見つけるいくつかのオプションを試してみました

@WebService(serviceName = "XXXSoapService", portName = "XXXSoapPort", endpointInterface = "com.XXX.service.XXXSoapInterface", targetNamespace = "http://xxx.xx/") 
@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING) 
public class XXXSoapService implements XXXSoapInterface { 
    @Resource 
    WebServiceContext context; 

    public void doXXX() { 
    context.getMessageContext(); // throws nullpointerexception 
    } 
} 

。私たちはセッター注入を試みました。リソースの名前を指定しようとしましたが、endpointInterfaceが設定されていることを確認しました。

しかし、私たちが何をするにせよ、ほとんどの場合、サービスはWebServiceContextを注入することなくインスタンス化されます。時には動作し、KARAFがどのように動作しているかと考えなければならず、利用可能になる前にWebServiceContextを注入しようとします。

featuresBootセクションのorg.apache.karaf.features.xmlにCXFがあります。

OSGIとKarafについての私の理解は非常に基本的なものなので、何を探したらいいのか分かりません。

WebServiceContextがほとんどの時間に注入されない理由については誰も知りませんが、何回か注入されていますか?

編集:私はそれについて読んでてきた、そして私がApacheの青写真を抱えている例外はそれとは何かを持っている可能性があるようだ。

[Blueprint Extender: 3] ERROR org.apache.aries.blueprint.container.BlueprintContainerImpl - Unable 

バンドルのBlueprintコンテナーを開始する io.hawt.hawtio-karaf-terminal/2.0.0未解決の依存関係のため [(objectClass = org.apache.felix.service.threadio.ThreadIO)、 (objectClass = org.apache.felix.service.command.CommandProcessor )] java.util.concurrent.TimeoutException at org.apache.aries.blueprint.container.Blue printContainerImpl $ 1.run(BlueprintContainerImpl.java:371) at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) at java.util.concurrent.Executors $ RunnableAdapter.call java.util.concurrent.FutureTask.run(FutureTask.java:266)で(Executors.java:511) java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180)でのjavaで。 util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)java.util.concurrent.ThreadPoolExecutor $ Worker.runでjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) で (ThreadPoolExecutor。 java:624) at java.lang.Thread.run(スレッド.java:748)

このモジュールの依存関係を見ていきますが、その理由が考えられますか?他のアイデア?

答えて

0

解決策が見つかりましたが、解決策ではないかと思います。これは、より多くの回避策です。

私はKarafの起動時に常に読み込まれる依存関係のフォルダにjavaee-api-7.0.jarを追加しました。突然毎回動作するようになりました。これで、期待どおりにWebServiceContextが注入されます。

これまでに何度か働いた理由は説明できません。それが欠けている依存関係だったなら、それは決してうまくいかないでしょう。私の推測では、いくつかの依存関係はあまりにも遅くロードされていて、ほとんどの場合失敗するでしょう。今は依存関係のこのフォルダに含めるので、起動時にロードされるか、プロセスの早い段階で読み込まれます。私は正直に何が起こっているのか分からない。

私はそれが実際の修正であるとは思わないので、他の人に役立つかもしれないので、この回答を投稿していますが、私はそれを解決としてマークしません。誰かが適切な解決策を持っている場合は、発火させてください。

関連する問題