2011-10-17 17 views
9

मेरी वर्तमान परियोजना में, हम एक जेडीके 1.6 रनटाइम पर्यावरण को लक्षित करते हैं। विरासत के मौसम के लिए, जेरिस जेएआर फाइलों को एप्लिकेशन में बंडल किया जाता है।जेडीके 1.6 और जेर्सिस?

इनकी अब आवश्यकता नहीं है? जेडीके ने (थोड़ी देर के लिए) एक्सएमएल पार्सिंग पुस्तकालयों को जेडीके में बंडल किया था?

+0

क्यों न केवल उन्हें बंडल किए बिना कोशिश करें? –

+1

वे 1.5 के मुकाबले कम या ज्यादा आवश्यक नहीं हैं। 1.6 में ज़ीरस का कुछ विचित्र फोर्क संस्करण है, 1.5 से थोड़ा अलग विचित्र संस्करण है। @ डेव न्यूटन के अनुसार, यह बताने का एकमात्र तरीका है कि यह आपके लिए काम करेगा या नहीं। – bmargulies

+0

मुझे लगता है कि मुझे हमारी परियोजना पर कुछ निर्भरता विश्लेषण सॉफ्टवेयर चलाने होंगे। मुझे यकीन नहीं होगा कि अगर कुछ ओपन सोर्स फ्रेमवर्क हम उपयोग करते हैं तो जेएक्सपी का उपयोग करने के बजाय सीधे जेरिस पर निर्भर करता है। –

उत्तर

12

एक्सएमएल पार्सर को बंडल करना 1.4 के बाद आवश्यक नहीं है जब JAXP जेआरई में जोड़ा गया था। आपको जेएक्सपी का उपयोग करना चाहिए और सीधे जेरिस को कॉल नहीं करना चाहिए। आंतरिक रूप से, जेआरई बंडल और जेरिस का उपयोग करता है (एक "com.sun" उपसर्ग के साथ)।

+3

यह सही है। कुछ गुगलिंग के बाद, ऐसा लगता है कि जेडीके 1.4 में जेएक्सपी 1.1 का समर्थन था और अपाचे वर्ग नामों के साथ वर्गीकृत अपाचे को बंडल किया गया था; जब लोग जेडीके के साथ बंडल किए गए नए संस्करणों का उपयोग करना चाहते थे तो समस्याएं ढेर हो गईं। (http://people.apache.org/~edwingo/jaxp-faq.html#JDK14) –

20

ये एक्सएमएल सेवाएं तथाकथित "सेवा प्रदाता" तंत्र का उपयोग कर अनुप्रयोग पर्यावरण में प्लग करती हैं।

यह काम करता है इस प्रकार है:

  1. यह प्रणाली संपत्ति है कि कारखाने वर्ग के लिए वास्तव में अंक, कि इस्तेमाल किया जाना चाहिए खोजने की कोशिश करता। जैसे -Djavax.xml.parsers.SAXParserFactory=<some class>
  2. यदि सिस्टम प्रॉपर्टी नहीं मिली FactoryFinder विशेष गुण फ़ाइल में संपत्ति की तलाश में है। उदाहरण के लिए ${java.home}/lib/jaxp.properties
  3. यदि फ़ाइल प्रॉपर्टी नहीं मिली तो फैक्टरीफ़िंडर क्लास पथ META-INF/services/<some service> में सेवा विवरण ढूंढता है, उदा। META-INF/services/javax.xml.parsers.SAXParserFactory। यह एक फ़ाइल है जिसमें फ़ैक्टरी क्लास नाम होना चाहिए उदाहरण के लिए org.apache.xerces.jaxp.SAXParserFactoryImpl
  4. यदि कक्षा पथ जावा में ऐसी कोई फ़ाइल नहीं है तो इसका डिफ़ॉल्ट कारखाना कार्यान्वयन उपयोग करता है।

तो यदि आपके पास स्पष्ट कारखाने वर्ग जावा को इंगित करने वाली सिस्टम प्रॉपर्टी नहीं है तो चुपचाप उपयुक्त कार्यान्वयन का चयन करेगा।

+1

एक बहुत ही उपयोगी उत्तर के लिए धन्यवाद, भले ही उसने मेरे प्रश्न का उत्तर नहीं दिया हो। –

+4

इस तरह मानक स्थिर 'SAXParserFactory' कोड काम करता है, देखें [लिंक] (http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance%28 % 2 9) इन और कुछ और विवरणों के लिए। आपकी पसंद के एक्सएमएल लाइब्रेरी के साथ प्रारंभिक जेडीके/जेआरई बंडल तंत्र को जोड़े जाने के ये तरीके हैं। जेडीके/जेआरई बंडल एक्सएमएल पुस्तकालयों को पूरी तरह से _Java एंडोर्सड स्टैंडर्ड ओवरराइड तंत्र का उपयोग करके प्रतिस्थापित करने की संभावना भी है: _ http://docs.oracle.com/javase/7/docs/technotes/guides/standards/, उदा। '-Djava.endorsed.dirs = path_to_folder_containing_new_library_jars'। –

11

जेडीके में पार्सर ज़ेरेस का एक कांटा था, लेकिन यह बहुत छोटी है। मैं प्राथमिकता में पार्सर के अपाचे संस्करण का उपयोग करने के लिए हमेशा उत्पादन अनुप्रयोगों की अनुशंसा करता हूं। बग दुर्लभ हैं, लेकिन वे अप्रत्याशित हैं, और वे न केवल उन कोने के मामलों को प्रभावित करते हैं जो वास्तविक जीवन में नहीं देखे जाते हैं; मैंने कई मामलों को देखा है जहां काफी उबाऊ XML दस्तावेज़ों को पार्स किया जा रहा है, और गुण मान के लिए एप्लिकेशन को दूषित डेटा पास कर दिया गया है। सूर्य/ओरेकल ने समस्या को ठीक करने में कोई रूचि नहीं दिखाई है। अपाचे Xerces हर बार प्रयोग करें।

+1

हाय। क्या आपके पास जेडीके पार्सर में बग के लिए कुछ संदर्भ/विवरण हैं? और आप किस जेडीके संस्करण के बारे में बात कर रहे हैं? –

+0

जब लोग मुझे सैक्सन बग रिपोर्ट भेजते हैं जो जेडीके पार्सर समस्याओं के कारण हो जाते हैं, तो अब मैं ओरेकल को समस्याओं की रिपोर्ट करने के लिए परेशान नहीं हूं क्योंकि ऐसा करने से कोई प्रभाव नहीं पड़ता है। तो नहीं, मैं संदर्भ उद्धृत नहीं कर सकता। –

1

अनुमोदित मानक ओवरराइड तंत्र ठीक काम करता है। Djava.endorsed.dirs = path_to_folder_containing_new_library_jars जेडीके 1.6 के साथ इस मुद्दे को हल करेंगे।

मैंने थिमलीफ के संदर्भ में उपरोक्त समाधान की पुष्टि की है। कुछ मामलों में यदि आप LEGACYHTML5 मोड के लिए जाते हैं, और यदि आप अनकॉक्टेड HTML टैग्स को स्वत: सुधारने के लिए NekoHtml पार्सर का उपयोग करते हैं, तो नेको की ज़ीरिस जार पर निर्भरता है। कक्षापथ स्थापित करने से समस्या हल नहीं होती है।

धन्यवाद एस-एन-यूएसहाकोव।

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