मैं अपाचे एफओपी का उपयोग कर एक XSL रूपांतरण करने की ज़रूरत लोड हो रहा है और मैं इस तरह कोड था:संबंधित पथ का समाधान किया जब XSLT फ़ाइलों
//Setup FOP
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
//Setup Transformer
Source xsltSrc = new StreamSource(new File(xslPath));
Transformer transformer = tFactory.newTransformer(xsltSrc);
//Make sure the XSL transformation's result is piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Setup input
Source src = new StreamSource(new File(xmlPath));
//Start the transformation and rendering process
transformer.transform(src, res);
जहां xslPath
पथ जहाँ मेरे XSLT फ़ाइल संग्रहीत होती है।
मैंने पुष्टि की है कि यह तब काम करता है जब मेरे पास केवल एक एक्सएसएलटी फ़ाइल है, लेकिन मेरी परियोजना में मैंने कई एक्सएसएलटी फाइलों में चीजें बांटी हैं और उन्हें <xsl:import />
टैग के साथ शामिल किया है। इस कॉन्फ़िगरेशन के साथ, मुझे NullPointerException मिलता है क्योंकि यह XSLT में संग्रहीत सभी जानकारी को समझ में नहीं आता है क्योंकि यह विभिन्न फ़ाइलों पर वितरित किया जाता है।
मुझे आश्चर्य है कि Source xsltSrc
परिवर्तनीय में इन सभी फ़ाइलों को लोड करने का कोई तरीका है, इसलिए सभी एक्सएसएल जानकारी उपलब्ध है।
अद्यतन
मैं मैड्स हैनसेन द्वारा दिए गए उत्तर के आधार पर कोड बदल दिया है, लेकिन यह अभी भी काम नहीं करता। मुझे क्लासपाथ में एक्सएसएलटी स्लॉट फाइलों को शामिल करना होगा, इसलिए मैं क्लासलोडर के साथ एक्सएसएलटी फ़ाइल लोड करता हूं। मैंने जांच की है कि url.toExternalForm()
निष्पादित करते समय URL का सही पथ है।
ClassLoader cl = this.getClass().getClassLoader();
String systemID = "resources/xslt/myfile.xslt";
InputStream in = cl.getResourceAsStream(systemID);
URL url = cl.getResource(systemID);
Source source = new StreamSource(in);
source.setSystemId(url.toExternalForm());
transformer = tFactory.newTransformer(source);
यह पाता है और भार myfile.xslt
लेकिन यह अभी भी अन्य XSLT फ़ाइलों के लिए संबंधित पथ का समाधान नहीं होता: इस कोड के अपने नए टुकड़ा है।
मैं क्या गलत कर रहा हूं?
आपके उत्तर के लिए धन्यवाद, लेकिन यह मेरी समस्या का समाधान नहीं करता है, हालांकि आपका उत्तर समझ में आता है। मैंने कोड में अपने परिवर्तनों के साथ अपना प्रश्न अपडेट कर लिया है। – Javi
आपको अपने सिस्टम आईडी के लिए एक पूर्ण पथ प्राप्त करने की आवश्यकता हो सकती है। जब तक आप नहीं जानते कि यह "से" के सापेक्ष पथ को हल करेगा। उस सापेक्ष पथ को किसी पूर्ण पथ में परिवर्तित करने का प्रयास करें जैसे कि: 'स्ट्रिंग xsltSystemId = नई फ़ाइल (systemID) .toURL()। ToExternalForm(); 'या' स्ट्रिंग xsltSystemId = नई फ़ाइल (सापेक्षपाथ) .getAbsolutePath(); ' –
धन्यवाद , मैं पहले से ही उसमें था और मैंने जांच की थी कि जब मैं url.toExternalForm() यह एक पूर्ण पथ मिलता है। लेकिन मुझे नहीं पता कि अब समस्या कहां है। – Javi