2012-07-11 11 views
5

जेएक्स-डब्ल्यूएस की आवश्यकता है कि प्रेषित सभी वर्गों में एक डिफ़ॉल्ट नियंत्रक (नो-एर्ग कन्स्ट्रक्टर) हो। मैं उस आवश्यकता को समझ नहीं पा रहा हूं क्योंकि ग्राहक डब्लूएसडीएल के आधार पर अपनी कक्षाएं बनाते हैं। आईएमओ यह आवश्यकता केवल उन वर्गों के लिए समझ में आता है जो वेबसाइट सेवा के इनपुट पैरामीटर के रूप में उपयोग किए जाते हैं।जेएक्स-डब्ल्यूएस द्वारा निर्यात की गई वस्तुओं के लिए एक डिफ़ॉल्ट कन्स्ट्रक्टर क्यों आवश्यक है?

क्या कोई जानता है कि उस आवश्यकता को कैसे रोकें?

उत्तर

6

आप JAX-WS का उपयोग करते हैं तो आप एक JAXB कार्यान्वयन का उपयोग कर रहे एक्सएमएल करने के लिए अपने जावा वस्तुओं को क्रमानुसार करने।

तो, 'समस्या' यह है कि जेएक्सबी कैसे काम करता है।

JAXB उपयोग करने के लिए, आप एक JAXBContext इसे पारित सभी वर्गों कि unmarshaled मार्शल किया जा सकता है/बनाना होगा। संदर्भ बनाते समय, JAXB जांच करेगा कि सभी दिए गए वर्गों में नो-एर्ग कन्स्ट्रक्टर है। यदि उनमें से कम से कम एक वर्ग में इस प्रकार का कन्स्ट्रक्टर नहीं है, तो संदर्भ नहीं बनाया जाएगा।

क्यों JAXB ऐसा करें? XML से ऑब्जेक्ट (unmarshalling) में परिवर्तित होने पर इसे केवल इस नो-एर्ग कन्स्ट्रक्टर की आवश्यकता होती है, लेकिन समस्या तब होती है जब आप संदर्भ बना रहे हैं, JAXB नहीं जानता कि आप क्या करना चाहते हैं (मार्शल या अनमशाल)!

निष्कर्ष: जेएक्सबी केवल उन वर्गों को स्वीकार करेगा जो यह मार्शल और अनमशाल कर सकते हैं। अधिक जानकारी here

यह जानकर, जेएक्स-डब्ल्यूएस में क्या होता है?

आप एक @WebMethodमापदंडों और वापसी मान कक्षाएं एक JAXB संदर्भ में जोड़ दिया जाएगा की घोषणा है। और इस वजह से वेब सेवा इनपुट और आउटपुट से संबंधित सभी वर्गों को नो-एर्ग कन्स्ट्रक्टर की आवश्यकता होती है।

निष्कर्ष: JAXB गलती ;-)

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

आप XMLAdapter का उपयोग कर सकते हैं! अधिक जानकारी के लिए this post देखें ...

+0

तो समस्या यह प्रतीत होती है कि जेएक्सबी उन वर्गों के बीच अंतर नहीं करता है जिन्हें इसे मार्शलिंग या अनारशल करना है। यदि यह सुविधा समर्थित थी तो JAX-WS एक संबंधित JAXBContext बना सकता है। मुझे लगता है कि आने वाले जेएक्सबी विनिर्देश के लिए एक अच्छा फीचर अनुरोध करेगा। – Stefan

+0

मैं दृढ़ता से आपसे सहमत हूं। दरअसल मोक्सी के लोग (एक्लिप्ससेंक द्वारा एक जेएक्सबी कार्यान्वयन) में बहु-तर्क रचनाकार समर्थन जोड़ने के लिए एक खुली टिकट है: https://bugs.eclipse.org/bugs/show_bug.cgi?id=328951 – ggarciao

0

क्या कोई जानता है कि उस आवश्यकता को कैसे रोकें?

हां - जेएक्स-डब्ल्यूएस को फिर से लिखें।

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

यह किसी और के ढांचे का उपयोग करने में कमी है: आपको अपने नियमों से खेलना होगा।

ग्राहकों डबल्यूएसडीएल

मैंने सोचा कि क्या पुस्तकालय ग्राहकों कर मदद की है के आधार पर अपने स्वयं के कक्षाओं पैदा करते हैं। आपने डब्ल्यूएसडीएल को पार्स और व्याख्या करने के लिए कोड नहीं लिखा था, है ना?

+0

ऑब्जेक्ट्स को सर्वर पक्ष पर जेएक्स-डब्ल्यूएस द्वारा पॉप्युलेट नहीं किया जाना चाहिए। जेएक्स-डब्ल्यूएस केवल उन्हें प्रसारित करता है। – Stefan

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

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