知らないことは罪なのかも。

 ノートPCでテストしていたのですが、ネットワークを切ったところDTDの取得が出来なくて、まったく動かなくなってしまいました。googleで検索するも、キーワードがうまく考えられず、結局1日掛かって解決。忘れないようにメモしておきます。私以外の人にはいらない情報だと思いますが。

1.妥当性検証とDTDの読み込みは別

 妥当性検証をしないように設定していてもDTDは読み込む必要があります。最初に、これが分からなくてハマリました。

2.リモートのDTDの代わりにローカルのDTDを読み込ませることが出来る

 jaxpからXMLパーサを使う場合は、EntityResolverを使うことでリモートのDTDの代わりにローカルのDTDを使わせることが出来ます。Myfacesの実装の場合、web-app_2_3.dtdを読み込むときは、クラスパス配下のjavax/servlet/resources/web-app_2_3.dtdを読み込むようになっていました(バージョン1.0.7現在)

 というわけで、s2jsf-exampleの中にjavax.servlet.resourcesというパッケージを作ってその中にダウンロードしてきたweb-app_2_3.dtdを配置することで動かすことが出来ました。