类加载器中的bundle资源路径是什么?我如何访问该路径?

时间:2018-05-21 19:07:06

标签: eclipse websphere resourcebundle

我有一个部署到Websphere的Web应用程序,发现存在一些冲突的jar。为了找到冲突类的路径,我添加了以下代码

ClassLoader classLoader = MyClass.class.getClassLoader();
URL resource = classLoader.getResource("org/apache/http/conn/ssl/AllowAllHostnameVerifier.class");
System.out.println(resource);

当我检查IBM System.out日志文件时,我看到了以下资源路径。我不确定捆绑资源路径是什么。我想知道如何访问以下位置?

bundleresource://85.fwk734572965/org/apache/http/conn/ssl/AllowAllHostnameVerifier.class

1 个答案:

答案 0 :(得分:0)

“bundleresource”URL表示来自OSGi框架类加载器的条目。该数字映射到OSGi配置中的软件包编号,您可以通过打开OSGi控制台(来自WAS_HOME / bin目录,osgiConsole.sh|bat -server <servername>)并运行“ss”命令找到它,该命令列出了软件包以及他们的状态和数字ID。

假设你在运行时通过类加载看到了冲突(实际上并没有通过getResource引入这些类),我会非常肯定地说你正在从JAX-RS先决条件jar中获取冲突类,WAS_HOME/plugins/com.ibm.ws.prereq.jaxrs.jar。在它发布时,该jar使其Apache HTTP副本对应用程序可见。如果您能够将安装修补到最新的服务级别,则可以在以后的修订包中删除该可见性。

请注意,即使您使用该修补程序迁移到较新的修订包,您的测试用例仍可能显示相同的内容 - 我认为getResource()loadClass()的过滤相同,所以你仍然可以以这种方式获得.class文件。不过,它可能对您在运行时看到的问题有所帮助。