2008-12-17 15 views
6

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

विकल्प यह करने के लिए क्या हैं? एक-दूसरे के और पर

  1. मानचित्रण मुझे सचेत करना चाहिए जब एक क्षेत्र की मैपिंग
  2. परिभाषित नहीं किया गया था मानचित्रण कुछ चूक नहीं होनी चाहिए, समान नाम के मानचित्रण क्षेत्रों की तरह: मैं कुछ है कि निम्न आवश्यकताओं को पूरा करना चाहते हैं मानक मैपिंग प्रदान करना, कहें, स्ट्रिंग के लिए int और इसके विपरीत।
  3. मानचित्रण द्विदिश होना चाहिए।
  4. एक जब मानचित्रण परिभाषित करने कोड पूर्णता का उपयोग करने के लिए सक्षम होना चाहिए।

इस के लिए एक आशाजनक ढांचे Dozer है, लेकिन यह 1 और 4 JBeanMapper के साथ भी यही पूरा नहीं करता है। जावा में बस प्रोग्रामिंग 4 करता है लेकिन अन्य आवश्यकताओं नहीं; एक्सएसएलटी का उपयोग शायद 2 को पूरा करता है लेकिन कुछ और नहीं। क्या आपके पास बेहतर विचार हैं?

उत्तर

1

जब हमें यह समस्या हुई, तो हमने जावा में एक उपयोगिता वर्ग में फ़ील्ड मैपिंग कर दिया है। यह एक वास्तविक परेशानी है, खासकर जब आपको कई अलग-अलग वेब सेवाओं में मैप करना पड़ता है और उनमें से प्रत्येक के लिए मैपिंग लिखना पड़ता है (जिनमें से कुछ वस्तुओं के पदानुक्रम के बजाय नामित विशेषताओं का एक साधारण 2 डी मानचित्र है, क्रियां)।

हालांकि इस तरह आपके पास मैपिंग के लक्ष्य की आवश्यकताओं का विश्लेषण करने की शक्ति है, ताकि सर्वोत्तम गुणवत्ता मैपिंग प्राप्त हो सके, डेटा सेट नहीं किया जा सके, और इसी तरह से। आप अपने मैपर में एक कस्टम "अपरिभाषित मैपिंग अपवाद" फेंक सकते हैं जहां आपको आवश्यकता है। और एक शराबी पुस्तकालय प्रतिबिंब और/या जटिल एक्सएमएल मानचित्रण विन्यास फाइल का उपयोग करता है नहीं किया जा रहा से, यह एक रफ़ू दृष्टि तेज़ है।

आईई, यह पोस्ट "जावा में इसे लिखने" के लिए बहस कर रही है।

1

मैंने commons-beanutils के साथ एक समान समस्या हल की।

मेरा अंतिम लक्ष्य एक बड़ी जावा फ़ाइल थी जो डेटा संरचना का निर्माण करेगी और मैपर ने मेरे लिए उस फ़ाइल को बनाया होगा। इस तरह, मैं प्रोग्राम चल रहा था, जबकि स्नैपशॉट से परीक्षण डेटा बना सकता था।

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

मेरा मुख्य समस्या 2MB + जावा फ़ाइलें :) संकलित करने के लिए था

0

वहाँ एक दिलचस्प समाधान है कि आप अगर आप कई थोड़ा अलग वेरिएंट है कि डेटा संरचनाओं मानचित्रण कर रहे हैं मदद कर सकता है है। उदाहरण के लिए यदि आप विभिन्न व्यावसायिक मामलों और उत्पाद प्रकारों के लिए व्यावसायिक ऑर्डर संरचनाओं का मॉडलिंग कर रहे हैं, और अलग-अलग प्रकारों को एड्रेस, अकाउंट आईडी, उत्पादों के लिए कॉन्फ़िगरेशन जानकारी जैसे विभिन्न गुणों के विभिन्न संयोजनों की आवश्यकता होती है।

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

1

Transmorph, EZMorph, डोजर, OTOM उनमें से कुछ आपको बीन मानचित्रण के लिए बीन के लिए देखो कर सकते हैं। मैंने पहले भी डोजर का इस्तेमाल किया और लगता है कि यह पिछले कुछ वर्षों में काफी स्थिर हो गया है है।

5

ModelMapper एक पुस्तकालय आपके मानदंड को पूरा करता है। यह एक मैपिंग एपीआई प्रदान करता है जो गुणों को मैप करने के लिए वास्तविक कोड का उपयोग करता है - इसलिए आपको कोड पूर्णता मिलती है। और यह सुनिश्चित करने के लिए सत्यापन प्रदान करता है कि सभी गंतव्य गुण मैप किए गए हैं। इसके अतिरिक्त यह कुछ चीजें आप भी पता नहीं था आप इस तरह बुद्धिमान मानचित्रण :)

अधिक जानकारी के लिए ModelMapper होमपेज पर बाहर की जाँच के रूप में करना चाहता था प्रदान करता है:

http://modelmapper.org

2

एक अन्य विकल्प MapStruct जिस पर मानचित्रण कोड उत्पन्न करता है समय का निर्माण, प्रकार-सुरक्षित मैपिंग जो रनटाइम पर किसी भी निर्भरता की आवश्यकता नहीं है, जिसके परिणामस्वरूप (अस्वीकरण: मैं MapStruct के लेखक हूँ)।

1

जो रनटाइम के दौरान मानचित्रण कक्षाएं बनाने के लिए बाइट कोड का उपयोग करता है GEDA पर एक नज़र है, जो यह बहुत तेज http://genericdtoassembler.org/ बनाता है। यह बिंदु 1-3 कवर होगा। बिंदु 4 के बारे में मुझे लगता है कि यह एक आईडीई चीज है इसलिए मुझे नहीं लगता कि आपको कोई पुस्तकालय मिलेगा जो तब तक सुविधाजनक होगा जब तक कि इसमें आईडीई प्लगइन्स न हों।