From 8987998c9dc456d586d5ee0bd31bc8e31d15158d Mon Sep 17 00:00:00 2001 From: Cleverson Sacramento Date: Mon, 29 Sep 2014 10:12:22 -0300 Subject: [PATCH] FWK-197: Tratar erros de parsing para retornar HTTP 400 ao invés de HTTP 500 --- impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ParseExceptionMapper.java | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+), 0 deletions(-) create mode 100644 impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ParseExceptionMapper.java diff --git a/impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ParseExceptionMapper.java b/impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ParseExceptionMapper.java new file mode 100644 index 0000000..a655dd7 --- /dev/null +++ b/impl/extension/rest/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ParseExceptionMapper.java @@ -0,0 +1,99 @@ +package br.gov.frameworkdemoiselle.internal.implementation; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.ResourceBundle; +import java.util.Set; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import org.slf4j.Logger; + +import br.gov.frameworkdemoiselle.util.Beans; +import br.gov.frameworkdemoiselle.util.NameQualifier; + +@Provider +public class ParseExceptionMapper implements ExceptionMapper { + + private transient ResourceBundle bundle; + + private transient Logger logger; + + private Set> getTypes(Class target) { + Set> classesInterfaces = new HashSet>(); + classesInterfaces.add(target); + classesInterfaces.addAll(Arrays.asList(target.getInterfaces())); + + Class superClass = target.getSuperclass(); + + if (superClass != null) { + classesInterfaces.add(superClass); + classesInterfaces.addAll(getTypes(superClass)); + } + + return classesInterfaces; + } + + @Override + public Response toResponse(Throwable exception) { + + // Throwable original = exception; + // + // while (exception != null) { + // System.out.println("xxxxxxxxxxxxxxxxxxxxxx : " + exception.getClass().getCanonicalName()); + // + // exception = exception.getCause(); + // } + // + // exception = original; + // + // Class<> + // + // while (exception != null) { + // System.out.println("xxxxxxxxxxxxxxxxxxxxxx : " + exception.getClass().getIgetCanonicalName()); + // + // exception.getClass().getSuperclass(); + // + // exception = exception.getP; + // } + + for (Class type : getTypes(exception.getClass())) { + + System.out.println("___________________ " + type.getCanonicalName()); + + if (type.getCanonicalName().toLowerCase().indexOf("unrecognized") > -1) { + getLogger().error("XXXXXXXXXXXXXX", exception); + return Response.status(400).build(); + } + } + + // System.out.println("xxxxxxxxxxxxxx : " + getTypes(exception.getClass())); + + // if (exception.getMessage().toLowerCase().indexOf("unrecognized") > -1) { + // getLogger().error("XXXXXXXXXXXXXX", exception); + // return Response.status(400).build(); + // } + // + throw new RuntimeException(exception); + + // return null; + } + + private ResourceBundle getBundle() { + if (bundle == null) { + bundle = Beans.getReference(ResourceBundle.class, new NameQualifier("demoiselle-rest-bundle")); + } + + return bundle; + } + + private Logger getLogger() { + if (logger == null) { + logger = Beans.getReference(Logger.class, new NameQualifier(ParseExceptionMapper.class.getName())); + } + + return logger; + } +} -- libgit2 0.21.2