目前,我正面临一个问题,即我正在尝试从我的bundle类路径获取WSDL资源,然后调用FileLocator.toFileURL将其从bundle资源转换为文件资源。在运行时,该方法在尝试获取URLConverter的实例时抛出NullPointerException,而且我很困惑为什么会发生这种情况。下面是我正在使用的代码。
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应用服务器。下面是我一直遇到的错误及其堆栈跟踪。
java.lang.NullPointerException
at org.eclipse.core.internal.runtime.Activator.getURLConverter(Activator.java:322)
at org.eclipse.core.runtime.FileLocator.toFileURL(FileLocator.java:205)
at Preference.<clinit>(Preference.java:37)
我做了一些健全检查,以确保我没有遗漏任何明显的东西。 configURL变量返回一个值(bundleresource://2.fwk685840929/META-INF/wsdl/Preference.wsdl
),我知道的所有这些工作流所必需的依赖项都添加在我的类路径中(主要是equinox和eclipse.osgi库)。
我到处都谷歌了,发现了两个主要资源:FileLocator和Activator的源代码,它们都“出现在犯罪现场”,{ {3}}我在堆栈跟踪中看到的完全相同的行号。但是,没有任何意义,因为错误报告指出这个错误将来自OSGi插件不可用 - 如果我真的将OSGi包部署到WebSphere的OSGi生态系统,这怎么可能呢? - 如果要信任grepcode中的行号,那么错误显然是urlTrackers变量,它似乎与捆绑问题不同,而不是我能控制的东西。
我需要一些帮助,因为我觉得我有点过分思考。如何让FileConverter类在运行时实际工作?
答案 0 :(得分:0)
我认为JavaDoc评论指的是org.eclipse.osgi
插件的可用性,其中包含bundleentry
所需的FileLocator
网址转换器。
我认为FileLocator
的设计并不适合在Eclipse RCP环境之外工作。