2010-01-11 6 views
5

मुझे जावा ऑब्जेक्ट्स से कई XML दस्तावेज़ जेनरेट करने की आवश्यकता है। ऑब्जेक्ट्स गहरी ओआरएम मैप किए गए ऑब्जेक्ट्स हैं, और एक्सएमएल दस्तावेज़ एक खोज सूचकांक (ला लासीन) के लिए हैं। मैं एक विन्यास फाइल बनाने और इसे जावा ऑब्जेक्ट को खिलाने में सक्षम होना चाहता हूं और इसे कॉन्फ़िगरेशन में निर्दिष्ट XML को थूकना चाहता हूं। आदर्श रूप से कॉन्फ़िगरेशन में जावा पक्ष पर XPath पर संभवतः (संभवतः गहरी) गुणों का मैपिंग होता है या एक्सएमएल पक्ष पर ऐसा कुछ भी होता है।जावा से मनमाना एक्सएमएल उत्पन्न करने के लिए एक अच्छी लाइब्रेरी क्या है?

जेएक्सबी अनुपयुक्त है क्योंकि यह ऑब्जेक्ट डेटा से एक्सएमएल नोड्स में एक मैपिंग बनाना चाहता है। मैंने जेआईबीएक्स और एक्सस्ट्रीम को देखा है, लेकिन उनमें से कोई भी ऐसा करने के लिए डिज़ाइन नहीं किया गया है जिसके बारे में मैं बात कर रहा हूं।

अनिवार्य रूप से जो मैं चाहता हूं वह डोजर है, लेकिन एक अन्य जावा बीन की बजाय एक्सएमएल दस्तावेज़ को अपने लक्ष्य के रूप में बनाने के लिए डिज़ाइन किया गया है। मेरे शोध से अब तक ऐसा लगता है कि मुझे इसे खुद लिखना होगा। क्या कोई बेहतर विकल्प प्रदान कर सकता है?

संपादित करें: समाधान जावा फ़ाइलों को संशोधित करने की क्षमता पर समाधान नहीं किया जाना चाहिए। एनोटेशन आधारित सिस्टम यहां मेरे उद्देश्यों के लिए बेकार हैं। व्यक्तिगत मैपिंग के लिए 'अनुवादकों' को परिभाषित करना संभव होना चाहिए जैसा कि यह डोज़र में है।

यह ध्यान दिया जाना चाहिए कि मुझे यह निर्दिष्ट करने में सक्षम होना चाहिए कि जावा में दिया गया इनपुट फ़ील्ड एक्सएमएल आउटपुट में कई अलग-अलग स्थानों में आउटपुट हो सकता है, शायद कुछ मामलों में परिवर्तित हो रहा है, न कि दूसरों में।

मैंने पहले से ही कुछ प्रकार के सीधे जावा को ऑब्जेक्ट्स के एक्सएमएल अनुवाद में और फिर एक्सएसएलटी का उपयोग करके अपना काम करने पर विचार किया है, लेकिन इसके साथ समस्या यह है कि ये बिडरेक्शनल कनेक्शन के साथ गहरी वस्तुएं हैं। एक्सएमएल के ऑब्जेक्ट्स के किसी मैपिंग में ऑब्जेक्ट पदानुक्रम में कितना गहराई लगाना मुश्किल होगा, भले ही यह ट्रैक कर सके कि किस ऑब्जेक्ट को छूट दी जानी चाहिए क्योंकि वे पहले से ही देखे गए थे।

+0

JiBX इस के लिए अच्छा होना चाहिए, क्यों आप इसे पसंद नहीं किया? – skaffman

उत्तर

4

मैं इस का उपयोग करें: Simple

+0

यह पूरी तरह से एनोटेशन आधारित लगता है। मैं एक कॉन्फ़िगरेशन फ़ाइल के माध्यम से सख्ती से अपना लक्ष्य पूरा करने में सक्षम होना चाहता हूं और संभावित रूप से कुछ डेटा को प्रारूपित करने के लिए अनुवादक ऑब्जेक्ट्स का एक सेट सक्षम करना चाहता हूं। इसके अतिरिक्त, मुझे एकाधिक आउटपुट फ़ील्ड में एकल इनपुट प्रॉपर्टी निर्दिष्ट करने का कोई तरीका नहीं दिखता है। – Jherico

+0

उपरोक्त, क्योंकि इसने मूल प्रश्न का उत्तर दिया था। –

+0

इतना नहीं। मैंने सोचा कि मैंने इसे बहुत स्पष्ट बना दिया है * मैं चाहता था * एक विन्यास फाइल। – Jherico

1

आप Castor को देखा है?

हालांकि यह मार्शल करने के लिए केस्टर का डिफ़ॉल्ट व्यवहार पर भरोसा करने के लिए संभव है और unmarshal जावा एक XML दस्तावेज में वस्तुओं:

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

कास्टर एक मैपिंग फ़ाइल का उपयोग करके अपने कुछ मार्शलिंग/अनमर्शलिंग व्यवहार को निर्दिष्ट करने की अनुमति देता है। यह फ़ाइल कैस्टर को स्पष्ट जानकारी देती है कि दिए गए XML दस्तावेज़ और जावा ऑब्जेक्ट्स का एक निर्धारित सेट एक-दूसरे से कैसे संबंधित है।

