2009-04-07 13 views
13

में प्रभावी ढंग से मैं जावा में XMLSchema के खिलाफ मान्य कर रहा हूँ, और फेंक दिया SAXParseExceptions हो रही है जब मैं गैर मान्य सामग्री मॉडल SAXParseException का उपयोग कैसे करें।जावा

मैं इन अपवादों का उपयोग करने के लिए कह रहा हूं कि सत्यापन कहां विफल रहा है - लेकिन SAXParseExceptions बहुत कम स्तर के प्रतीत होते हैं।

उदाहरण के लिए, एक गणना पर एक विफलता के लिए, मैं वैधता त्रुटि मिलती है कि प्रदान की एक अपवाद में सामग्री मॉडल से मेल नहीं खाता मूल्य, और तत्व यह अगले में लागू होता है।

मुझे लगता है कि मुझे एक उपयोगिता की आवश्यकता है जो संबंधित त्रुटियों को एक साथ विलय करने के लिए थोड़ा सा सार तत्व बनाता है और उपयोग करने योग्य अपवाद गुणों में अपवाद टेक्स्ट को पार्स करता है।

यह एक उचित दृष्टिकोण है, या मैं बस कुछ एक पुस्तकालय या सहायक वर्ग याद आ रही है, या हो सकता है?


अद्यतन @ टिमगिलबर्ट, प्रतिक्रिया के लिए धन्यवाद।

उदाहरण के लिए, एक SAXParseException मैं t'internet

cvc-pattern-valid: Value 'en' is not facet-valid 
with respect to pattern '([a-zA-Z]{1,8})(-[a-zA-Z0-9]{1,8})*' 

पर पाया मेरे लिए महत्वपूर्ण बातें

  • तत्व 'en' जो इस अपवाद लागू करने के लिए कर रहे हैं। मैं अपवाद क्यों नहीं कह सकता .getElement() या कुछ, और प्रश्न में तत्व के लिए XPath क्यों नहीं? लाइन और कॉलम नंबर की तुलना में इन-मेमोरी दस्तावेज़ के साथ अधिक उपयोगी!
  • यह एक पैटर्न सत्यापन विफलता है। मुझे संभावित प्रकार की विफलता और उपयुक्त के संदर्भ की तरह कुछ क्यों नहीं मिल सकता है?
  • वास्तविक पैटर्न जो सत्यापन के खिलाफ विफल रहा है।
  • एक और अपवाद अगले फेंक दिया हो जाएगा मुझे 'en' तत्व यह है कि समस्या यह है कि मैं मर्ज करने के लिए

मैं क्या करने में सक्षम होना चाहते हैं का एक उदाहरण की जरूरत की वजह से का मूल्य बताने के लिए क्या लोग दस्तावेज़ जमा करते हैं और दस्तावेज़ को हाइलाइट किया जाता है जहां उपयोगकर्ता के अनुकूल संदेश के साथ सत्यापन विफल रहता है - थोड़े से ऊपर त्रुटि संदेश बहुत दोस्ताना प्रतीत नहीं होता है ... सिंगल कोट्स द्वारा पार्स करने के लिए बस एक दुर्घटना की तरह होने का इंतजार है :)

मुझे लगता है कि मैं शायद 'संदर्भ-से-तत्व' चीज़ के साथ गलत कर रहा हूं, और शायद मुझे सत्यापन के हिस्से के रूप में डिफ़ॉल्ट रूप से दस्तावेज़ की पहचान बदलनी चाहिए, और ऑगमेन प्रमाणीकरण-त्रुटि विशेषताओं के साथ परिवर्तन जो मैं सीएसएस के साथ चुन सकता हूं। यह अभी भी मदद नहीं करेगा अगर मुझे संदेशों को और अधिक अनुकूल बनाने के लिए उन्हें पार्स करने की आवश्यकता है ...

पुन: तंग बाध्यकारी, javax.xml.validation.Validator.validate() org.xml.sax फेंकता है। MaxException वैसे भी - यकीन नहीं है कि कैसे मैं बाध्यकारी संभालने से दूर प्राप्त कर सकते हैं ...

चीयर्स

+1

+1, मुझे आज सुबह इसी तरह की समस्या का सामना करना पड़ा। पोस्ट करने का शुक्रिया। –

+1

कोई समस्या नहीं, खुशी है कि यह सिर्फ मुझे गूंगा नहीं है! – Brabster

+0

मुझे एक बहुत ही समस्या है। क्या आपको कोई समाधान मिला है जो इन त्रुटियों को और अधिक उपयोगकर्ता के अनुकूल बनाना आसान बनाता है? – Turismo

उत्तर

2

मैं तुम्हें यहाँ क्या पूछ रहे हैं के बारे में पूरी तरह से स्पष्ट नहीं कर रहा हूँ, शायद आप आप किस बारे में थोड़ा और विस्तार प्रदान कर सकता है अपवादों का मतलब बहुत कम स्तर वाला है? क्या यह है कि त्रुटि संदेश स्वयं समझ में नहीं आते हैं?

सैक्सपर्स अपवाद वर्ग को कॉलम नम्बर() और getLineNumber() विधियां मिलती हैं जिन्हें आप उपयोगकर्ता को त्रुटियों को ठीक करने के लिए पेश कर सकते हैं।

एक चीज जिसे आप प्रयोग कर सकते हैं, अलग-अलग एक्सएमएल-पार्सिंग कार्यान्वयन का उपयोग कर रहा है - प्रत्येक पार्सर अमान्य कोड पाता है, तो एक त्रुटि फेंक देगा, लेकिन विभिन्न कार्यान्वयन में अलग-अलग त्रुटि संदेश और अपवाद श्रृंखला हो सकती है।

दरअसल, इस कारण से मैं एक पुस्तकालय बनाने की कोशिश करने के बारे में संदिग्ध हूं जो अपवाद श्रृंखला का निरीक्षण करता है और इसके बारे में अधिक सुसंगत त्रुटि संदेश बनाने की कोशिश करता है, क्योंकि आप अपने कोड को काफी कसकर जोड़ देंगे एक्सएमएल-पार्सिंग कार्यान्वयन के विशिष्ट विवरण (विशेष रूप से यदि आप त्रुटि संदेशों के विशिष्ट शब्दकोष पर निर्भर हैं)।

(क्षमा करें यह नहीं अधिक सटीक है, हो सकता है आप समस्या आप देख रहे हैं का एक उदाहरण दे सकता है?)

1

Brabster मैं भी वही समस्या रास्ता वापस का सामना करना पड़ा, जहां मैं बताने के लिए की जरूरत है जो तत्व के लिए एक्सएमएल त्रुटि आई है। मैंने एसएक्स पार्सर के अपने हैंडलर में एक ढेर को बनाए रखकर समस्या को हल किया। स्टार्ट एलीमेंट विधि में मैं स्टैक में qName (तत्व का नाम) दबाता हूं और अंत में एलीमेंट विधि में मैं स्टैक से qName पॉप करता हूं।

जब भी कोई अपवाद आता है तो मेरा ढेर तत्व के पूर्ण XPath का प्रतिनिधित्व करता है।

एकमात्र समस्या यह थी कि एक ही नाम के साथ कई तत्व हैं तो आप नहीं जानते कि त्रुटि किस तत्व के लिए है। लेकिन कम से कम पूर्ण XPath विवरण LineNumber और ColumnNumber के साथ मदद की।

उम्मीद है कि इससे मदद मिलती है।