You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ni...@apache.org on 2021/01/14 10:32:55 UTC

[atlas] 02/02: ATLAS-4101 : Fix http error code for JsonParseException by overriding readFrom method of JacksonJsonProvider.

This is an automated email from the ASF dual-hosted git repository.

nixon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 6edd4bc110a3fdde42659f797c588fa75432cc79
Author: nixonrodrigues <ni...@apache.org>
AuthorDate: Wed Jan 13 16:09:43 2021 +0530

    ATLAS-4101 : Fix http error code for JsonParseException by overriding readFrom method of JacksonJsonProvider.
---
 .../apache/atlas/web/util/AtlasJsonProvider.java   | 24 +++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/webapp/src/main/java/org/apache/atlas/web/util/AtlasJsonProvider.java b/webapp/src/main/java/org/apache/atlas/web/util/AtlasJsonProvider.java
index efe0486..8a7dcf1 100644
--- a/webapp/src/main/java/org/apache/atlas/web/util/AtlasJsonProvider.java
+++ b/webapp/src/main/java/org/apache/atlas/web/util/AtlasJsonProvider.java
@@ -18,16 +18,24 @@
 
 package org.apache.atlas.web.util;
 
+import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
-
 import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
 
 
 @Provider
@@ -44,4 +52,18 @@ public class AtlasJsonProvider extends JacksonJaxbJsonProvider {
 
         LOG.info("AtlasJsonProvider() instantiated");
     }
+
+    @Override
+    public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType,
+                           MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException {
+        try {
+            return super.readFrom(type, genericType, annotations, mediaType, httpHeaders, entityStream);
+        } catch (JsonParseException jpe) {
+            LOG.error("Malformed json passed to server", jpe);
+            throw new WebApplicationException(Servlets.getErrorResponse(jpe.getMessage(), Response.Status.BAD_REQUEST));
+        } catch (JsonMappingException jme) {
+            LOG.error("Malformed json passed to server, incorrect data type used", jme);
+            throw new WebApplicationException(Servlets.getErrorResponse(jme.getMessage(), Response.Status.BAD_REQUEST));
+        }
+    }
 }