Commit a24a08d13eb05ff407db49b38ddb8f5e9862bde6

Authored by PauloGladson
1 parent bc6de58b

Melhoria no Rest, uso de cache-control

demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/Cache.java 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  1 +/*
  2 + * To change this license header, choose License Headers in Project Properties.
  3 + * To change this template file, choose Tools | Templates
  4 + * and open the template in the editor.
  5 + */
  6 +package org.demoiselle.jee.ws.jaxrs.annotation;
  7 +
  8 +import static java.lang.annotation.ElementType.METHOD;
  9 +import static java.lang.annotation.ElementType.TYPE;
  10 +import java.lang.annotation.Inherited;
  11 +import java.lang.annotation.Retention;
  12 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  13 +import java.lang.annotation.Target;
  14 +import javax.enterprise.util.Nonbinding;
  15 +import javax.interceptor.InterceptorBinding;
  16 +
  17 +/**
  18 + *
  19 + * @author 70744416353
  20 + */
  21 +@Inherited
  22 +@InterceptorBinding
  23 +@Target({ METHOD, TYPE })
  24 +@Retention(RUNTIME)
  25 +public @interface Cache {
  26 +
  27 + @Nonbinding
  28 + String value() default "max-age=9223372036854775807";
  29 +}
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/Cors.java 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +/*
  2 + * To change this license header, choose License Headers in Project Properties.
  3 + * To change this template file, choose Tools | Templates
  4 + * and open the template in the editor.
  5 + */
  6 +package org.demoiselle.jee.ws.jaxrs.annotation;
  7 +
  8 +import static java.lang.annotation.ElementType.METHOD;
  9 +import static java.lang.annotation.ElementType.TYPE;
  10 +import java.lang.annotation.Inherited;
  11 +import java.lang.annotation.Retention;
  12 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  13 +import java.lang.annotation.Target;
  14 +import javax.enterprise.util.Nonbinding;
  15 +import javax.interceptor.InterceptorBinding;
  16 +
  17 +/**
  18 + *
  19 + * @author 70744416353
  20 + */
  21 +@Inherited
  22 +@InterceptorBinding
  23 +@Target({METHOD, TYPE})
  24 +@Retention(RUNTIME)
  25 +public @interface Cors {
  26 +}
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/ValidatePayload.java 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + *
  4 + * License: GNU Lesser General Public License (LGPL), version 3 or later.
  5 + * See the lgpl.txt file in the root directory or <https://www.gnu.org/licenses/lgpl.html>.
  6 + */
  7 +package org.demoiselle.jee.ws.jaxrs.annotation;
  8 +
  9 +import static java.lang.annotation.ElementType.METHOD;
  10 +import static java.lang.annotation.ElementType.TYPE;
  11 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  12 +
  13 +import java.lang.annotation.Inherited;
  14 +import java.lang.annotation.Retention;
  15 +import java.lang.annotation.Target;
  16 +
  17 +import javax.interceptor.InterceptorBinding;
  18 +
  19 +@Inherited
  20 +@InterceptorBinding
  21 +@Target({ METHOD, TYPE })
  22 +@Retention(RUNTIME)
  23 +public @interface ValidatePayload {
  24 +
  25 +}
0 \ No newline at end of file 26 \ No newline at end of file
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/filter/JaxRsFilter.java
@@ -9,16 +9,16 @@ package org.demoiselle.jee.ws.jaxrs.filter; @@ -9,16 +9,16 @@ package org.demoiselle.jee.ws.jaxrs.filter;
9 import java.util.logging.Logger; 9 import java.util.logging.Logger;
10 import javax.annotation.PostConstruct; 10 import javax.annotation.PostConstruct;
11 import javax.inject.Inject; 11 import javax.inject.Inject;
12 -import javax.ws.rs.client.ClientRequestContext;  
13 -import javax.ws.rs.client.ClientRequestFilter;  
14 -import javax.ws.rs.client.ClientResponseContext;  
15 -import javax.ws.rs.client.ClientResponseFilter;  
16 import javax.ws.rs.container.ContainerRequestContext; 12 import javax.ws.rs.container.ContainerRequestContext;
17 import javax.ws.rs.container.ContainerRequestFilter; 13 import javax.ws.rs.container.ContainerRequestFilter;
18 import javax.ws.rs.container.ContainerResponseContext; 14 import javax.ws.rs.container.ContainerResponseContext;
19 import javax.ws.rs.container.ContainerResponseFilter; 15 import javax.ws.rs.container.ContainerResponseFilter;
20 import javax.ws.rs.container.PreMatching; 16 import javax.ws.rs.container.PreMatching;
  17 +import javax.ws.rs.container.ResourceInfo;
  18 +import javax.ws.rs.core.Context;
