2009-02-13 9 views
6

पर चुना गया है मैंने एक जावा एप्लिकेशन लिखा है जो एक्सएसएल ट्रांसफॉर्म के लिए जेएक्सबी का उपयोग करता है। मैंने अपने क्लासपाथ में saxon9.jar शामिल किया है ताकि मैं कमांड लाइन पर XSLT 1.0 के बजाय XSLT 2.0 का उपयोग कर सकूं।जावा का डिफ़ॉल्ट JAXB कार्यान्वयन मेरे क्लासपाथ

java -classpath ./lib/saxon9.jar:./ -jar myApp.jar 

मैंने एक्सएसएलटी का उपयोग करने के लिए अपने एक्सएसएल में कोड शामिल किया है।

<xsl:comment><xsl:text > 
</xsl:text>XSLT Version: <xsl:value-of select="system-property('xsl:version')" /> <xsl:text > 
</xsl:text>XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> <xsl:text > 
</xsl:text>XSLT Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /> <xsl:text > 
</xsl:text></xsl:comment> 

यह रिपोर्ट करता है।

XSLT Version: 1.0 
XSLT Vendor: Apache Software Foundation (Xalan XSLTC) 
XSLT Vendor URL: http://xml.apache.org/xalan-j 

यह डिफ़ॉल्ट कार्यान्वयन है जो JVM का हिस्सा है।

मैं निर्दिष्ट सैक्सन का उपयोग करने के लिए इसे कैसे प्राप्त करूं?


अप का पालन करें:

तो इन तरीकों में से कोई भी काम (समर्थन निर्देशिका में सैक्सन जार करने को छोड़कर), लेकिन वे सभी काम किया जाना चाहिए था। ऐसा लगता है कि "-jar myApp.jar" का उपयोग करके मेरा एक संयोजन और वैकल्पिक एक्सएसएलटी कार्यान्वयन करना असंगत था। दूसरे शब्दों में ...

जावा -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ जार myApp.jar

.. काम नहीं करता है, लेकिन यह करता है ...

जावा-डीजेवैक्स.एक्सएमएल.ट्रांसफॉर्म। ट्रांसफॉर्मर फैक्टरी = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:.mymy.jar org.dacracot .myApp

... दिलचस्प है, मैं भी कारखाने निर्दिष्ट करने के लिए नहीं है और मैं सैक्सन संस्करण प्राप्त ...

जावा-क्लासपाथ ./lib/saxon9.jar:.mymy.jar org.dacracot.myApp

उत्तर

2

क्या आपने endorsed निर्देशिका में अपना जार लगाने की कोशिश की है?

-Djava.endorsed.dirs=my_dir 
कमांड लाइन में

:

आप प्रभाव वैश्विक होने के लिए नहीं करना चाहते हैं, तो निम्न विकल्प का उपयोग करें।

+0

यह काम करता था, लेकिन मुझे यकीन है कि यह पसंद नहीं है। मेरा पूरा जेवीएम बदलना क्लासपाथ के उद्देश्य से काउंटर लगता है। – dacracot

+0

मुझे पता है। हालांकि यह एक जेवीएम वर्ग को बदलने का एकमात्र तरीका है और यह सबसे अच्छा बचा है। यहां तक ​​कि अपने स्वयं के क्लासलोडर्स के साथ आप जावा या जावैक्स पैकेज से कक्षा नहीं लोड कर सकते हैं। – kgiannakakis

+0

इसने अन्य अनुप्रयोगों को तोड़ दिया ... अर्थात् ग्रहण। – dacracot

0

कैसे

के बारे में
java -Xbootclasspath:lib/saxon9.jar -classpath . -jar myApp.jar 
+0

में परिणाम: वीएम जावा/लैंग/नोक्लास डीफफाउंड एरर: जावा/लैंग/ऑब्जेक्ट एपॉर्ट जाल – dacracot

+0

ओह, मुझे लगता है कि आपको उस मामले में bootclasspath में rt.jar जोड़ने की आवश्यकता है। –

1

इस प्रणाली संपत्ति प्रतिस्थापन TransformerFactory स्थापित करना चाहिए:

java -Djavax.xml.transform.TransformerFactory=com.foobar.AcmeTransformer MyApp 

मेरा मानना ​​है कि कारखाने वर्ग आप चाहते हैं है net.sf.saxon.TransformerFactoryImpl

+0

अभी भी हो रहा है ... थ्रेड में अपवाद "थ्रेड -1" javax.xml.transform.TransformerFactoryConfigurationError: प्रदाता net.sf.saxon.TransformerFactoryImpl नहीं मिला \t javax.xml.transform.TransformerFactory.newInstance (TransformerFactory.java:109 पर)) – dacracot

+0

का उपयोग ... जावा-डीजेवएक्स.एक्सएमएल.ट्रांसफॉर्म। ट्रांसफॉर्मर फैक्टरी = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ -jar myApp.jar – dacracot

2

कारखाने को कॉन्फ़िगर करने के सभी संभावित तरीकों के लिए TransformerFactory.newInstance() के लिए जावाडोक देखें।

  1. सिस्टम संपत्ति
  2. lib/jaxp।गुण
  3. सेवाएं कॉन्फ़िग फ़ाइल (सैक्सन जार में हो सकता है, /META-INF/services/javax.xml.transform.TransformerFactory)
2

पिछले उदाहरण आप पोस्ट (w/-Djavax ओ ...) काम करता है क्योंकि META-INF/सेवाओं निर्देशिका सामग्री

net.sf.saxon.TransformerFactoryImpl

कारण

उपयोग करने के साथ

java.xml.transform.TransformerFactory

नाम की एक फ़ाइल में शामिल है

java -cp lib/saxon9.jar;myjar.jar 

काम करता है और

java -cp lib/saxon9.jar -jar myjar.jar 

नहीं करता कि जार विकल्प का उपयोग करने जावा बताता है (डब्ल्यू) .exe कमांड लाइन के बाकी की उपेक्षा और सब कुछ (classpath शामिल) खींच जार से करने के लिए है प्रकट फ़ाइल यदि आप अपने जार मैनिफेस्ट के क्लासपाथ में saxon9.jar डालते हैं तो इसे काम करना चाहिए।

Manifest-Version: 1.0 
Main-Class: net.my.MainClass 
Class-Path: lib/saxon9.jar 
संबंधित मुद्दे