2009-11-30 14 views
5

मैं जेएक्सबी कंपाइलर द्वारा जेनरेट की गई .java फ़ाइलों में विशेषता ऑर्डर को नियंत्रित करना चाहता हूं।जेएक्सबी कंपाइलर और विशेषता ऑर्डर

मुझे पता है कि एक्सएमएल सत्यापन के लिए विशेषता आदेश महत्वपूर्ण नहीं है। एक रिग्रेशन टेस्ट पर्यावरण में marshalled xml की पाठ्यचर्या तुलना के लिए आदेश महत्वपूर्ण है। फ़ाइल में विशेषताओं का क्रम सीधे marshalled xml टैग में विशेषताओं के क्रम को प्रभावित करता है।

प्रत्येक बार जेएक्सबी कंपाइलर चलाए जाते हैं विशेषता समूह अलग-अलग क्रम में दिखाई देते हैं, यहां तक ​​कि स्कीमा में कोई बदलाव नहीं होता है। इस व्यवहार को रोकने के लिए कंपाइलर पर कोई स्पष्ट विकल्प उपलब्ध नहीं है।

मैं जनरेटिक रूप से उत्पन्न .java फ़ाइलों में विशेषताओं को पुन: क्रमबद्ध करने के लिए एक पोस्ट-संकलन स्क्रिप्ट चलाने से बचना चाहता हूं क्योंकि यह विशेषता समूह को तोड़ देता है, लेकिन मुझे यकीन नहीं है कि एक और विकल्प है।

किसी भी सुझाव की बहुत सराहना की जाती है।

धन्यवाद, डेव

उत्तर

0

यह धागा मेरी समस्या का एक बड़ा समाधान प्रदान करता है।

Using XSL to sort attributes

जवाब से एक एक XSL को बदलने कि सिर्फ गुण reorders शामिल हैं। थोड़ा धीमा अगर पूरी तरह से काम करता है।

1

मैं बजाय शाब्दिक की तुलना करते समय के उत्पादन में मान्य करने के लिए एक XML पार्सर का उपयोग कर सलाह देते हैं। यदि आप इसे फिर से ऑर्डर करने के लिए एक्सएमएल को पार्स करने जा रहे हैं, तो आप एक्सएमएल टूल्स का उपयोग करके तुलना भी कर सकते हैं।

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

एक्सएमएल उपकरण का उपयोग कर एक्सएमएल डेटा की तुलना करने के तरीकों के रूप में, मैंने कभी इसे बड़े पैमाने पर नहीं किया है, लेकिन this link mentions a few free tools। मेरे लिए जुनीट का विस्तार जो एक्सएमएल से संबंधित दावे प्रदान करता है, मेरा पहला कदम होगा, क्योंकि यह मेरे मौजूदा परीक्षणों के साथ अच्छी तरह से एकीकृत हो सकता है। अन्यथा, चूंकि आप मुख्य रूप से सटीक समतुल्यता की तलाश में हैं, तो आप केवल दो एक्सएमएल फाइलों को पार्स कर सकते हैं, फिर 'अपेक्षित' फ़ाइल में नोड्स पर फिर से सक्रिय करें और देखें कि क्या वे नोड्स 'वास्तविक' फ़ाइल में मौजूद हैं या नहीं। फिर बस किसी अन्य नोड्स की जांच करें जिसे आप देखने की उम्मीद नहीं करते हैं।

+0

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

+0

इसके अतिरिक्त मैं .java फ़ाइल में विशेषताओं को फिर से ऑर्डर करने पर विचार कर रहा था - एक्सएमएल प्रतिक्रिया नहीं। मुझे लगता है कि मार्शलर प्रतिबिंब का उपयोग करता है क्योंकि .java फ़ाइल में ऑर्डर सीधे मार्शल प्रतिक्रियाओं में विशेषता ऑर्डर को नियंत्रित करता है। – daveg

+0

मैंने आपके दो बिंदुओं को संबोधित करने के लिए अपना जवाब संपादित किया। –

1

यदि आपको XML दस्तावेज़ों की टेक्स्ट तुलना करने की आवश्यकता है, तो XML ऑर्डर के आउटपुट को नियंत्रित करने की कोशिश करके इसे करने के बेहतर तरीके हैं जो विशेषता ऑर्डरिंग के बीच अंतर नहीं करते हैं।

उदाहरण के लिए, XMLUnit है, जो विशेष रूप से एक्सएमएल दावे के लिए एक जूनिट एक्सटेंशन है, और यह व्हाइटस्पेस को संभालने और काफी अच्छी तरह से ऑर्डर करने के लिए है।

एक और सामान्य समाधान XOM'sCanonicalizer है, जो एक्सएमएल डीओएम आउटपुट करता है जैसे विशेषता ऑर्डरिंग और व्हाइटस्पेस अनुमानित है। बेहद सुविधाजनक।

तो ... जेएक्सबी (या जो कुछ भी) एक्सएमएल उत्पन्न करता है, जैसा कि यह फिट दिखाई देता है, फिर XMLUnit या XOM के माध्यम से आउटपुट चलाएं और तुलना करें। इसमें जेएक्सबी के आधार पर नहीं जोड़ा गया है, यह किसी भी जेनरेट किए गए एक्सएमएल के साथ काम करेगा।

4
जाहिर

, JAXB 2.0 में आप एनोटेशन @XmlAccessorOrder या @XmlType (propOrder =)

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