2007年5月16日水曜日

Commons Configuration DTD validate

Commons Configuration DTD バリデーション

  1. DocumentBuilderを生成する
  2. EntityResolverを作成してDTDファイルを指定(下記は無名クラスによる実装)
  3. setValidating(true)でvalidate実施を宣言
  4. load(aFileName)で読み込み処理実施


try {
Configuration xml = new XMLConfiguration();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.setEntityResolver(new EntityResolver() {

public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
if (systemId.endsWith("DTDファイル名")) {
Class clazz = getClass();
InputStream in = clazz.getResourceAsStream("/DTD ファイル名(FQDN) ");
if (in == null) {
logger.error(SystemLog.LEVEL_ERROR, clazz,
"Could not find [dtd]. ClassLoader is [" + clazz.getClassLoader() + "]");
return null;
} else {
return new InputSource(in);
}
}
return null;
}

});
xml.setDocumentBuilder(builder);
// Reload設定
xml.setReloadingStrategy(new FileChangedReloadingStrategy());
xml.setValidating(true);
xml.load(aFileName);
} catch (ConfigurationException e) {
logger.error("例外発生");
}
結果バリデートが可能になるのですが、DTDなので必要十分なチェックとはいかないようです。

0 件のコメント: