2015-02-19 11 views
5

मैंने एक जार बनाया है जिसमें एक डीटीडी फ़ाइल है। मैं इस जार का बाहरी अनुप्रयोग में उपयोग करना चाहता हूं, जिसमें डीटीडी फाइल का उपयोग एक्सएमएल फाइल के लिए किया जाएगा।जहां पैकेज के अंदर डीटीडी डालना है

मेरा सवाल यह है कि मैं अपनी डीटी फ़ाइल (जो .jar फ़ाइल के अंदर है) को एक्सएमएल से कैसे सुलभ कर सकता हूं?

जैसा कि हम अन्य कॉन्फ़िगरेशन फ़ाइलों में करते हैं, चलिए कहते हैं कि स्ट्रैट्स हाइबरनेट आदि हैं, हम XML में डीटीडी को परिभाषित करते हैं जो .jar फ़ाइलों में शामिल हैं। मैं अपनी जार फ़ाइल में ऐसा करना चाहता हूं लेकिन रास्ते को समझने में सक्षम नहीं हूं, कृपया मदद करें।

उत्तर

3

आप एक org.xml.sax.EntityResolver

public class MyResolver implements EntityResolver { 

    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
     if (systemId.contains("my.dtd")) { 
      InputStream myDtdRes = getClass().getResourceAsStream("/com/yourcompany/my.dtd"); 
      return new InputSource(myDtdRes); 
     } else { 
      return null; 
     } 
    } 
} 

को लागू करने और अपने DocumentBuilder.setEntityResolver()

DocumentBuilder docBuilder = ... 
docBuilder.setEntityResolver(new MyResolver()); 
1

के साथ उपयोग करें आप की प्रतिलिपि करने के लिए अपने DTD के सार्वजनिक या सिस्टम आईडी को हल करने के लिए एक EntityResolver वर्ग बनाने की आवश्यकता कर सकते हैं डीटीडी जिसे आप जार में रख रहे हैं।

DocumentBuilderFactory factory = xmlFactories.newDocumentBuilderFactory(); 
factory.setNamespaceAware(true); 
factory.setValidating(false); 
DocumentBuilder documentBuilder = factory.newDocumentBuilder(); 
documentBuilder.setEntityResolver(new EntityManager()); 

...... 

public class EntityManager implements EntityResolver { 
    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
     /* code to check the public or system ID and return contents of DTD */ 
    } 

} 
2

यहाँ आप के लिए कोड के टुकड़े है ...

DTD जोड़े जार

DTD अपने जार करने के लिए DTD डालना ज़रूरी है

उपयोग रिज़ॉल्वर वर्ग

DocumentBuilderFactory myFactory = xmlFactories.newDocumentBuilderFactory(); 
    myFactory.setNamespaceAware(true); 
    myFactory.setValidating(false); 
    DocumentBuilder db = myFactory.newDocumentBuilder(); 
    db.setEntityResolver(new EntityManager()); 



    public class EntityManager implements EntityResolver 
    { 
     public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
      /* returns contents of DTD */ 
     } 

    } 

जेएआर

से लोड डीटीडी
InputStream ins = this.getClass().getResourceAsStream("project/mypackage/File.dtd"); 

तो, अब आप InputStream है और जैसा कि आप

तरह आशा है कि आप उपयोग कर सकते हैं यह आप में मदद करता है :)

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