java - (सीमित) एक्सएसएलटी में जावा एक्सटेंशन फ़ंक्शन समर्थन



xml xslt (0)

मैंने लंबे समय से जावा (Xerces2-J और Xalan-J) द्वारा प्रदान की गई डिफ़ॉल्ट XML पुस्तकालयों के साथ किया है - कभी-कभी और सीधे उन पुस्तकालयों के नवीनतम संस्करण का उपयोग करते समय, जब ज़रूरत होती है ऐसा प्रतीत होता है कि मैं इन पुस्तकालयों की कुछ सीमाओं के खिलाफ चल रहा हूं - विशेषकर Xalan-J के साथ जो अब वास्तव में बनाए रखा नहीं है और बिना लगभग 6 वर्षों के रिलीज के ...

मुझे बुलाया बाहरी सेवाओं से जानकारी खींचने के लिए कुछ कस्टम फ़ंक्शंस प्रदान करने की आवश्यकता है, इसलिए उन्हें जावा में लागू किया जाना चाहिए। (यानी मैं उन्हें एक्सएसएलटी के भीतर, एक्सएसएलटी या जावास्क्रिप्ट फ़ंक्शंस के रूप में भी लागू नहीं कर सकता, आदि।) मैंने एक्सलान-जावा एक्सटेंशन का इस्तेमाल करने से पहले यह किया है। हालांकि, यह प्रदान करना या तो अनुमति-सभी या कुछ भी नहीं है:

मुझे एक जावा एक्सटेंशन तक पहुंच प्रदान करने की आवश्यकता है - लेकिन जावा के बिना किसी भी मनमाना कॉल की अनुमति के बिना System.exit() उदाहरण के लिए, एक एम्बेडेड कॉल को System.exit() ), और आदर्श रूप से, XSLT लेखक के बिना भी जानना आवश्यक है कि यह जावा फ़ंक्शन है (उदाहरण के लिए xmlns:java="http://xml.apache.org/xalan/java" का उपयोग करके)। आदर्श रूप में, मैं TransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); को भी रखने में सक्षम TransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

मैं XPath.setXPathFunctionResolver का उपयोग करने के लिए वास्तव में क्या कर रहा हूं (लगभग) कर सकता XPath.setXPathFunctionResolver , लेकिन यह केवल XPath.setXPathFunctionResolver कॉल के लिए काम करता है - और मुझे XalL द्वारा एक्सएसएलटी में उपयोग के लिए एक कस्टम XPath सेट करने का एक तरीका नहीं मिला है। (यह भी XPathFactory की XPathFactory जिसे XPathFactory पर सेट नहीं किया जा सकता है, हालांकि मैं TransformerFactory पर सेट होने के साथ दूर हो सकता हूं - अनदेखा कर रहा हूं कि TransformerFactory पर सेट होने पर, TransformerFactory फैक्टर भी स्वतः ही एक्सपाथ एफटीसी पर एक ही झंडा निर्धारित करता है वह प्रयोग करता है।)

इसलिए मैंने सैक्सन (सैक्सन-हे 9.5.1-1) को एक कोशिश देने का निर्णय लिया - और तुरंत दो मुद्दों पर ध्यान दे रहा हूं:

  1. केवल XPath का उपयोग करते समय, XPath.setXPathFunctionResolver को सक्सन के अंतर्गत कोई भी प्रभाव नहीं लगता है। set कॉल बिना किसी समस्या के पूरा हो जाता है, लेकिन पारित में XPathFunctionResolver पर XPathFunctionResolver को कभी भी सक्सन के नीचे नहीं बुलाया जाता है। (यह बस एक्सलान के तहत "बस काम करता है।") क्या सक्सन के लिए कुछ अतिरिक्त कॉन्फ़िगरेशन आवश्यक है - या क्या यह हैई संस्करण की एक सीमा है?

  2. मैंने http://www.saxonica.com/documentation/#!extensibility/integratedfunctions/ext-simple-J- पर देखा है, जो लेखक के मुताबिक भी है, वह संस्करण के तहत भी है। यह ठीक उसी तरह दिखता है जो मुझे चाहिए - हालांकि ( XPathFunctionResolver तहत XPathFunctionResolver के साथ), मुझे नहीं पता कि यह कैसे XSLT प्रोसेसिंग में तार करने के लिए है (इसका जवाब XALAN रजिस्टर एक्स्प्शन फंक्शन द्वारा दिया गया है, जैसे कि सैकॉन में सवाल।)





saxon