2016-06-22 5 views
0

У меня есть следующий следующий module.xsd XML-схемы:Java: SAX игнорирует проверки схемы

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="module2"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="temp" type="xs:string" minOccurs="0"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

и у меня есть следующий XML-документ module.xml:

<module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd"> 
    <init-param name="foo" value="boo"/> 
</module> 

И этот код Я создаю парсер:

Schema xmlSchema = null; 
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
xmlSchema = schemaFactory.newSchema(getClass().getResource(MODULE_PATH)); 
if (xmlSchema==null){ 
    System.out.println("Schema NULL"); 
}else{ 
    System.out.println("Schema NOT NULL"); 
} 
SAXParserFactory parserFactory = SAXParserFactory.newInstance(); 
parserFactory.setSchema(xmlSchema); 
parserFactory.setValidating(true); 
parserFactory.setNamespaceAware(true); 
SAXParser saxParser = parserFactory.newSAXParser(); 

я получаю Schema NOT NULL и мой файл разобран без probmes. Но я жду исключения, поскольку схема неверна. Какая у меня ошибка?

ответ

1

Если анализатор встречает схемы валидаций он не будет бросать исключение, но сообщить о нарушении его ErrorHandler, которые в большинстве случаев будет DefaultHandler передается SaxParser.parse():

Если вы хотите ошибки проверки, брошенные в виде исключения, то переопределить DefaultHandler.error :

saxParser.parse(new File("module.xml"), new DefaultHandler() { 
    public void error (SAXParseException e) throws SAXException { 
     throw e; 
    } 
}); 
Смежные вопросы