У меня есть апплет, который должен вызывать 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-запрос к http://www.example.com/myapp/META-INF/services/javax.xml.parsers.SAXParserFactory
Я бы предпочел этого не делать, особенно потому, что мой апплет подписан, и этот дополнительный HTTP-вызов вызывает предупреждение о неподписанном коде .
Теперь очевидное решение состоит в том, чтобы просто поместить файл META-INF / services в мой JAR-файл приложения, как он говорит, но как мне это сделать, но при этом заставить его использовать реализацию JAXP по умолчанию для JRE пользователя? Альтернативно, есть ли способ убедить среду выполнения апплета искать только в моих JAR-файлах, а не в codebase
для этого файла?
Примечание: я знаю, что мог бы также развернуть свою собственную копию JAXP-RI, но это довольно тяжело для апплета.