2014-10-08 4 views
0

Возможно ли получить путь контекста для приложения Java EE 7 на этапе построения экземпляра ресурса класса JAX-RS 2.0 (и, возможно, при статическом времени инициализации статического класса) или он доступен только во время запросов конечным точкам в классе ресурсов?Контекст контекста приложения в конструкции экземпляра ресурса JAX-RS 2.0

По пути контекста Я имею в виду строку, которая будет возвращена вызовом HttpServletRequest#getContextPath() в приложении Java EE 7.

Я предполагаю, что у вас, вероятно, может быть несколько псевдонимов контекстного пути для развернутого приложения. Если это так, то путь контекста может быть доступен только во время запроса.

Однако меня не интересует контекстный путь, который фактически использовался в URL-адресе для запроса. Канонический или стандартный контекстный путь, который будет работать для конечных точек в классе, достаточно для меня.

Техника для получения такого пути контекста не обязательно должна быть JAX-RS 2.0. Он может исходить из некоторых других спецификаций Java EE 7, если он работает на время построения класса ресурса JAX-RS 2.0 (или, более широко, при статическом времени инициализации класса).

Update:

Я забыл упомянуть, что класс CDI @ApplicationScoped, поэтому его конструктор не вызывается во время запроса, как это было бы, если бы это было @RequestScoped.

ответ

1

Вы можете получить базу URI для вашего приложения REST, вводя UriInfo в конструктору ресурсе:

@ApplicationScoped 
@Path("/resourcePath") 
public class MyRestResource { 

    public MyRestResource (@Context UriInfo uriInfo) { 
     URI uri = uriInfo.getBaseUri(); 
    } 

    @GET 
    public Response someMethod(){ 
     ... 
    } 
} 

Большинства UriInfo методов будет возвращать IllegalStateException во время строительства ресурса, но метод getBaseUri() будет работать.

Он вернет URI, как http://<hostname>:<port>/<context-path>/<base-path>.

Но я не уверен, что можно было бы получить статический во время инициализации класса ...

+0

Спасибо за информацию. Я попробую. Я действительно видел этот класс раньше, но со скидкой, так как его javadocs указывают: «Все методы бросают java.lang.IllegalStateException, если вызывается за пределами области запроса» http://docs.oracle.com/javaee/7/api/javax /ws/rs/core/UriInfo.html – XDR

+0

Кроме того, я изначально забыл упомянуть, что класс является '@ ApplicationScoped', поэтому конструктор не вызывается во время запроса. – XDR

+0

Действительно, но javadoc указывает его снова на каждый метод, кроме 'getBaseUri()' и 'getBaseUriBuilder()'. Я пробовал Wildfly 8.1, и это сработало. Ресурс был также '@ ApplicationScoped'. – Benjamin