java - JAXB XMLAdapter विधि अपवाद फेंकता नहीं है



unmarshalling (1)

XMLAdapter#unmarshal(ValueType) :

फेंकता है: java.lang.Exception - यदि रूपांतरण के दौरान कोई त्रुटि है। कॉलर उपयोगकर्ता को त्रुटि रिपोर्टिंग के लिए मान्यकरणएवेंटहैंडलर द्वारा उत्तरदायी है।

तो, हां - अपवाद खाया जाता है और फिर ValidationEventHandler का उपयोग करके रिपोर्ट किया जाता है , जो आपके स्टैक के ऊपर नहीं फेंक दिया जाता है।

जांचें कि क्या आप पहले से ही किसी भी कस्टम (कस्टम, शायद) का उपयोग कर रहे हैं, जो आपके अपवादों को समूह DefaultValidationEventHandler , या इस तरह से DefaultValidationEventHandler उपयोग करते हैं:

unmarshaller.setEventHandler(new DefaultValidationEventHandler());

इससे पहले त्रुटि पर असहनीय विफलता का कारण होगा

मैं जेएसएसएबी एक्सएमएलएडएक्सएटर को मार्शल और यूनारशल बूलियन मानों का उपयोग कर रहा हूं। आवेदन की XML फ़ाइल को सी # एप्लिकेशन द्वारा भी एक्सेस किया जाएगा। हमें इस एक्सएमएल फाइल को मान्य करना होगा और यह XSD का उपयोग करके किया जाता है सी # आवेदन बूलियन नोड्स के लिए "ट्रू" मान लिखता है। लेकिन यह हमारे एक्सएसडी द्वारा मान्य करता है क्योंकि यह केवल "सही / गलत" या "1/0" की अनुमति देता है। इसलिए हमने एक्सएसडी में बूलियन मानों के लिए स्ट्रिंग रखा है और यह स्ट्रिंग XMLAdapter द्वारा हमारी तरफ मार्शल और अनमरशल के लिए मान्य होगी। एक्सएमएल एडैप्टर निम्नानुसार है:

public class BooleanAdapter extends XmlAdapter<String, Boolean> 
{
@Override
    public Boolean unmarshal(String v) throws Exception
    {
        if(v.equalsIgnoreCase("true") || v.equals("1"))
        {
            return true;
        }
        else if(v.equalsIgnoreCase("false") || v.equals("0"))
        {
            return false;
        }
        else
        {
            throw new Exception("Boolean Value from XML File is Wrong.");
        }
    }

    @Override
    public String marshal(Boolean v) throws Exception
    {
        return v.toString();        
    }
}

उपरोक्त कोड सामान्य परिस्थितियों में काम करता है, लेकिन जब अमान्य डेटा (जैसे: "एबीसीडी" या "") को एक्सएमएल फाइल से पढ़ा जाता है तो "नया अपवाद फेंकें"; " प्रचारित नहीं हो रहा है और अनमरशल प्रक्रिया अगले नोड को पढ़ने के लिए आगे बढ़ती है। मैं चाहता हूं कि जैसे ही एक अपवाद फेंक दिया जाता है, जैसे ही आवेदन बंद हो। ऐसा लगता है कि मेरा अपवाद दूर खा रहा है किसी भी प्रकार की मदद की बेहद सराहना की जाती है।

इस समस्या को हल करने के लिए कैसे?





xmladapter