Как получить доступ к папке WebContent из метода веб-службы - PullRequest
4 голосов
/ 26 марта 2012

Я хочу получить доступ к файлу в папке WebContent из метода в веб-службе в том же проекте.Например:

@WebMethod
public String test() {
     File configFile = new File("config.xml");
     return configFile.getAbsolutePath();
}

Возвращает "/usr/share/glassfish3/glassfish/domains/domain1/config/config.xml".Я хочу получить файл в папке "/ usr / share / glassfish3 / glassfish / domains / domain1 / Applications / my_project_name /".Как я могу добраться до него?

Ответы [ 3 ]

1 голос
/ 12 марта 2013

Добавьте следующий параметр в ваш класс веб-службы:

@Context
ServletContext context;

Затем, если ваш файл config.xml находится в папке WebContent, вы можете получить его абсолютный путь, вызвав метод context.getRealPath(String). Используя ваш пример кода, это будет:

@WebMethod
public String test() {
     File configFile = new File(context.getRealPath("config.xml"));
     return configFile.getAbsolutePath();
}

Или напрямую, не передавая объект File:

@WebMethod
public String test() {
     return context.getRealPath("config.xml");
}
0 голосов
/ 09 августа 2018

Лучший способ сделать это, который я использую:

Thread.currentThread().getContextClassLoader().getResource("myFile.txt").getPath()

Здесь указывается путь к любому файлу myFile.txt, помещенному в каталог /WEB-INF/classes/ внутри папки WebContent веб-приложения.

В среде Eclipse JEE вам нужно сохранить файл myFile.txt, который вы, возможно, захотите прочитать в веб-службе, в папке src, чтобы он был перенесен в папку /WEB-INF/classes/ развертывателем.

0 голосов
/ 26 марта 2012

Из вашего кода я понимаю, что ваш - веб-сервис JAXWS.

В jaxws вы можете получить HttpServletRequest, HttpServletResponse, ServletContext,

Имейте закрытую переменную в своем классе веб-сервиса и аннотируйте ее таким образом

@Resource
private WebServiceContext context;

И тогда в вашем методе вы можете получить ServletContext таким образом

ServletContext servletContext =
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);

Из servletContext вы можете получить путь.

Предположим, если вам нужно получить HttpServletRequest, вы можете получить его следующим образом

HttpServletRequest request =
            (HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);

и вы можете получить контекстный путь вашего приложения, например

request.getContextPath() ;
...