Http-Server for jersey app with Java standard tools

What: Create a simple http server for a jersey app without traditional application servers.
Why: Kiss & useful for micro services
How: Use built-in java classes

Download the following dependencies (or include them in your pom.xml):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
	<groupId>org.glassfish.jersey.core</groupId>
	<artifactId>jersey-server</artifactId>
	<version>2.25.1</version>
</dependency>
<dependency>
	<groupId>org.glassfish.jersey.containers</groupId>
	<artifactId>jersey-container-jdk-http</artifactId>
	<version>2.25.1</version>
</dependency>
<dependency>
	<groupId>org.glassfish.jersey.media</groupId>
	<artifactId>jersey-media-json-jackson</artifactId>
	<version>2.25.1</version>
</dependency>

7-line Java way, minimal

1
2
3
4
5
6
7
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages("mandelbrot");
String hostName = "localhost";
try {hostName = InetAddress.getLocalHost().getCanonicalHostName();}
catch (UnknownHostException e) {e.printStackTrace();}
URI uri = UriBuilder.fromUri("http://" + hostName + "/").port(PORT).build();
JdkHttpServerFactory.createHttpServer(uri, resourceConfig);

Usually, you need a little bit more like:

  • Cors support
  • Jackson
  • Logging

Create the following class:

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * See: http://stackoverflow.com/a/28067653
 *
 */
public class CORSFilter implements ContainerResponseFilter {
    @Override
    public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException {
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
        response.getHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

Add the following lines:

1
2
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages("mandelbrot");

Full example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages("mandelbrot");
resourceConfig.register(JacksonFeature.class);
resourceConfig.register(CORSFilter.class);
 
String hostName = "localhost";
try {
    hostName = InetAddress.getLocalHost().getCanonicalHostName();
} catch (UnknownHostException e) {
    e.printStackTrace();
}
 
URI uri = UriBuilder.fromUri("http://" + hostName + "/").port(PORT).build();
 
JdkHttpServerFactory.createHttpServer(uri, resourceConfig);