JAXP、具体的にはSAXParserFactoryを呼び出す必要のあるアプレットがあります。これで、Javadocからわかるように、これは、ここに記載されているサービスプロバイダーメカニズムを内部的に使用します。
具体的には、呼び出されたアプリケーションJARのいずれにもファイルが見つからない場合META-INF/services/javax.xml.parsers.SAXParserFactory
、アプリケーションコードベースからファイルをフェッチしようとします。アプレットを次のように展開した場合:
<applet code="com.example.applets.MyApplet"
codebase="http://www.example.com/myapp/" archive="myapp.jar, dom4j.jar">
次に、 http://www.example.com/myapp/META-INF/services/javax.xml.parsers.SAXParserFactoryにHTTPリクエストを送信しようとします。
特に、アプレットが署名されていて、この追加のHTTP呼び出しが署名されていないコードに関する警告をトリガーするため、そうしないほうがいいです。
さて、明らかな解決策は、META-INF / servicesファイルをアプリケーションJARに配置することですが、それでもユーザーのJREのデフォルトのJAXP実装を使用するにはどうすればよいですか?または、アプレットランタイムを説得して、JARファイルのみcodebase
を検索し、そのファイルを検索しないようにする方法はありますか?
注:JAXP-RIの独自のコピーをデプロイすることもできることは知っていますが、それはアプレットとしてはかなり重いものです。