FileLocator.toFileURL在IBM WebSphere bundle

时间:2017-01-19 05:44:17

标签: java eclipse websphere osgi

目前,我正面临一个问题,即我正在尝试从我的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库)。

我到处都谷歌了,发现了两个主要资源:FileLocatorActivator的源代码,它们都“出现在犯罪现场”,{ {3}}我在堆栈跟踪中看到的完全相同的行号。但是,没有任何意义,因为错误报告指出这个错误将来自OSGi插件不可用 - 如果我真的将OSGi包部署到WebSphere的OSGi生态系统,这怎么可能呢? - 如果要信任grepcode中的行号,那么错误显然是urlTrackers变量,它似乎与捆绑问题不同,而不是我能控制的东西。

我需要一些帮助,因为我觉得我有点过分思考。如何让FileConverter类在运行时实际工作?

1 个答案:

答案 0 :(得分:0)

我认为JavaDoc评论指的是org.eclipse.osgi插件的可用性,其中包含bundleentry所需的FileLocator网址转换器。

我认为FileLocator的设计并不适合在Eclipse RCP环境之外工作。