Как я могу получить доступ к статическому ресурсу через webapp из теста JUnit? - PullRequest
5 голосов
/ 02 февраля 2012

Я написал тест JUnit, который проверяет xml, возвращенный службой, на соответствие XSD. Сначала я поместил XSD в src/main/resrouces/xsd/<filename>.xsd, но теперь я сталкиваюсь с необходимостью переместить его в webapp как статический ресурс, чтобы он был общедоступным при развертывании приложения.

Я бы предпочел, чтобы у меня не было двух копий, так как я ожидаю, что кто-то рано или поздно изменит неправильную копию.

Я загружал файл с getClass().getResource("/xsd/<filename>.xsd"), как бы я получил к нему доступ, если бы ресурс был перемещен в webapp?

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

/src/main/webapp содержимое помещается в CLASSPATH при создании и развертывании WAR, но не во время тестов JUnit (как в maven, так и в моей IDE). Вы должны загрузить их явно используя:

new File("src/main/webapp/xsd/<filename>.xsd");

Это должно работать до тех пор, пока основной каталог проекта является текущим каталогом во время выполнения тестов. Грустно, но верно.

3 голосов
/ 02 февраля 2012

В вашем pom добавьте его как каталог ресурсов.

<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <directory>src/main/webapp</directory>
        <includes>
            <include>xsd/schema.xsd</include>
        </includes>
    </resource>
</resources>

В Java использовать

String path = "/xsd/schema.xsd";
InputStream is = getClass().getResourceAsStream(path);
0 голосов
/ 02 февраля 2012

Ваш ресурс по-прежнему останется в пути к классам, поэтому при нормальной загрузке он должен продолжаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...