2017-04-13 16 views
7

में काम नहीं करता यहाँ परिदृश्य है:xi: जार फ़ाइल में xml फ़ाइल में शामिल WildFly

मैं कई .xml (एक विन्यास की कुछ हद तक) अपने आवेदन एक .jar फ़ाइल में चलाने के लिए के लिए आवश्यक फ़ाइलों बंडल।

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

1.xml निम्नलिखित सामग्री है:: जार फ़ाइल निम्न संरचना है

<?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 लेख पर आधारित है। जब इन में शामिल हैं का उपयोग करने की कोशिश कर (सफलतापूर्वक के बाद अपने आवेदन की तैनाती) मैं निम्नलिखित त्रुटि मिलती है:

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) सभी विचारणीय विकल्प। xi:include '.xml फ़ाइल jar -File में WildFly मॉड्यूल के रूप में स्थापित करने के लिए सही संयोजन क्या है?

संपादित: यहां बताया 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

आपके उपयोग के मामले में क्या है? क्या जार फ़ाइल में अपनी सेटिंग्स को पैकेज करना वाकई आवश्यक है? –

+0

http://stackoverflow.com/questions/8412798/how-to-load-xmlcatalog-from-classpath-resources-inside-a-jar-reliably देखें कि यह –

+1

में मदद करता है या नहीं, क्या आप वह कोड दिखा सकते हैं जिसका उपयोग आप बनाने के लिए करते हैं पार्सर/नक्शाकार? – ctomc

उत्तर

2

यह आपके एक्सएमएल पार्सर पर निर्भर करता है।

आपके अपवाद के अनुसार ऐसा लगता है कि आप SAX का उपयोग करते हैं।
इस लेख का प्रयास करें: https://www.ibm.com/developerworks/library/x-tipentres/

ऊपर दस्तावेज़ एक XML दस्तावेज में संसाधनों का पता लगाने के लिए SAX एपीआई के EntityResolver इंटरफ़ेस का उपयोग करता।

1

अपने यूआरएल से "संसाधन:" उपसर्ग हटाएं, क्योंकि यह एक जेबॉस विशिष्ट प्रोटोकॉल प्रतीत होता है।

"संसाधन /" पथ को भी छोड़ दें, 1.xml, 2.xml और 3.xml सभी एक ही फ़ोल्डर में रहते हैं और आप आमतौर पर सापेक्ष पथ निर्दिष्ट करते हैं (1 से 2 तक और 1 से 3 तक)।

निम्नलिखित का प्रयास करें:

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

स्ट्रीम का "सापेक्ष पथ" क्या है? सभी एक्सएमएल दस्तावेज़ वास्तविक फ़ाइल सिस्टम से नहीं आते हैं ... –

+0

सापेक्ष पथ उदा। शीर्ष पर फ़ाइल लिस्टिंग में "संसाधन"। यदि आप 1.xml लोड करने के लिए प्रबंधन करते हैं, 2.xml और 3.xml को 1.xml -> के सापेक्ष संबोधित किया जाना चाहिए, इसलिए बिना किसी फ़ोल्डर के (जब प्रश्न में दी गई संरचना का पालन करते हैं) –

+0

XML पार्सर यह नहीं जानता है। इसे 'दस्तावेज़', या एक चरित्र धारा, या कुछ अन्य स्रोत मिलता है जो इसे वर्ण पढ़ सकता है। –

संबंधित मुद्दे