xslt - सक्सोन के साथ एक्सलन का उपयोग करना




maven xpath (2)

मैं अपने आवेदन में एक्सलान का उपयोग करता हूं, लेकिन तुलना करने के लिए परीक्षण आउटपुट उत्पन्न करने के लिए एक संदर्भ कार्यान्वयन के साथ सक्सोन का उपयोग करने की आवश्यकता है। मैं उन्हें इकाई परीक्षण के दौरान दोनों का उपयोग करना चाहता हूं हालांकि, जैसे ही मैं परियोजना में सक्सन पर निर्भरता जोड़ता हूं .पीम, यह अनुप्रयोग परीक्षणों के दौरान सभी एक्सएसएलटी और एक्सपीथ संचालन के लिए सक्सोन का इस्तेमाल करता है:

<dependency>
  <groupId>net.sf.saxon</groupId>
  <artifactId>Saxon-HE</artifactId>
  <version>9.4</version>
  <scope>test</scope>
</dependency>

यह एक अलग XPath व्यवहार के कारण उत्पादन उत्पन्न करते समय मुख्य अनुप्रयोग विफल हो जाता है। जब परीक्षा के कार्यक्षेत्र के बाहर मुख्य अनुप्रयोग चलाते हैं तो यह काम करता है।

मैं Xalan का उपयोग कर मुख्य अनुप्रयोग कैसे चला सकता हूं, लेकिन परीक्षणों के दौरान सक्सन का उपयोग कर परीक्षण?

मैंने Xalan और Saxon भागों को चलाने से पहले निम्न संपत्ति सेट करने की कोशिश की है:

System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl ");
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

मैंने विभिन्न परियोजनाओं में एक्सलन और सक्सोन भागों को भी लगाने की कोशिश की है, और मैंने उन्हें एक तिहाई परियोजना से दोनों का उपयोग करने की कोशिश की है, उसी परिणाम के साथ।


अपने रूपांतरण इंजन को चुनने के लिए जेएसीएपी कारखाने तंत्र पर निर्भर रहने से बचें। इसके बजाय इंजन को आप स्पष्ट रूप से लोड करें: यह अधिक विश्वसनीय और बहुत तेज है सक्सोन के लिए, कॉल को बदलें

TransformerFactory.newInstance()

साथ में

new net.sf.saxon.TransformerFactoryImpl()

और Xalan उपयोग के लिए

new org.apache.xalan.processor.TransformerFactoryImpl()

यहाँ पूर्णता का समाधान है:

System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":"
    + XPathFactory.DEFAULT_OBJECT_MODEL_URI,
    "org.apache.xpath.jaxp.XPathFactoryImpl");
System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":"
    + NamespaceConstant.OBJECT_MODEL_SAXON,
    "net.sf.saxon.xpath.XPathFactoryImpl");

XPathFactory jaxpFactory =
    XPathFactory.newInstance(XPathFactory.DEFAULT_OBJECT_MODEL_URI);
XPathFactory saxonFactory =
    XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);