2016-05-12 7 views
0

эти версии библиотек используютсяShutdownHandler дает 400 в Embedded Jetty

<java.version>1.8</java.version> 
    <javax.websockets.version>1.1</javax.websockets.version> 
    <jetty.version>9.3.8.v20160314</jetty.version> 
    <jersey.version>2.22.2</jersey.version> 
    <jgit.version>4.3.0.201604071810-r</jgit.version> 
    <json.version>20160212</json.version> 
    <junit.version>4.12</junit.version> 
    <slf4j.version>1.7.12</slf4j.version> 
    <maven.shade.version>2.4.1</maven.shade.version> 

внедренные Jetty используется как этот

Server server = new Server(Settings.PORT); 
    ResourceHandler resourceHandler = new ResourceHandler(); 
    resourceHandler.setDirectoriesListed(true); 
    resourceHandler.setWelcomeFiles(new String[] { "./html/index.html" }); 
    resourceHandler.setResourceBase("./ressources/webcontent"); 

    ShutdownHandler shutdownHandler = new ShutdownHandler("switchoff", true, true); 

    HandlerList handlers = new HandlerList(); 
    handlers.setHandlers(new Handler[] { resourceHandler, shutdownHandler, new DefaultHandler() }); 
    server.setHandler(handlers); 

Это показывает index.html

http://localhost:22279/

, но это не удается с использованием 400

http://localhost:22279/shutdown?token= "switchoff"

любая идея почему?

+0

Jetty не поддерживает веб-порты JSR356 v1.1 ([пока] (https://github.com/eclipse/jetty.project/issues/207)) –

+0

спасибо за подсказку! ... надеюсь, вы, ребята, чем я реализую вещи – user3732793

ответ

0

решить ее в основном копировать/вклеивание пропущено из документации ... не уверены, что это хороший подход, поскольку он имеет «losed с ожиданием обратного вызова» жалуется, но это работает

так в контексте Джерси держатель

@GET 
@Path("shutdown") 
@Produces(MediaType.TEXT_PLAIN) 
public String shutdown(){ 
    new Thread(new ShutDown()).start();     
    return "Down"; 
} 

и класс Shutdown выглядит, что

public class ShutDown implements Runnable{ 

private static final org.slf4j.Logger log = LoggerFactory.getLogger(ShutDown.class); 

private static final String SHUTDOWNCOOKIE = "switchoff"; 

public void run() { 
    try { 
     URL url = new URL("http://localhost:8080/shutdown?token=" + SHUTDOWNCOOKIE); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.getResponseCode(); 
     String attempt = "Shutting down " + url + ": " + connection.getResponseMessage(); 
     log.info(attempt); 
    } catch (Exception e) { 
     String error = "Error " + e.getMessage(); 
     log.debug(error); 
    } 
} 

}

любой пошив комментарий очень приветствуется!

0

В javadoc для ShutdownHandler указано, что запрос на завершение является POST-запросом.

Призыв к http://localhost:22279/shutdown?token=switchoff тогда должен быть запросом POST (также без кавычек).

Также обратите внимание, что у ShutdownHandler есть способ sendShutdown(), который поможет вам.

И так как Jetty - проект с открытым исходным кодом, вы даже можете посмотреть how sendShutdown() is implemented.

+0

пытался с http, как вы упомянули в браузере (конечно, это получить), чем попробовали с curl --data "token = switchoff" http: // localhost: 22279/shutdown, который должен делать почтовый запрос ... по-прежнему недоступно – user3732793