XMLパーサーがUnknownHostExceptionを吐く場合はEntityResolverでローカルのDTDを読み込ませる。

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);

これでみんな幸せ。