2011-02-09 9 views
3

SnakeYamlはOSGiフレームワーク内で動作しますか?私はMANIFEST &を修正して正しくデプロイするように修正しましたが、文書をJavaBeanオブジェクト構造にロードしようとすると、「クラスが見つかりません」例外が発生しません。OSGiでSnakeYamlを使用していますか?

ありがとうございました。

+0

SnakeYAMLチームにあなたが変更したことを教えてもらえますか?それには問題があります:http://code.google.com/p/snakeyaml/issues/detail?id=96 – Andrey

+0

確かです。私はちょうど私が使用するMANIFESTを掲示しました(主に、私の展開はわずかに異なりますが、うまくいくはずです)。お知らせ下さい。 – oconnor0

答えて

8

時には、マニフェストヘッダーを追加してOSGiサンドボックスでjarをうまくプレイできるようにするのが簡単です。 OSGiの文脈では、ジャー/ライブラリが「いたずら」することがあります。ゴールデンルールは、OSGiがクラスローダーを使用する方法のためにClass.forName()を使用しないことです。そうでなければ、単一のクラスローダー環境で完全に有効です。私はSnakeYamlへのソースを取り出し、BeanベースのローダーでClass.forNameを使用しています。

良いニュースは、コンストラクタCustomClassLoaderConstructorがあり、独自のクラスローダーを使用して、コアのYamlパーサーオブジェクトを作成するときにこれを使用することです。キーは正しいクラスローダーを取得しています。あなたはYamlを使用しているバンドルのクラスローダーを使いたいでしょうが、作成されるすべてのクラスがそのバンドルにインポートされることを確認する必要があります。インポートによって、必要なすべてのオブジェクトがOSGiが作成するクラスローダーツリーに含まれていることが確認されます。

See this questionバンドルに基づいて作成されたクラスローダー用。

+0

'Class.forName(name)'が 'Thread.currentThread()。getContextClassLoader()。loadClass(name);'に変更されるのを不思議そうです。 – maslovalex

+0

ああ、私はCustomClassLoaderConstructorを見逃していました。ありがとう。それが私が探していたものです。そのバンドルに使用しようとしていたすべてのクラスをインポートしてから、クラスローダーを(ObjectName.class.getClassLoader()経由で)CustomClassLoaderConstructorに渡しました。 – oconnor0

関連する問題