एक और संभावना JXM हो सकती है; अपने वेबपृष्ठ से:

जावा एक्सएमएल मैपिंग (जेएक्सएम) जावा ऑब्जेक्ट्स को एक्सएमएल में लिखने और उन्हें फिर से पढ़ने के लिए एक उपकरण है। जेएक्सएम एक डिफ़ॉल्ट मैपिंग प्रदान करता है ताकि जावा ऑब्जेक्ट्स जो जावा बीन नामकरण सम्मेलनों का पालन करें, एक विधि को कॉल करके एक्सएमएल को लिखा जा सकता है। जेएक्सएम ढांचे के साथ मैपिंग कक्षाओं को बनाकर और पंजीकरण करके डिफ़ॉल्ट मानचित्रण को अनुकूलित किया जा सकता है।

जेएक्सएम अन्य एक्सएमएल बाध्यकारी उपकरण से अलग है जिसमें ऑब्जेक्ट्स को जेएक्सएम कोड से शामिल करने या प्राप्त करने की आवश्यकता नहीं है। ऑब्जेक्ट्स में कोई जेनरेट कोड शामिल नहीं है, और उन्हें जेएक्सएम इंटरफेस को लागू करने की आवश्यकता नहीं है। एक्सएमएल डिस्क्रिप्टर की बजाय जावा कोड लिखकर अनुकूलन किया जाता है।

+0

कैस्टर जो कुछ मैंने देखा है उसके लिए सबसे नज़दीक दिखता है। हालांकि, इसकी कक्षा केंद्रित कॉन्फ़िगरेशन मुझे आश्चर्यचकित करता है अगर यह एक ही इनपुट फ़ील्ड के एकाधिक मैपिंग्स को एकाधिक आउटपुट में अनुमति देता है। मुझे गहरे खेतों में मैपिंग के कुछ उदाहरण भी नहीं दिखते हैं। हालांकि मैं आगे की जांच करूंगा। – Jherico

0

Xmappr पर एक नज़र डालें।

इसे बाहरी एक्सएमएल के माध्यम से कॉन्फ़िगर किया जा सकता है। आपके पास कई मैपिंग हो सकती हैं जो एक ही इनपुट ऑब्जेक्ट से विभिन्न आउटपुट उत्पन्न करती हैं।

इसके अलावा हम मदद करने के इच्छुक हैं - बस मेलिंग सूची पर पूछें।

0

हमने अतीत में अपाचे वेग का उपयोग इसे सरल रखने के साधन के रूप में किया है।

बस एक्सएमएल के लिए एक टेम्पलेट बनाएं, डेटा संरचना को पॉप्युलेट करें और मानचित्र में डेटा संरचना इंजेक्ट करें। यदि आपको आवश्यकता हो तो यह आपको रन टाइम पर एक्सएमएल बदलने की अनुमति देता है (जब तक आपकी डेटा संरचना में सभी फ़ील्ड हों)।

यह दस्तावेज़ बनाने के लिए एक बहुत तेज़ और लचीला तरीका है, यह एक डोम नहीं बनाता है और इसलिए स्मृति के साथ बहुत ही पारदर्शी है।

+0

नकारात्मकता यह है कि यदि आप टेम्पलेट्स को गड़बड़ करते हैं तो आप कुछ परिस्थितियों में अमान्य/गलत XML उत्पन्न कर सकते हैं। –

+0

पूरी तरह से सहमत हैं। हालांकि इसे ठीक करना मुश्किल नहीं है। यदि आप चाहें तो आप एक अलग सत्यापन चरण जोड़ सकते हैं। – Fortyrunner

0

समाधान आप चाहते हैं EclipseLink MOXy है:

MOXY एक्सटेंशन के साथ एक JAXB कार्यान्वयन है

MOXY एक बाहरी कॉन्फ़िगरेशन फ़ाइल (एक्सटेंशन के साथ JAXB एनोटेशन के आधार पर) है:

XPath आधारित मैपिंग, गहरी मानचित्रण के लिए है:

ORM मैप की वस्तुओं द्विदिश रिश्तों के लिए समर्थन सहित, को संभालने के लिए बनाया गया है:

0

आप जो ORM आप का उपयोग निर्दिष्ट नहीं है, लेकिन यदि कोई संयोग से यह हाइबरनेट है, तो आप जावा < करने के लिए उपयोग कर सकते हैं - और साथ> एक्सएमएल मानचित्रण। दस्तावेज डीबी मैपिंग के लिए उतना अच्छा नहीं है, लेकिन इसका उपयोग करना मुश्किल नहीं है। बड़ा फायदा: आपके पास एक कम निर्भरता है, सीखने के लिए एक कम ढांचा है, और डीबी मैपिंग के लिए आपने जो अवधारणाएं सीखी हैं, वह अधिकतर एक्सएमएल मैपिंग पर लागू नहीं होती है।

देखें: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/xml.html

1

XOM पर एक नजर डालें, यह एक्सएमएल दस्तावेजों के निर्माण के लिए बहुत ही आसान है।

http://www.cafeconleche.org/XOM/

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

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