XMLパーサーをスタンドアロンの端末で動かそうとするとDTD定義を取得しに行ってUnknownHostExceptionを吐きよるのでそんな場合はEntityResolverでローカルのDTD定義を読ませるといいと知った。
こんな感じでEntityResolverを実装して
private class StrutsResolver implements EntityResolver { public InputSource resolveEntity(String publicId, String systemId) throws FileNotFoundException { if(systemId.equals("http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd")){ InputStream reader = newFileInputStream("c:/temp/struts-config_1_1.dtd"); return new InputSource(reader); } return null; } }
DocumentBuilderに設定してあげる。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder bl = dbf.newDocumentBuilder();
bl.setEntityResolver(new StrutsResolver());
Document doc = bl.parse(targetFile);
これでみんな幸せ。