2010-10-12 2 views
0

Предполагаемая машина не имеет подключения к Интернету, и я не хочу ее загружать в фиксированном месте.Как загрузить DTD из файла jar?

Цель: загрузить DTD из фляги, банку будет зависимость.

ответ

1

Чтобы загрузить любой файл из пути к классам (это пространство, где Youre классы находятся, как правило, куча банок), вы можете сделать:

InputStream is = this.getClass().getResourceAsStream("my/package/ResourceFile.dtd"); 

И тогда вы можете использовать входной поток, где вы хотите ,

Примечание: getResourceAsStream() загружает ресурс с помощью загрузчика классов, загружающего класс. Если вы создаете приложение, любой класс из вашего приложения (и, следовательно, загружается одним и тем же загрузчиком классов с вашими баночками) будет в порядке.

+0

И как я могу указать JMXB Unmarshaller использовать этот InputStream? –

+0

Не знаю о JAXB. Есть вопросы и ответы об отключении проверки DTD. Может быть, это помогает. http://stackoverflow.com/questions/9909465/how-to-disable-dtd-fetching-using-jaxb2-0 – helios

1

Нет стандартного способа предоставления локального кеша (если я правильно помню) DTD.

Следовательно, вам нужно будет исследовать парсер, который будет использовать локальные копии, и использовать его нестандартный API конфигурации, чтобы сообщить об этих локальных копиях, чтобы избежать поездки в сеть.

Используйте метод getResourceAsStream() для выбора записей из пути к классам.