2016-04-21 5 views
0

私はLiberty ProfileサーバーでCamelアプリケーションを実行しています。私はキューからメッセージを取り出し、アンマーシャリングし、マーシャリングしてマッピングします。これはうまくいきましたが、JAXBDataBindingメソッドのgetContextualNamespaceMapが見つからないというエラーが発生しました。 これは、サーバのlibsに古いバージョンのjarファイルがあるためだと思いますが、なぜそれが使い始めたのかわかりません。私は親に最後のクラスのロードを切り替えた場合Camel app on Liberty - JAXBマーシャリング

IBM Jar: com.ibm.ws.org.apache.cxf-rt-databinding-jaxb.2.6.2_1.0.12 

問題は解決されていますが、その非常にハック方法は、それを修正し、偉大なオプションではありませんし。他のアイデア?私は、このjarファイルを引っ張ってきたことがあり、私のビルドで、いくつかの機能や他の依存関係を考えています。

+0

あなたはどのような機能を使用していますか? –

+0

のJavaEE-7.0 依存関係{\tコンパイル 'org.apache.camel:ラクダコア:2.16.2' \tコンパイル 'org.apache.camel:ラクダJMS:2.16.2' \tコンパイル「ORG .apache.camel:camel-jaxb:2.16.2 ' \tコンパイル' org.apache.camel:camel-dozer:2.16.2 ' \tコンパイル' org.apache.camel:camel-cxf:2.16.2 ' \tコンパイル 'javax.xml:JAXRPC:1.1' \tコンパイル 'org.apache.activemq:ActiveMQのコア:5.7.0' \tコンパイル 'com.sun.xml.bind:JAXB-XJC:2.2.11' \tコンパイル 'org.springframework:春 - ウェブ:4.2.4.RELEASE' \tコンパイル 'のlog4j:log4jの:1.2.17' \tコンパイル 'org.slf4j:SLF4J-log4j12:1.6.6' } // – kinsey

+0

テストの依存 \t testCompile 'org.apache.camel:ラクダテストスプリング:2.16.2' \t testCompile 'のJUnit:JUnitの:4.8.1' \t testCompile 'xmlunit:xmlunit:1.3' – kinsey

答えて

0

javaee7機能には、サーバーバージョンと衝突するjaxswバージョンが含まれていました。 javaee7機能を削除すると、この問題は解決されました。私はそれを再び追加するかどうかを確認しておく必要があります。

0

をだから、getContextualNamespaceMapように見えるんがorg.apache.cxf-RT-databinding-の新しいバージョンでのみ使用可能ですjaxb JARはLibertyで入手可能なものよりも優れています。

parentLastが最適なオプションです。 (あなたはすでにこれを行う方法を知っていますが、それは文書化されていますが(here)、他の問題が発生した場合は、別の質問をフォローアップしてください。

あなたはパッケージされているものアプリケーションに他のコードがあるが代替パスがあるため、parentLastモードで実行されないように、getContextualNamespaceMapモードを実行することを避けるために、Libertyランタイムからアイテムを削除し、 Libertyが提供するモジュールで完全にダウンした可能性があります。理論的にはOKです。

私はt彼はCXFやCamelの "スタック"内のモジュール内のパスを記述して、それが現実の可能性であるかどうかを推測します。

+0

データバインディングJARを参照しているIBMライブラリのJARを正しく使用している必要がありますか?私はそれがそうでなければアプリのバージョンを使用すると信じています。だから私はJARがどんなJARであり、それを私のアプリケーションJARに追加すれば問題を解決できるのか理解できれば? – kinsey

+0

問題の原因となるCamel-CXFの依存関係を確認しました。 CXFエンドポイントを削除しても問題は解決できませんが、Webサービスを呼び出すにはその必要があります。 – kinsey

+0

おそらく私の答えは分かりませんでした。リバティーの古いバージョンではなく、アプリケーションで新しいデータバインディングJARを取得するために、* parentLast *オプションを使用するのはおそらく正しいでしょう。しかし、私は言った、 "まあ、もしあなたが* parentLast *が別の問題を引き起こす必要はないかもしれません。しかし、もしそうなら、私たちは、私がコメントすることを念頭に置いていないより複雑な問題に直面しています。理にかなっている? –

関連する問題