目前,我面临的问题是,我试图从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 CompositeBundle Archive(CBA)中,并部署到WebSpherev8.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的源代码都是“出现在犯罪现场”,this Eclipse bug report的行号与我在堆栈跟踪中看到的完全相同。然而,这两种情况都没有意义,因为bug报告指出,这个错误是由于OSGi插件不可用而产生的--如果我真的要将OSGi包部署到WebSphere的OSGi生态系统中,这怎么可能呢?- 如果grepcode中的行号是可信的,那么错误显然是urlTrackers变量,这似乎与捆绑包问题不同,不是我能控制的东西。
我需要一些帮助因为我觉得我想多了一点。如何让FileConverter类在运行时实际工作?
1条答案
按热度按时间hl0ma9xz1#
我认为JavaDoc注解指的是
org.eclipse.osgi
插件的可用性,该插件包含FileLocator
所需的bundleentry
URL转换器。我不认为
FileLocator
真的是为在Eclipse RCP环境之外工作而设计的。