2016-05-12 9 views
0

diese Versionen von BibliothekenShutdownHandler schenkt 400 in 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> 
verwendet werden

eingebettete Jetty wie die

verwendet wird
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); 

Dies zeigt die index.html

http://localhost:22279/

, aber dies schlägt mit 400

fehl

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

keine idee warum?

+0

Jetty unterstützt keine JSR356-Websockets v1.1 ([noch] (https://github.com/eclipse/jetty.project/issues/207)) –

+0

Danke für den Hinweis! ... Hoffentlich seid ihr Jungs als ich Implementieren Sachen – user3732793

Antwort

0

löste es im Grunde durch Kopieren/Überklebungen die aus der Dokumentation snipped ... nicht sicher, ob das ein schöner Ansatz ist, wie es sich beklagen eine „mit ausstehenden Rückruf losed“ hat, aber es funktioniert

so in einem Jersey-Kontext Halter

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

und die Shutdown-Klasse sieht aus wie dieser

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); 
    } 
} 

}

Jeder Schneider Kommentar wird sehr geschätzt!

0

Das Javadoc für ShutdownHandler besagt, dass die Shutdown-Anfrage eine POST-Anfrage ist.

Der Aufruf an http://localhost:22279/shutdown?token=switchoff muss dann eine POST Anfrage sein (auch ohne Anführungszeichen).

Beachten Sie auch, dass die ShutdownHandler eine sendShutdown() Methode hat, die Ihnen hilft.

Und da Jetty ein Open-Source-Projekt ist, können Sie sogar sehen how sendShutdown() is implemented.

+0

versucht mit http wie Sie im Browser erwähnt (natürlich ist es bekommen) als versucht mit curl --data "Token = Ausschalten" http: // localhost: 22279/shutdown, die eine Post-Anfrage machen sollte ... Still/Shutdown ist nicht erreichbar – user3732793

Verwandte Themen