2014-09-30 6 views
6

मेरे पास एक स्वत: जेनरेटेड साबुन webservice क्लाइंट है (cxf का उपयोग करके), और कुछ तत्व वैकल्पिक होने के लिए चिह्नित हैं।साबुन webservice क्लाइंट में xml 'nil' तत्वों की पीढ़ी को कैसे रोकें?

<PayText xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
<Name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 

ये उत्पन्न कर रहे हैं, तो wsdl शामिल हैं::

मैं इन तत्वों निर्धारित नहीं करते हैं, एक्सएमएल अनुरोध वेब सेवा करने के लिए भेजने के रूप में निम्नानुसार बहुत के तत्वों की है

minOccurs="0" nillable="true" 

कैसे कर सकते हैं मैं इन nil तत्वों की पीढ़ी को रोकता हूं? शायद webservice को इस जानकारी की आवश्यकता नहीं है, जैसे कि जब मैं soapUI का उपयोग करता हूं और शुद्ध तत्वों को शून्य तत्वों को अलग करने के अनुरोध भेजता हूं, तो अनुरोध अभी भी काम करता है।

मेरे बाध्यकारी फ़ाइल:

<jaxb:globalBindings generateElementProperty="false" /> 

तो, मैं उन्हें के दौरान उत्पन्न किया जा रहा रोका जा सकता है भेजें?

+0

संभावित डुप्लिकेट (कम से कम उत्तर के साथ एक प्रासंगिक प्रश्न): http://stackoverflow.com/questions/5897785/jaxb-marshaller-always-writes-xsinil-even-when-xmlelementrequired-false-nil – Davio

+1

वास्तव में नहीं। मेरे पास 'wsdl' का नियंत्रण नहीं है (मैं केवल ग्राहक हूं), न ही स्वत: जनरेटेड कक्षाओं पर (क्योंकि जब भी wsdl अपडेट होता है तो उन्हें पुन: उत्पन्न किया जाना चाहिए)। – membersound

+0

ठीक है, उस स्थिति में आप शायद 'भाग्य = सत्य' की वजह से भाग्य से बाहर हैं जो डब्लूएसडीएल में मौजूद है। – Davio

उत्तर

1

यदि कोई तत्व minOccurs="0" और nillable="true" है तो उत्पन्न संपत्ति प्रकार JAXBElement होगा, JAXBElement<String> जैसे कुछ। जब वह संपत्ति null है तो इसे marshalled XML से हटा दिया जाएगा (शून्य minOccurs="0" से मेल खाता है)। xsi:nil="true" प्राप्त करने के लिए आपको JAXBElement का उदाहरण nil पर true पर सेट करने की आवश्यकता है।

+0

तो यह मेरे '' के कारण है? मैं 'JAXBElement' के साथ काम करना बंद करना चाहता हूं, लेकिन संपत्ति सीधे है, इसलिए मैं' generElementProperty = false' के साथ काम करता हूं। यह तब मार्शल एक्सएमएल से शून्य तत्वों को निकालना असंभव है, क्योंकि वे संपत्ति के परिणामस्वरूप उत्पन्न होते हैं ?? – membersound

+1

यह उन मामलों में से एक है जहां 'JAXBElement' उपयोगी है। इसके बिना संपत्ति को '@XmlElement (nillable = true) 'के साथ एनोटेट किया जाएगा, जो व्यवहार आप देख रहे हैं उसका कारण बन जाएगा। आप 'JAXBElement' का उपयोग क्यों नहीं करना चाहते हैं? –

+2

मैं जैक्सबेलेमेंट के उपयोग को रोक रहा हूं ताकि स्वत: उत्पन्न तत्व गुणों तक पहुंचने पर चलने के लिए एक कम तत्व संपत्ति हो। क्या यह आम तौर पर कहा जा सकता है कि यदि किसी परियोजना में JAXBElement का उपयोग किया जाना चाहिए या नहीं? – membersound

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