2012-07-12 10 views
7

मैं एक वेब सेवा में स्प्रिंग 3 आईओसी और जेएक्सबी/जेएक्स-डब्ल्यूएस का उपयोग कर रहा हूं जो मैंने लिखा था। मुझे अभी डेटा के साथ मामूली समस्या है जो उपभोक्ता को लौटने से पहले गोलाकार होना चाहिए क्योंकि वे मूल्यों की पूर्ण सटीकता को संभालने में सक्षम नहीं हैं।वैसे भी एक जेएक्सबी एडाप्टर को एक कन्स्ट्रक्टर पैरामीटर पास करने के लिए?

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

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

क्या कोई सामान्य राउंडिंग एडाप्टर बनाने के लिए वैसे भी है, और इसके लिए पैरामीटर पास करें? उदाहरण के लिए, के बजाय के लिए:

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=FourDecimalRoundingAdapter.class,type=java.math.BigDecimal.class) 

मैं की तरह कुछ करने में सक्षम होना चाहते हैं:

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=new RoundingAdapter(4),type=java.math.BigDecimal.class) 

जाहिर है कि के रूप में JAXB एडाप्टर खुद को दर्शाता है काम नहीं करता है, लेकिन वहाँ किसी भी तकनीक है मैं एडाप्टर को पैरामीटर पास करने के लिए उपयोग कर सकते हैं? मैं वसंत में गोलाकार एडाप्टर घोषित करने में सक्षम होना पसंद करूंगा और इस तरह इसका उपयोग कर सकता हूं, लेकिन फिर से, मैं एक पुन: प्रयोज्य समाधान तैयार करने में असमर्थ हूं।

धन्यवाद,

एरिक

उत्तर

2

मुझे यकीन है कि कैसे आप इस वसंत के साथ में हुक नहीं हूँ, लेकिन नीचे JAXB तंत्र है कि आप लाभ उठा सकते हैं का वर्णन है।

आप निम्नलिखित है: तो फिर स्टैंडअलोन JAXB API का उपयोग करके आप निम्नलिखित कर सकता है

@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=RoundingAdapter.class,type=java.math.BigDecimal.class) 

। नीचे दिया गया कोड का अर्थ है जब भी RoundingAdapter का सामना करना पड़ता है, निर्दिष्ट उदाहरण का उपयोग किया जाना चाहिए।

marshaller.setAdapter(new RoundingAdapter(4)); 
unmarshaller.setAdapter(new RoundingAdapter(4)); 

अधिक जानकारी के लिए

+2

इस संदर्भ में काफी सरल प्रतीत होता है जहां मैं अपने आप को unmarshalling मार्शलिंग को नियंत्रित किया जाएगा /। लेकिन जेएक्स-डब्ल्यूएस के संदर्भ में जहां यह मेरे साथ सौदा किए बिना मेरे लिए सभी काम करता है, मैं इसे कैसे इंगित करता हूं कि मैं नया राउंडिंग एडाप्टर (4) का उपयोग करना चाहता हूं? मैं जेएक्स-डब्ल्यूएस के साथ किसी भी मार्शलर्स/अनमारशर्स को कभी भी चालू नहीं करता .... –