現在、私はバンドルクラスパスからWSDLリソースを取得してFileLocator.toFileURLを呼び出してバンドルリソースからファイルに変換しようとしている問題に直面していますリソース。実行時に、このメソッドはURLConverterのインスタンスを取得しようとしているときにNullPointerExceptionをスローします。なぜこのようなことが起こるのか、かなり困惑しています。以下は私が使用しているコードです。FileLocator.toFileURLがIBM WebSphereバンドルでNPEを投げる
URL configURL = Preference.class.getResource("/META-INF/wsdl/Preference.wsdl");
if (configURL != null && configURL.getProtocol() != "file") {
System.out.println("URL is not a file. Trying to convert from non-standard to something reference-able.");
URL wsdlURL = null;
try {
wsdlURL = FileLocator.toFileURL(configURL);
} catch (IOException e1) {
System.out.println("IOException caught");
e1.printStackTrace();
} catch (NullPointerException e1) {
System.out.println("NullPointerException caught");
e1.printStackTrace();
} catch (RuntimeException e1) {
System.out.println("RuntimeException caught");
e1.printStackTrace();
} catch (Exception e1) {
System.out.println("generic Exception caught");
e1.printStackTrace();
}
PREFERENCE_WSDL_LOCATION = wsdlURL;
} else {
System.out.println("URL is a file.");
PREFERENCE_WSDL_LOCATION = configURL;
}
私はRADにローカルでコードを実行すると、それが正常に動作します。しかし、EclipseでOSGiコードを開発する人のほとんどは、この種のものを見つけると、展開時にクラッシュすることになります。具体的には、OSGi Composite Bundle Archive(CBA)にパッケージ化され、WebSphere v8.5.5アプリケーション・サーバーにデプロイされます。以下は私が実行し続けるエラーとそのスタックトレースです。
私は明らかな何かを欠いていないことを確認するためにいくつかの健全性チェックを行いました。 configURL変数は値(bundleresource://2.fwk685840929/META-INF/wsdl/Preference.wsdl
)を返しています。このワークフローに必要なすべての依存関係がクラスパス(主に春分ライブラリとeclipse.osgiライブラリ)に追加されています。
:私は正確に同じ行番号をFileLocatorとの両方の「犯罪のシーンに存在」しているActivatorのソースコードを、そしてthis Eclipse bug report私のスタックトレースで見ています。 OSGiバンドルをWebSphereのOSGiエコシステムにそのまま展開すると、このエラーはどのように可能になるのでしょうか? grepcodeの行番号が信頼されるならば、エラーは明らかにurlTrackers変数で、バンドルの問題とは違うように見えますが、本当に私が制御できるものではありません。
私はこれを少し考えすぎているように感じるので、ここで助けが必要です。実際に実行時にFileConverterクラスを実際に動作させるにはどうすればよいですか?
'org.eclipse.osgi'プラグインの利用可能性はどういう意味ですか?私のクラスパスにあり、MANIFEST.MFにオプションのインポートされたパッケージを追加しました。さらに、それが利用できない場合、NPEの代わりにClassNotFoundまたはClassNoDef例外を取得しないでしょうか? – lilweirdward
OSGiサービスを探していて、クラスが見つからないというエラーが出ないため、NPEを取得します。 –
しかし、WebSphereはOSGiサービスで動作します。 – lilweirdward