Я хотел бы взять файл xml из моего пути к классам, чтобы разархивировать его и использовать для целей тестирования. Моя проблема состоит в том, чтобы получить его как InputStream. Я написал эти строки, но всегда получаю нулевой результат.
InputStream is = getClass().getResourceAsStream("WebContent/WEB-INF/classes/testing/"+ COMPLETE_DOCUMENT + ".xml");
Конечно, путь, который вы видите в аргументе метода, — это путь к моему файлу. Я пробовал несколько комбинаций:
WebContent/WEB-INF/classes/testing/
classpath:testing/
classpath*:testing/
, но всегда получаю InputStream = null.
Я даже пытался переключиться на
ClassLoader.getResourceAsStream(...)
, но ничего не происходит. Я предполагаю, что путь к ресурсу какой-то неправильный, но я не могу понять, где. Из моего сервлета.xml я использую некоторый ресурс в пути к классам, настраивая PropertyPlaceholderConfigurer или Jaxb2Marshaller только с синтаксисом
"classpath:folder/file.xsd"
, и он отлично работает. Папка, из которой я хочу загрузить свой xml, является родственной той, что в приведенном выше примере. Что мне не хватает?
РЕДАКТИРОВАТЬ: Я пытаюсь следовать подходу вспомогательного класса Spring ClassPathResource и получаю странное поведение: как я уже говорил, у меня уже есть некоторые ресурсы, загруженные из пути к классам некоторыми компонентами Spring при запуске. Если я использую путь к таким ресурсам в коде, предложенном dardo, следующим образом:
ClassPathResource cpr = new ClassPathResource("xmlschemas/lrinode.xsd");
InputStream is = cpr.getInputStream();
Я все еще получаю Исключение FileNotFound
!
Конечно, "xmlschemas/lrinode.xsd"
— это xsd, который я успешно загружаю при запуске. Не работает, даже если я использую полный путь к ресурсу, начиная с корня приложения.
Мне начинает казаться, что я упускаю что-то тривиальное.