2017-04-13 147 views
7

çalışmaz kavanoz dosya içinde xml dosyasında bulunmaktadır İşte senaryo:xi: WildFly

Ben .xml bir .jar dosyasında çalıştırmak için uygulama için gerekli dosyaları (biraz bir yapılandırmanın) birkaç paket.

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

1.xml aşağıdaki içeriğe sahiptir: kavanoz dosyası aşağıdaki yapıya sahiptir

<?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> 

this maddeye dayalı.

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 

denedim (& error'd) tüm gelebilecek seçenekleri: bunlar içerir erişmeye çalışırken aşağıdaki hatayı alıyorum (sonra başarıyla başvurumu dağıtma). WildFly modül olarak yüklenir -dosyadan bir jar bir .xml dosyası ing' xi:include için doğru şifresi ne?

Düzenleme: Burada xmlfile yüklenir açıklanmıştır:

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 dosya adı (1.xml) içeriyor.

+0

Kullanım durumunuz nedir? Ayarlarınızı bir kavanoz dosyasında paketlemek gerçekten gerekli mi? o –

+0

http://stackoverflow.com/questions/8412798/how-to-load-xmlcatalog-from-classpath-resources-inside-a-jar-reliably gör ayrıştırıcı/mapper? –

+1

Eğer oluşturmak için kullanmak kod gösterebilir yardım ederse – ctomc

cevap

2

Bu XML ayrıştırıcı bağlıdır.

sizin istisna gereği bunu SAX kullanmak gibi görünüyor.
bu yazıyı deneyin: https://www.ibm.com/developerworks/library/x-tipentres/

Yukarıdaki belge bir XML belgesindeki kaynakları bulmak için SAX API 'ın EntityResolver arabirimi kullanır. Bu JBoss özel protokol gibi görünüyor, URL'lerinizden öneki:

1

"kaynak" Kaldır. Ayrıca, aynı klasörde bulunan 1.xml, 2.xml ve 3.xml gibi "resource /" yolunu da yayarsınız ve genellikle göreli yolu (1'den 2'ye ve 1'den 3'e) belirtirsiniz.

aşağıdaki deneyin:

<?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

Bir akışın "göreceli yolu" nedir? Tüm XML belgeleri ... –

+0

göreli yolu örneğin gerçek bir dosya sisteminden gelen Üstte dosya listelemede "kaynak". 1.xml yüklüyse, 2.xml ve 3.xml, 1.xml'ye göre sorgulanmalıdır -> herhangi bir klasör olmadan (soruda verilen yapıyı izleyerek) –

+0

XML ayrıştırıcısı bunu bilmiyor. Bir 'Belge' veya bir karakter akışı veya karakterleri okuyabileceği başka bir kaynak alır. –