21 import javax.ws.rs.ext.Provider; 19 import javax.ws.rs.ext.Provider;
  20 +import org.demoiselle.jee.ws.jaxrs.annotation.Cache;
  21 +import org.demoiselle.jee.ws.jaxrs.annotation.Cors;
22 22
23 /** 23 /**
24 * 24 *
@@ -26,18 +26,13 @@ import javax.ws.rs.ext.Provider; @@ -26,18 +26,13 @@ import javax.ws.rs.ext.Provider;
26 */ 26 */
27 @Provider 27 @Provider
28 @PreMatching 28 @PreMatching
29 -public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter { 29 +public class JaxRsFilter implements ContainerRequestFilter, ContainerResponseFilter {
30 30
31 @Inject 31 @Inject
32 private Logger LOG; 32 private Logger LOG;
33 33
34 - @Override  
35 - public void filter(ClientRequestContext requestContext) {  
36 - }  
37 -  
38 - @Override  
39 - public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) {  
40 - } 34 + @Context
  35 + private ResourceInfo info;
41 36
42 @Override 37 @Override
43 public void filter(ContainerRequestContext requestContext) { 38 public void filter(ContainerRequestContext requestContext) {
@@ -45,6 +40,19 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C @@ -45,6 +40,19 @@ public class JaxRsFilter implements ClientRequestFilter, ClientResponseFilter, C
45 40
46 @Override 41 @Override
47 public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { 42 public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) {
  43 +
  44 + if (requestContext.getMethod().equals("GET")) {
  45 + Cache max = info.getResourceMethod().getAnnotation(Cache.class);
  46 + if (max != null) {
  47 + response.getHeaders().putSingle("Cache-Control", max.value());
  48 + }
  49 + }
  50 +
  51 +// Cors cors = info.getResourceMethod().getAnnotation(Cors.class);
  52 +// if (cors != null) {
  53 +// response.getHeaders().putSingle("Cache-Control", max.value());
  54 +// }
  55 +
48 response.getHeaders().putSingle("Demoiselle", "3.0.0"); 56 response.getHeaders().putSingle("Demoiselle", "3.0.0");
49 response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); 57 response.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
50 response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); 58 response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE");
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayload.java
@@ -1,25 +0,0 @@ @@ -1,25 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - *  
4 - * License: GNU Lesser General Public License (LGPL), version 3 or later.  
5 - * See the lgpl.txt file in the root directory or <https://www.gnu.org/licenses/lgpl.html>.  
6 - */  
7 -package org.demoiselle.jee.ws.jaxrs.interceptor;  
8 -  
9 -import static java.lang.annotation.ElementType.METHOD;  
10 -import static java.lang.annotation.ElementType.TYPE;  
11 -import static java.lang.annotation.RetentionPolicy.RUNTIME;  
12 -  
13 -import java.lang.annotation.Inherited;  
14 -import java.lang.annotation.Retention;  
15 -import java.lang.annotation.Target;  
16 -  
17 -import javax.interceptor.InterceptorBinding;  
18 -  
19 -@Inherited  
20 -@InterceptorBinding  
21 -@Target({ METHOD, TYPE })  
22 -@Retention(RUNTIME)  
23 -public @interface ValidatePayload {  
24 -  
25 -}  
26 \ No newline at end of file 0 \ No newline at end of file
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayloadInterceptor.java
@@ -6,12 +6,15 @@ @@ -6,12 +6,15 @@
6 */ 6 */
7 package org.demoiselle.jee.ws.jaxrs.interceptor; 7 package org.demoiselle.jee.ws.jaxrs.interceptor;
8 8
  9 +import org.demoiselle.jee.ws.jaxrs.annotation.ValidatePayload;
9 import java.io.Serializable; 10 import java.io.Serializable;
10 import java.util.HashSet; 11 import java.util.HashSet;
11 import java.util.Set; 12 import java.util.Set;
  13 +import javax.annotation.Priority;
12 14
13 import javax.interceptor.AroundInvoke; 15 import javax.interceptor.AroundInvoke;
14 import javax.interceptor.Interceptor; 16 import javax.interceptor.Interceptor;
  17 +import static javax.interceptor.Interceptor.Priority.APPLICATION;
15 import javax.interceptor.InvocationContext; 18 import javax.interceptor.InvocationContext;
16 import javax.validation.ConstraintViolation; 19 import javax.validation.ConstraintViolation;
17 import javax.validation.UnexpectedTypeException; 20 import javax.validation.UnexpectedTypeException;
@@ -24,40 +27,41 @@ import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; @@ -24,40 +27,41 @@ import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException;
24 27
25 @Interceptor 28 @Interceptor
26 @ValidatePayload 29 @ValidatePayload
  30 +@Priority(APPLICATION)
27 public class ValidatePayloadInterceptor implements Serializable { 31 public class ValidatePayloadInterceptor implements Serializable {
28 32
29 - private static final long serialVersionUID = 1L;  
30 -  
31 - @AroundInvoke  
32 - public Object manage(final InvocationContext ic) throws Exception {  
33 - DemoiselleRESTException ex = new DemoiselleRESTException();  
34 - Set<ConstraintViolation<?>> violations = new HashSet<>();  
35 - for (Object params : ic.getParameters()) {  
36 - if (params != null) {  
37 - ValidatorFactory dfv = buildDefaultValidatorFactory();  
38 - Validator validator = dfv.getValidator();  
39 - try {  
40 - violations.addAll(validator.validate(params));  
41 - for (ConstraintViolation<?> violation : violations) {  
42 - String field = (violation.getRootBeanClass().getSimpleName() + "_"  
43 - + violation.getPropertyPath()).toLowerCase();  
44 - // GPMessage msg =  
45 - // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor()  
46 - // .getAnnotation().annotationType().getSimpleName().toLowerCase());  
47 -  
48 - ex.addMessage(field, violation.getMessage());  
49 - }  
50 - } catch (UnexpectedTypeException cause) {  
51 - // GPMessage msg = GPMessage.GENERAL_ERROR_P1;  
52 - // msg.setParam(cause.getMessage());  
53 - throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR");  
54 - }  
55 - }  
56 - }  
57 -  
58 - if (!violations.isEmpty() && !ex.getMessages().isEmpty()) {  
59 - throw ex;  
60 - }  
61 - return ic.proceed();  
62 - }  
63 -}  
64 \ No newline at end of file 33 \ No newline at end of file
  34 + private static final long serialVersionUID = 1L;
  35 +
  36 + @AroundInvoke
  37 + public Object manage(final InvocationContext ic) throws Exception {
  38 + DemoiselleRESTException ex = new DemoiselleRESTException();
  39 + Set<ConstraintViolation<?>> violations = new HashSet<>();
  40 + for (Object params : ic.getParameters()) {
  41 + if (params != null) {
  42 + ValidatorFactory dfv = buildDefaultValidatorFactory();
  43 + Validator validator = dfv.getValidator();
  44 + try {
  45 + violations.addAll(validator.validate(params));
  46 + for (ConstraintViolation<?> violation : violations) {
  47 + String field = (violation.getRootBeanClass().getSimpleName() + "_"
  48 + + violation.getPropertyPath()).toLowerCase();
  49 + // GPMessage msg =
  50 + // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor()
  51 + // .getAnnotation().annotationType().getSimpleName().toLowerCase());
  52 +
  53 + ex.addMessage(field, violation.getMessage());
  54 + }
  55 + } catch (UnexpectedTypeException cause) {
  56 + // GPMessage msg = GPMessage.GENERAL_ERROR_P1;
  57 + // msg.setParam(cause.getMessage());
  58 + throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR");
  59 + }
  60 + }
  61 + }
  62 +
  63 + if (!violations.isEmpty() && !ex.getMessages().isEmpty()) {
  64 + throw ex;
  65 + }
  66 + return ic.proceed();
  67 + }
  68 +}