2017-04-13 5 views
7

では動作しません。ここではシナリオです:XI:jarファイル内のXMLファイルに含めることWildFly

私は.jarファイルで実行するために自分のアプリケーションのために必要ないくつかの.xml(多少の設定の)ファイルを同梱。 jarファイルには、以下の構造を有する:this記事に基づいて

<?xml version="1.0" encoding="UTF-8"?> 
<document xmlns:xi="http://www.w3.org/2001/XInclude"> 
    <!-- Include 2 --> 
    <xi:include 
     href="resource:resources/2.xml" /> 
    <!-- Include 3 --> 
    <xi:include 
     href="resource:resources/3.xml" /> 
    <!-- 
    <map> 
    </map> 
    --> 
</document> 

settings-1.0.0.jar 
˪ resources/ 
    ˪ 1.xml 
    ˪ 2.xml 
    ˪ 3.xml 
˪ META-INF/ 
    ˪ MANIFEST.MF 

1.xmlには、以下の内容があります。

Caused by: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 43; An 'include' failed, and no 'fallback' element was found. 
    at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:245) 
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:298) 
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121) 
    at org.zcore.dkp.backend.mapper.MappingParser.parse(MappingParser.java:60) 
    ... 327 more 

は、私が試した(& error'd)すべてthinkableオプション:これらは含まれてアクセスしようとしたとき、私は次のエラーを取得する(成功した後に自分のアプリケーションを配備します)。 WildFlyモジュールとしてインストールされたjarファイルにxi:include.xmlファイルの正しい組み合わせは何ですか?

編集:ここではXMLFILEがロードされている方法は次のとおりです。

private void loadBackendMapping() { 
    try { 
     BackendMappingParser parser = new BackendMappingParser(); 
     InputStream in = ResourceLoaderHelper.getResourceAsStream(BACKEND_MAPPING_RESOURCE); 
     if (in == null) { 
      throw new FileNotFoundException(); 
     } 
     try { 
      parser.parse(in); 
     } finally { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       log.warn("Failed to close " + BACKEND_MAPPING_RESOURCE, e); 
      } 
     } 
     backendMapping = parser.getMapping(); 
     if (log.isDebugEnabled()) { 
      log.debug(BACKEND_MAPPING_RESOURCE + " successfully loaded!"); 
     } 
    } catch (FileNotFoundException e) { 
     log.warn("\"" + BACKEND_MAPPING_RESOURCE + "\" not found!"); 
     backendMapping = new BackendMapping(); 
    } catch (Exception e) { 
     throw new CenterwareSystemException("Failed to parse " + BACKEND_MAPPING_RESOURCE, e); 
    } 
} 

BACKEND_MAPPING_RESOURCEは、ファイル名(1.xml)が含まれています。

+0

ご利用の場合は何ですか?あなたの設定をjarファイルにパッケージ化することは本当に必要ですか? –

+0

http://stackoverflow.com/questions/8412798/how-to-load-xmlcatalog-from-classpath-resources-inside-a-jar-reliably 役立つかどうかを確認 –

+1

作成に使用するコードを表示できますかパーサー/マッパー? – ctomc

答えて

2

XMLパーサーによって異なります。

例外として、SAXを使用しているようです。
は、この記事をお試しください: https://www.ibm.com/developerworks/library/x-tipentres/

上記の文書は、XML文書内のリソースを検索するためSAX APIEntityResolverインターフェースを使用しています。

1

URLから「resource:」接頭辞を削除します。これはJBoss固有のプロトコルのようです。

1.xml、2.xml、および3.xmlはすべて同じフォルダにあり、通常は相対パス(1〜2および1〜3)を指定するため、「resource /」パスを出力します。

次のことを試してみてください。

<?xml version="1.0" encoding="UTF-8"?> 
<document xmlns:xi="http://www.w3.org/2001/XInclude"> 
    <!-- Include 2 --> 
    <xi:include href="2.xml" /> 
    <!-- Include 3 --> 
    <xi:include href="3.xml" /> 
    <!-- 
    <map> 
    </map> 
    --> 
</document> 
+0

ストリームの「相対パス」とは何ですか?すべてのXML文書が実際のファイルシステムから来ているわけではありません... –

+0

相対パスは、上のファイルリストの "resource"。 1.xmlを読み込むことができれば、2.xmlと3.xmlは1.xml - >相対的にフォルダを持たないようにする必要があります(質問に与えられた構造に従うとき) –

+0

XMLパーサはこれを知らない。 'Document'や文字ストリーム、あるいは文字を読み込むことができる他のソースを取得します。 –

関連する問題