Контекст приложения RESTlet является нулевым с использованием внутреннего сервера RESTlet - PullRequest
4 голосов
/ 23 ноября 2011

У меня есть приложение Restlet (2.0.10), я начинаю со следующего кода:

public static void main(final String[] args) {
    try {
        // Create a new Component
        final Component component = new Component();

        // Add a new HTTP server listening on port 8182
        component.getServers().add(Protocol.HTTP, SERVER_PORT);

        // Add a client protocol connector for static files
        component.getClients().add(Protocol.FILE);

        // Attach the sample application.
        component.getDefaultHost().attach("/myApp", new MyApplication(Context.getCurrent()));

        // Start the component.
        component.start();

    } catch (Exception e) {
        LOGGER.error(e);
    }

}

Теперь мне требуется root приложения (т.е. / myApp) внутри приложения, и я пытаюсь получить этосогласно доступ Java к ServletContext из рестлета Ресурс :

Client serverDispatcher = context.getServerDispatcher();
ServletContext servletContext = (ServletContext)serverDispatcher.getContext().getAttributes()
                    .get("org.restlet.ext.servlet.ServletContext");
String contextPath = servletContext.getContextPath();

Это прекрасно работает при развертывании моего приложения на сервере Tomcat, но как только я запускаю сервер с использованием компонента каккак показано выше, мой контекст всегда нулевой.Может кто-нибудь сказать мне, как получить правильно инициализированный контекст, используя возможности внутреннего сервера restlets?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Кажется, логика.

Вам нужен контекст сервлета, но вы не работаете в контейнере сервлета, поэтому контекст сервлета равен NULL.

При выполнении component.start () вы используете соединители Restlet для запросов HTTP / HTTPS к серверу, а не контейнер сервлета, такой как Tomcat.

1 голос
/ 15 февраля 2012

Вам нужно будет выбрать контекст из класса Component:

component.getDefaultHost().attach("/myApp", 
     new MyApplication(component.getContext().createChildContext());

Это просто даст вам контекст Restlet, но контекст сервлета по-прежнему будет недоступен, так как он автономен.Java-приложение.

...