1

URL to load resources from the classpath in Java in Java ではURLStreamHandler、 を使用して URL パスを有効にする方法について説明しています。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すでに設定があり、これは 1 回だけ実行できます。

jbossURLStreamHandlerのプレフィックスに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 に答える