Also, for those that are already using this library, here is a guide to migrate from Hoka/REST-server 5.x to Hoka 7.1.1.
ej.hoka.auth : authentication API
ej.hoka.auth.session : ready-to-use utility classes to setup authentication using cookie-based sessions
ej.hoka.http.encoding : extract encoding stuff in this package.
ej.hoka.http.requesthandler : equivalent to legacy ej.hoka.http.HTTPSession.
ej.hoka.tcp : now the TCP server has more responsabilities, it maintains the list of opened connections. It was originally handled by the HTTP server.
ej.hoka.http : now the HTTP server is only responsible for maintaining jobs that process requests from the opened connections of the TCP server.
What used to be an extension of the HTTP server (REST server) is now an architecture that the HTTP server can use directly.
Now, the HTTP server can serve a filesystem view, REST endpoints and other services from different architectures at the same time.
An example with two different REST interface (one public and one private) is available here : AccessControlExampleServer.java.
A customizable processing chain
The request processing chain has been completely reworked to be customizable. For example, the authentication and the REST packages uses a custom chain of request handlers to achieve their goals.
Before this update, the processing was static : managed by an
HTTPSession defined by the user.
Now, one can define a hierarchy of request handlers (See
ej.hoka.http.requesthandler.RequestHandlerComposite) that will be browsed depending on the request.
An example that uses a
RequestHandlerComposite is available here : RestServer.java.
Parse Request Body
As before, the body of the request is lazily parsed by the request handlers.
What changed is that handlers can now directly use the type of parser they need for a specific request.
Four implementations are available in
StringBodyParser : read the whole body into a string
MultipartStringsParser : parse a
multipart/* body, each part read into a string
MultiPartBodyParser : parse a
multipart/* body, and parse each part as header fields and a body.
ParameterParser : parse a
An example that uses the
StringBodyParser is available here : DumpRequestHandler.java.
Endpoints URI matching (REST)
The request URI matching with available endpoints has been changed to use the endpoint the most specific to the request.
If there are two endpoints,
/my/endpoint, the second is used for requests to the same URI.
Also, the first endpoint must be declared as a global endpoint (with
/my/*) to be used to handle the request to “sub-endpoints” like
An example is available here : AccessControlExampleServer.java. It uses a single global endpoint for the private part.
This new version includes an authentication API (see
The library currently provides an implementation that uses a database of active sessions, it is possible to implement other authentication protocols.
Linked to this, the package
ej.hoka.auth.session is a couple of ready-to-use components to enable such authentication, by default, it uses an in-memory database for active sessions and stores session tokens in cookies.
An example, using the
ej.hoka.auth.session components, is available here : AccessControlExampleServer.java.
The application developer can now enable the server to dump the stack trace when an exception is thrown during the processing of a request. The mode is enabled with :
This is useful when debugging a web application : the exceptions are directly dumped into the client browser.