Wir verwenden RESTlet, um einen kleinen REST-Server für ein Projekt zu erstellen, das wir haben. Wir setzten eine Reihe von Routen in einer Klasse von Application
vererben bis:Restlet-, CLAP-, Ajax- und Chunk-Timeouts
public static void createRestServer(ApplicationContext appCtx, String propertiesPath) throws Exception {
// Create a component
Component component = new Component();
component.getServers().add(Protocol.HTTP, 8081);
component.getClients().add(Protocol.FILE);
component.getClients().add(Protocol.CLAP);
Context context = component.getContext().createChildContext();
RestServer application = new RestServer(context);
application.getContext().getParameters().add("useForwardedForHeader", "true");
application.getContext().getAttributes().put("appCtx", appCtx);
application.getContext().getAttributes().put("file", propertiesPath);
// Attach the application to the component and start it
component.getDefaultHost().attach(application);
component.start();
}
private RestServer(Context context) {
super(context);
}
public synchronized Restlet createInboundRoot() {
Router router = new Router(getContext());
// we then have a bunch of these
router.attach("/accounts/{accountId}", AccountFetcher.class); //LIST Account level
// blah blah blah
// finally some stuff for static files:
//
Directory directory = new Directory(getContext(),
LocalReference.createClapReference(LocalReference.CLAP_CLASS, "/"));
directory.setIndexName("index.html");
router.attach("/", directory);
return router;
}
Das Problem: Wenn ich eine Js Datei im JAR über Ajax von einer Web-Seite (auch geladen über CLAP aus dieser JAR anfordern), wird nur die ersten 7737 Bytes dieser Datei zurückgeben und dann hängen. Ich kann den Rest der Datei nicht zurückgeben. Es hängt immer genau nach der gleichen Anzahl von Bytes. 1 in 50 mal funktioniert es.
Irgendwelche Ideen, warum es hängt? Kann ich die Chunked-Codierung für CLAP- und statische Dateien einfach deaktivieren (alle sind ziemlich klein).
Das macht uns verrückt.
Können Sie angeben, welche Version von Restlet Sie verwenden. Hast du es mit der neuesten Version 2.2 (stable) versucht? –
Verbindest du dich direkt mit dem Container (Jetty, Tomcat, ...) oder ist etwas dazwischen - wie ein Apache HTTP Server? Wir hatten das Problem, dass dieser die Verbindung nach 8kb Daten schloss. – cheffe
GIve vollständige Details Ihrer Bereitstellung einschließlich JDK-Version, Servlet Engine Version? –