ServletContextListener не вызывается при использовании com.sun.net.httpserver.HttpServer - PullRequest
0 голосов
/ 19 декабря 2018

Я использую com.sun.net.httpserver.HttpServer в интеграционных тестах.Он выполняет свою работу, но я заметил, что ServletContextListener's методы не вызываются во время тестов.При развертывании приложения на реальном сервере Tomcat я вижу, что его методы вызываются.

Ниже приведен класс слушателя:

package abc;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class StartupListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        System.out.println("########################################");
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("########################################");
    }
}

Вот как я запускаю HttpServer втест:

@BeforeClass
public static void startServer() {
    URI uri = UriBuilder.fromUri("http://localhost/").port(8080).build();

    // Create an HTTP server listening at port 8080
    try {
        server = HttpServer.create(new InetSocketAddress(uri.getPort()), 0);
    } catch (IOException e) {
        e.printStackTrace();
        fail();
    }

    // Create a handler wrapping the JAX-RS application
    HttpHandler handler = RuntimeDelegate.getInstance().createEndpoint(new ApplicationConfig(), HttpHandler.class);
    // Map JAX-RS handler to the server root
    server.createContext(uri.getPath(), handler);
    // Start the server
    server.start();
}

Зависимость Maven:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

Я удалил @WebListener и вставил

metadata-complete="false"

и

<listener>
        <listener-class>abc.StartupListener</listener-class>
</listener>

вweb.xml но это не помогло

В чем проблема?Есть что-то, что нужно настроить?

1 Ответ

0 голосов
/ 19 декабря 2018

В чем проблема?

HttpServer не является контейнером сервлета и не знает о api сервлета.

Есть ли что-то, что должно бытьsetup?

Вам необходимо настроить контейнер сервлета наподобие jetty, который часто используется для модульного тестирования веб-приложений на основе Java.

...