2012-06-18 15 views
5

मेरे पास जेएक्सबी एनोटेशन के साथ कुछ कक्षाएं हैं, मैंने कुछ उदाहरण बनाए हैं और मुझे अपनी एक्सएसडी फाइलों के खिलाफ उन्हें सत्यापित करने की आवश्यकता है। ऑब्जेक्ट अमान्य होने पर मुझे गलत जानकारी का विवरण प्राप्त करने में सक्षम होना चाहिए।जेएक्सबी वैलिडेटर से त्रुटि विवरण कैसे प्राप्त करें?

अभी तक मुझे भाग्य नहीं मिला है, मुझे इस वर्ग के बारे में पता है ValidationEventHandler लेकिन मैं इसे अनमारशर वर्ग के साथ उपयोग कर सकता हूं, समस्या यह है कि मुझे ऑब्जेक्ट को कच्चे एक्सएमएल को मान्य करना नहीं है।

MyClass myObject = new MyClass(); 
JAXBContext jaxbContext = JAXBContext.newInstance("x.y.z"); 
JAXBSource jaxbSource = new JAXBSource(jaxbContext, myObject); 
SchemaFactory factory = SchemaFactory 
       .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Source schemaFile = new StreamSource(getClass().getClassLoader() 
       .getResourceAsStream("mySchema.xsd")); 
Schema schema = factory.newSchema(schemaFile); 

Validator validator = schema.newValidator(); 

validator.validate(jaxbSource); 

इस कोड, काम करेंगे यह वस्तु को मान्य और, कुछ इस तरह के संदेश के साथ एक अपवाद फेंक देगा::

मैं इस कोड है

cvc पैटर्न-मान्य: मान '12345678901' पैटर्न के प्रकार 'आईडी' के लिए '\ घ {10}' सम्मान साथ पहलू-मान्य नहीं है।]

समस्या यह है कि मैं विशिष्ट की जरूरत है विवरण, एक स्ट्रिंग के साथ मुझे सभी संदेशों को पार्स करना होगा।

+0

एक संभावित विकल्प के लिए यहां मौजूद है: http://stackoverflow.com/questions/11921190/how-to-get-the- तत्व-के-और-अमान्य-xml-file-with-fail-xsd-validation –

+0

एक और आयनर मिला जो आपको दिखाता है कि वास्तविक अमान्य DOM तत्व कैसे प्राप्त करें http://stackoverflow.com/questions/8077437/how-can- i-मिल और अधिक जानकारी-ऑन-एक n-invalid-dom-element-through-the-validator # answer-8162185 –

उत्तर

0

आप अलग-अलग त्रुटियों को पकड़ने के लिए ErrorHandlerValidator पर की आवृत्ति सेट कर सकते हैं:

Validator validator = schema.newValidator(); 
    validator.setErrorHandler(new MyErrorHandler()); 
    validator.validate(source); 

MyErrorHandler

नीचे ErrorHandler इंटरफ़ेस का एक नमूना कार्यान्वयन है। यदि आप अपवाद को पुनर्स्थापित नहीं करते हैं तो सत्यापन जारी रहेगा।

import org.xml.sax.ErrorHandler; 
import org.xml.sax.SAXException; 
import org.xml.sax.SAXParseException; 

public class MyErrorHandler implements ErrorHandler { 

    public void warning(SAXParseException exception) throws SAXException { 
     System.out.println("\nWARNING"); 
     exception.printStackTrace(); 
    } 

    public void error(SAXParseException exception) throws SAXException { 
     System.out.println("\nERROR"); 
     exception.printStackTrace(); 
    } 

    public void fatalError(SAXParseException exception) throws SAXException { 
     System.out.println("\nFATAL ERROR"); 
     exception.printStackTrace(); 
    } 

} 

अधिक जानकारी

+2

हाय @ ब्लाइज इस दृष्टिकोण के साथ मेरी एकमात्र समस्या यह है कि मुझे जो कुछ मिलता है वह सभी स्ट्रिंग जैसे "cvc-pattern-valid: मूल्य '12345678901' प्रकार 'आईडी' के लिए पैटर्न '\ d {10}' के संबंध में पहलू-मान्य नहीं है।] "... चूंकि मुझे यह जानने की ज़रूरत है कि कौन सा विशिष्ट तत्व गलत है, मेरे पास कोई अन्य विकल्प नहीं है लेकिन स्ट्रिंग को पार्स करें – Rodrigo

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