1

从 Java 中的类路径加载资源的 URL描述了如何使用 aURLStreamHandler来启用 url-paths,例如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的前缀注册 a ,classpath:或者我什至可以使用vfs?

4

1 回答 1

0

很老的线程,但我得到了一些有用的答案。正如 JBoss 问题中的“David Lloyd”所言:

在 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);
  }

它已经通过代理类加载器来处理“vfs”。

于 2016-07-25T18:47:44.977 回答