我有一个需要调用 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 调用会触发关于unsigned code的警告。
现在,显而易见的解决方案是像它说的那样将 META-INF/services 文件放在我的应用程序 JAR 中,但是我该怎么做却仍然让它使用用户的 JRE 默认实现的 JAXP?或者,有没有办法说服小程序运行时只查看我的 JAR 文件而不是codebase
该文件?
注意:我知道我也可以部署我自己的 JAXP-RI 副本,但这对于 applet 来说是相当重量级的。