Я хочу проверить файл XML на соответствие внешнему описанию XSD. Вот объект Schema
, созданный из моего XSD
private static Schema xmlSchema;
try {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
String FEATURE= "";
// forbid DOCTYPE
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
factory.setFeature(FEATURE, true);
xmlSchema = factory.newSchema(new File(XML_XSD_SCHEME));
} catch (Exception e) {
}
Кроме того, я создал статический метод validateXMLSchema
, отвечающий за проверку XML-файлов:
public static boolean validateXMLSchema(String xmlPath) {
if (xmlSchema == null) {
return false;
}
InputStream inputStream = null;
try {
URL xmlFileURL = new File(xmlPath).toURI().toURL();
inputStream = xmlFileURL.openStream();
SAXSource saxSource = new SAXSource(new InputSource(inputStream));
Validator validator = xmlSchema.newValidator();
String FEATURE ="";
// disallow DOCTYPE
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
validator.setFeature(FEATURE, true);
//forbid external Entity
FEATURE ="http://xml.org/sax/features/external-general-entities";
validator.setFeature(FEATURE, false);
//forbid external parameters
FEATURE ="http://xml.org/sax/features/external-parameter-entities";
validator.setFeature(FEATURE, false);
validator.validate(saxSource);
} catch (Exception e) {
return false;
} finally {
try {
inputStream.close();
} catch (IOException e) {
}
}
return true;
}
Проблема в том, что даже если я добавил определение внешнего объекта в свой файл XML <!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY......
, метод validateXMLSchema
возвращает true
. Кто-нибудь может мне помочь?