diff --git a/src/main/java/no/bioforsk/vips/coremanager/VIPSCoreManagerApplication.java b/src/main/java/no/bioforsk/vips/coremanager/VIPSCoreManagerApplication.java index 06e2cc2d7eb573386a39e4501b41c23d431e73fa..138b18a7388e1b12ef2cea382251597674670da0 100644 --- a/src/main/java/no/bioforsk/vips/coremanager/VIPSCoreManagerApplication.java +++ b/src/main/java/no/bioforsk/vips/coremanager/VIPSCoreManagerApplication.java @@ -28,6 +28,7 @@ public class VIPSCoreManagerApplication extends Application private void addRestResourceClassesManually(Set<Class<?>> resources) { //resources.add(no.bioforsk.vips.core.service.ModelResource.class); resources.add(no.bioforsk.vips.coremanager.service.ManagerResourceImpl.class); + resources.add(no.bioforsk.vips.coremanager.service.JsonParseExceptionMapper.class); } /** @@ -37,6 +38,7 @@ public class VIPSCoreManagerApplication extends Application */ private void addRestResourceClasses(Set<Class<?>> resources) { resources.add(no.bioforsk.vips.core.service.ModelResource.class); + resources.add(no.bioforsk.vips.coremanager.service.JsonParseExceptionMapper.class); resources.add(no.bioforsk.vips.coremanager.service.ManagerResource.class); resources.add(no.bioforsk.vips.coremanager.service.ManagerResourceImpl.class); } diff --git a/src/main/java/no/bioforsk/vips/coremanager/service/JsonParseExceptionMapper.java b/src/main/java/no/bioforsk/vips/coremanager/service/JsonParseExceptionMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..598b6a570c038088c826fa43e1713f5a38e19574 --- /dev/null +++ b/src/main/java/no/bioforsk/vips/coremanager/service/JsonParseExceptionMapper.java @@ -0,0 +1,22 @@ +package no.bioforsk.vips.coremanager.service; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; +import org.codehaus.jackson.JsonParseException; + +/** + * Catches when user sends in invalid JSON that causes exception to be thrown + * in Jackson's JSON parser. + * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> + * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> + */ +@Provider +public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException>{ + + @Override + public Response toResponse(JsonParseException exception) { + String errorMessage = "Error with input: Invalid JSON. Details: " + exception.getMessage(); + return Response.status(Response.Status.BAD_REQUEST).entity(errorMessage).build(); + } +} diff --git a/src/main/java/no/bioforsk/vips/coremanager/service/ManagerResourceImpl.java b/src/main/java/no/bioforsk/vips/coremanager/service/ManagerResourceImpl.java index 2268c65a8d812adbfbf7ef06b591cdfecf8eedb1..760dc1817c485f5e75a2ba66a8292386e36bd0e2 100644 --- a/src/main/java/no/bioforsk/vips/coremanager/service/ManagerResourceImpl.java +++ b/src/main/java/no/bioforsk/vips/coremanager/service/ManagerResourceImpl.java @@ -34,6 +34,7 @@ import no.bioforsk.vips.entity.ModelConfiguration; import no.bioforsk.vips.entity.Result; import no.bioforsk.vips.model.Model; import no.bioforsk.vips.util.ServletUtil; +import org.codehaus.jackson.JsonParseException; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; @@ -220,6 +221,7 @@ public class ManagerResourceImpl implements ManagerResource{ @Path("models/{modelId}/run") @Consumes("application/json") @Produces("application/json") + @Override public Response runModel(@PathParam("modelId") String modelId, Map<String,Object> input) { try @@ -274,9 +276,10 @@ public class ManagerResourceImpl implements ManagerResource{ ControllerGetter.getUserController().storeModelUsageLog(log); return Response.ok().entity(result).build(); } - } catch(IOException e) + } + catch( IOException ioe) { - throw new WebApplicationException(Response.serverError().entity(e).build()); + throw new WebApplicationException(Response.serverError().entity(ioe).build()); } }