Как получить путь к контексту приложения в spring-ws? - PullRequest
3 голосов
/ 11 января 2011

Я использую Spring-WS для создания веб-сервиса.В моем проекте я создал класс Helper для чтения образца ответа и запроса XML-файла, который находится в моей папке /src/main/resource.

Когда я тестирую модуль моего приложения веб-сервиса «локально», яиспользуйте System.getProperty("user.dir"), чтобы получить контекстную папку приложения.Ниже приведен метод, который я создал в классе Helper, чтобы помочь мне найти файл, который меня интересует, в моей папке ресурсов.

 public static File getFileFromResources(String filename) {
  System.out.println("Getting file from resource folder");
  File request = null;
  String curDir = System.getProperty("user.dir");
  String contextpath = "C:\\src\\main\\resources\\";
  request = new File(curDir + contextpath + filename);
  return request;
 }

Однако после «публикации» скомпилированного файла WAR вПапка ../webapps в каталог Apache Tomcat, я понимаю, что System.getProperty("user.dir") больше не возвращает путь к контексту моего приложения.Вместо этого он возвращает корневой каталог Apache Tomcat, как показано

C: \ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ src \ main \ resources \ SampleClientFile

Я не могу найти какую-либо информацию о получении корневой папки моего веб-сервиса.Я видел примеры в веб-приложении Spring, где я могу получить путь к контексту с помощью следующего:

request.getSession().getServletContext().getContextPath()

Но в этом случае я использую веб-приложение Spring, где в запросе есть контекст сервлета,Но Spring-WS, моя точка входа - это конечная точка.Как я могу получить контекстный путь моего приложения веб-службы.

Я ожидаю контекстный путь, например,

C: \ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ webapps \ clientWebService \ WEB-INF \ classes

Может ли кто-нибудь предложить способ достичь этого?

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Вы можете получить текущий запрос от RequestContextHolder:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

Немного неуклюжий, но, вероятно, ваш лучший вариант здесь.

0 голосов
/ 17 июня 2013

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

Однако вы можете загрузить любой ресурс в самом приложении, независимо от того, где он находится. ServletContext позволяет вам сделать это, например, через javax.servlet.ServletContext # getResourceAsStream. Вы также можете узнать контекстный путь приложения (как в пути запроса).

Вы можете получить доступ к контексту сервлета, реализовав org.springframework.web.context.ServletContextAware в своем бине.

...