Skip to content

Instantly share code, notes, and snippets.

@florianthiery
Last active July 11, 2018 16:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save florianthiery/58bba19a2c5824251cb5f81c302a9ae0 to your computer and use it in GitHub Desktop.
Save florianthiery/58bba19a2c5824251cb5f81c302a9ae0 to your computer and use it in GitHub Desktop.
Setup for Jersey 1.19.1 RESTful Interface in Netbeans

Setup for Jersey 1.19.1 RESTful Interface in Netbeans

License: CC BY 4.0

Florian Thiery M.Sc.

Römisch-Germanisches Zentralmuseum (RGZM)

i3mainz - Institut für Raumbezogene Informations- und Messtechnik

package restconfig;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;
public class CORSFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
response.getHttpHeaders().add("Access-Control-Allow-Methods", "GET");
response.getHttpHeaders().add("Access-Control-Allow-Headers", "Content-Type, Accept, Accept-Encoding");
response.getHttpHeaders().add("Access-Control-Allow-Credentials", "false");
return response;
}
}
package rest;
import errorlog.Logging;
import restconfig.ResponseGZIP;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.simple.JSONObject;
@Path("/")
public class GenericResource {
@GET
@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
public Response getEmptyJSON(@HeaderParam("Accept-Encoding") String acceptEncoding, @HeaderParam("Accept") String acceptHeader) {
try {
return ResponseGZIP.setResponse(acceptEncoding, new JSONObject().toJSONString(), Response.Status.OK);
} catch (Exception e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(Logging.getMessageJSON(e, "rest.GenericResource"))
.header("Content-Type", "application/json;charset=UTF-8").build();
}
}
}
package restconfig;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.ws.rs.NameBinding;
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Gzip {}
package restconfig;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
@Provider
@Gzip
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
final OutputStream outputStream = context.getOutputStream();
context.setOutputStream(new GZIPOutputStream(outputStream));
context.proceed();
}
}
package errorlog;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class Logging {
public static String getMessageJSON(Exception exception, String endClass) {
// START BUILD JSON
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JSONObject jsonobj_error = new JSONObject(); // {}
JSONObject jsonobj_error_data = new JSONObject(); // {}
JSONArray jsonarray_element = new JSONArray();
for (StackTraceElement element : exception.getStackTrace()) {
JSONObject errMessage = new JSONObject();
errMessage.put("class", element.getClassName());
errMessage.put("method", element.getMethodName());
errMessage.put("line", element.getLineNumber());
jsonarray_element.add(errMessage);
if (element.getClassName().equals(endClass)) {
break;
}
}
// get error code
String code = "";
String userMessage = "";
if (exception.toString().contains("NullPointerException")) {
code = "1";
userMessage = "some value is not available";
} else if (exception.toString().contains("ValidateJSONObjectException")) {
code = "2";
String[] ex = exception.toString().split(": ");
userMessage = "validate JSON object exception: " + ex[1];
}
// output
jsonobj_error.put("errors", jsonobj_error_data);
jsonobj_error_data.put("internalMessage", exception.toString());
jsonobj_error_data.put("userMessage", userMessage);
jsonobj_error_data.put("code", code);
jsonobj_error_data.put("developerInfo", jsonarray_element);
// OUTPUT AS pretty print JSON
return gson.toJson(jsonobj_error);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<properties>
<jersey.version>1.19.1</jersey.version>
</properties>
<dependencies>
<!-- Tests -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- json -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.3.0</version>
</dependency>
<!-- Jersey 1.19.1 -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>${jersey.version}</version>
</dependency>
</dependencies>
</project>
package restconfig;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
public class ResponseGZIP {
public static Response setResponse(String acceptEncoding, String output, Response.Status ResponseCode) {
if (acceptEncoding.contains("gzip")) {
// set outputstream
final String OUTSTRING_FINAL = output;
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {
try {
output = GZIP(OUTSTRING_FINAL, output);
} catch (Exception e) {
System.out.println(e.toString());
}
}
};
return Response.status(ResponseCode).entity(stream)
.header("Content-Type", "application/json;charset=UTF-8").header("Content-Encoding", "gzip").build();
} else {
return Response.status(ResponseCode).entity(output)
.header("Content-Type", "application/json;charset=UTF-8").build();
}
}
private static OutputStream GZIP(String input, OutputStream baos) throws IOException {
try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
gzos.write(input.getBytes("UTF-8"));
} catch (Exception e) {
System.out.println(e.toString());
}
return baos;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>API</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>rest</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>restconfig.CORSFilter</param-value>
</init-param>
<!-- http://javaevangelist.blogspot.de/2012/01/jersey-tip-of-day-use-gzip-compression.html-->
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>API</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment