Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClassLoader.getResources在Weblogic/Spring应用程序上返回空枚举_Java_Spring_Classloader_Weblogic12c - Fatal编程技术网

Java ClassLoader.getResources在Weblogic/Spring应用程序上返回空枚举

Java ClassLoader.getResources在Weblogic/Spring应用程序上返回空枚举,java,spring,classloader,weblogic12c,Java,Spring,Classloader,Weblogic12c,我在Weblogic 12.2上部署了一个EAR应用程序,它使用Spring 4.0.4,面临一种奇怪的行为: Spring找不到基本包,因为Weblogic的classloader返回空枚举:cl.getResources(“my/base/pkg”) 它在一个上下文中,在我的MDB上注入了一些@autowiredbean。(因此,由于它,豆子没有被注射) 但如果我将以下代码放入同一个应用程序中的示例MDB中,它会起作用: Thread.currentThread().getContextCl

我在Weblogic 12.2上部署了一个EAR应用程序,它使用Spring 4.0.4,面临一种奇怪的行为:

Spring找不到基本包,因为Weblogic的classloader返回空枚举:
cl.getResources(“my/base/pkg”)

它在一个上下文中,在我的MDB上注入了一些@autowiredbean。(因此,由于它,豆子没有被注射)

但如果我将以下代码放入同一个应用程序中的示例MDB中,它会起作用:

Thread.currentThread().getContextClassLoader().getResources("my/base/pkg");
Spring似乎使用相同的代码来创建它的
cl
变量

我注意到的另一件事是:如果我将Spring配置为将一个基本包作为一个具体包(其中包含类),它就可以工作


可能是什么

我在使用Spring 2.5.6将运行在Weblogic 12.1中的java 7上的应用程序升级到使用Spring 4.1.9的Weblogic 12.2中的java 8时遇到了类似的问题(以获得对java 8的全面支持)。从技术上讲,Spring4.1.9包含与2.5.6相同的所有类(尽管已弃用)

突然,Spring无法通过类路径上给定的文件系统外部目录中的上下文文件加载bean。我们在一个扩展了SpringBeanAutowiringInterceptor的拦截器中使用了以下内容:

private static final String[] CONTEXT_FILES = {"classpath*:context*.xml"};
这停止了工作。为了让它再次工作,我必须显式地传入父文件夹名称(我们称之为“spring_上下文”),并将类路径修改为一个文件夹。像这样:

private static final String[] CONTEXT_FILES = {"classpath*:spring_context/context*.xml"}
这一变化使spring能够通过WLS12.2中的类加载器获得外部上下文文件列表。我假设这与Spring文档中的一个注释有关:

警告:请注意,“classpath*:”与Ant样式模式组合时 将仅在前至少一个根目录下可靠地工作 模式启动,除非实际目标文件驻留在该文件中 系统。这意味着像“classpath*:*.xml”这样的模式将不会出现 从jar文件的根目录中检索文件,但仅从 扩展目录的根目录。这源于对 JDK的ClassLoader.getResources()方法,该方法只返回文件系统 传入的空字符串的位置(指示要传入的潜在根) 搜索)


这似乎意味着这个问题只适用于从jar文件加载spring上下文文件。但是我对Weblogic Server 12.2的经验表明,当在文件系统上使用扩展目录时,它可能也会有同样的问题。

对此有任何更新吗?我升级到WLS 12.2.1并且
getContextClassLoader().getResources()
停止为我工作。