从JBoss AS 7上的Classpath加载URL资源

时间:2012-06-08 15:34:34

标签: java url classloader jboss7.x

URL to load resources from the classpath in Java介绍如何使用URLStreamHandler启用new URL("classpath:org/my/package/resource.extension")

等网址路径

我想在JBoss AS 7上使用相同的方法,但调用java.net.URL.setURLStreamHandlerFactory(URL.java:1102)会导致java.lang.Error: factory already defined

因此AS 7已经设置了URLStreamHandlerFactory,这只能完成一次。

是否有其他方法可以在jboss上为URLStreamHandler前缀注册classpath:,还是可以使用vfs

1 个答案:

答案 0 :(得分:0)

很老的帖子,但我得到了一些有用的答案。 由David Lloyd"在JBoss问题:

  

在AS7中,这只是调用org.jboss.modules.Module #registerURLStreamHandlerFactoryModule()的问题,其中包含协议的处理程序工厂的模块名称,并确保该模块具有META-INF / services /java.net.URLStreamHandler文件。或者,您可以在jboss.protocol.handler.modules系统属性中指定模块名称,该属性与java.protocol.handler.pkgs的工作方式类似,除了不接受应用程序类路径中的包名列表,它接受一个列表引导模块加载器中的模块名称。

详细信息如下:https://issues.jboss.org/browse/AS7-1562

嗯,就我而言,我只是改变我的实现以使用Spring的PathMatchingResourcePatternResolver:

ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
  try {
    Resource [] mappingLocations = patternResolver.getResources("classpath*:" + myBaseXmlPath + "/**/*.xml");
    for(int i = 0; i < mappingLocations.length; i++) {
      // do whatever you want ...
      System.out.println(mappingLocations[i].getFile());
    }
  }
  catch(IOException e) {
    throw new RuntimeException(e);
  }

它已经处理了&#f;&#39;通过代理类加载器。