maven3.0.3でビルドされたfusesourceのapache-servicemix-4.4.1-fuse-00-08の「cxf-osgi」の例を考えると、apache karaf2.2.4およびCXF2.4.3にデプロイすると、Webサービスは次のようになります。公開されたり、CXFサーブレット(http:// localhost:8181 / cxf /)に表示されたりすることはありません。カラフログにエラーはありません。そのような振る舞いをどのようにデバッグするのでしょうか?
3 に答える
etc/org.ops4j.pax.logging.cfg
ログレベルを上げる価値があります-これは、またはコンソールで永続的に行うことができますlog:set TRACE org.apache.cxf
-IIRCこれにより、いくつかの有用な情報が表示されます。
また、実際にlocalhost / 127.0.0.1で公開されていることを確認してください。別のインターフェイス、ローカルネットワークのIPで公開されている可能性がありますが、localhostでは公開されていない可能性があります。アドレスとして0.0.0.0を使用してみてください。そうすれば、使用可能なすべてのインターフェイスにバインドされます。
Mavenを使用している場合は、CXFソースをダウンロードして(Eclipseで簡単に)、リモートデバッガーをKarafインスタンスに接続できます。戦略的に配置されたブレークポイントを使用して、何が起こっているかを把握できるはずです。
デフォルトのFelixではなくEquinoxに変更してみてください。2.4.3には、Felixではうまく機能しないというバグがあります。または、CXF 2.4.4が利用可能になり、これも修正されるはずです。
今週提出したこの問題をご覧ください:https ://issues.apache.org/jira/browse/CXF-4058
私が見つけたのは、beans.xmlがcxfバンドルjarの前にロードされた場合、エンドポイントはCXFに登録されますが、OSGihttpサービスには登録されないということです。したがって、ログからはすべてが良好に見えますが、エンドポイントにアクセスすることはできません。これは競合状態です。
私は2つの回避策を実行しました:1)短期的には、ブート順序の後半で自分のjarを移動するだけです(私はKaraf機能を使用します)。これにより、beans.xmlが読み取られる前にSpringとCXFが完全にロードされ、2)Springを放棄してこのアプローチに大まかに基づいた独自のバインディングコード:http://eclipsesource.com/blogs/2012/01/23/an-osgi-jax-rs-connector-part-1-publishing-rest-services/
昨日ソリューション#2を実装したばかりで、すでに非常に満足しています。これにより、クラスローダーのすべての問題が解決され(BNDがbeans.xml参照を認識しないため、手動で多くのImport-Package行を追加する必要が生じる前に)、ブート競合状態が修正されました。