Commit 6a5cebf370281ac33e66d7b9034f84abaa0beeb1
Merge branch '3.0.0-SNAPSHOT' of https://github.com/demoiselle/framework into 3.0.0-SNAPSHOT
Showing
29 changed files
with
414 additions
and
589 deletions
Show diff stats
demoiselle-configuration/src/main/java/org/demoiselle/jee/configuration/ConfigType.java
1 | 1 | package org.demoiselle.jee.configuration; |
2 | 2 | |
3 | -/** | |
4 | - * Defines configuration types to be loaded. | |
5 | - * | |
6 | - * @author SERPRO | |
7 | - */ | |
8 | 3 | public enum ConfigType { |
9 | - | |
10 | - /** | |
11 | - * Configuration loaded on {@link System#getProperties()} or {@link System#getenv()}. | |
12 | - */ | |
13 | 4 | SYSTEM, |
14 | - | |
15 | - /** | |
16 | - * Configuration loaded on XML resources. | |
17 | - */ | |
18 | 5 | XML, |
19 | - | |
20 | - /** | |
21 | - * Configuration loaded on properties resources. | |
22 | - */ | |
23 | 6 | PROPERTIES |
24 | - | |
25 | 7 | } | ... | ... |
demoiselle-configuration/src/main/java/org/demoiselle/jee/configuration/ConfigurationException.java
... | ... | @@ -2,33 +2,14 @@ package org.demoiselle.jee.configuration; |
2 | 2 | |
3 | 3 | import org.demoiselle.jee.core.exception.DemoiselleException; |
4 | 4 | |
5 | -/** | |
6 | - * Exception class intended to be used by configuration components. | |
7 | - * | |
8 | - * @author SERPRO | |
9 | - */ | |
10 | 5 | public class ConfigurationException extends DemoiselleException{ |
11 | 6 | |
12 | 7 | private static final long serialVersionUID = 1L; |
13 | 8 | |
14 | - /** | |
15 | - * Constructor with message. | |
16 | - * | |
17 | - * @param message | |
18 | - * exception message | |
19 | - */ | |
20 | 9 | public ConfigurationException(String message) { |
21 | 10 | super(message); |
22 | 11 | } |
23 | - | |
24 | - /** | |
25 | - * Constructor with message and cause. | |
26 | - * | |
27 | - * @param message | |
28 | - * exception message | |
29 | - * @param cause | |
30 | - * exception cause | |
31 | - */ | |
12 | + | |
32 | 13 | public ConfigurationException(String message, Throwable cause) { |
33 | 14 | super(message, cause); |
34 | 15 | } | ... | ... |
demoiselle-configuration/src/main/java/org/demoiselle/jee/configuration/ConfigurationInterceptor.java
... | ... | @@ -9,12 +9,6 @@ import javax.interceptor.InvocationContext; |
9 | 9 | |
10 | 10 | import org.demoiselle.jee.configuration.annotation.Configuration; |
11 | 11 | |
12 | -/** | |
13 | - * <p> | |
14 | - * Interceptor class that loads the values of configuration files | |
15 | - * into it's mapped class. | |
16 | - * </p> | |
17 | - */ | |
18 | 12 | @Dependent |
19 | 13 | @Configuration |
20 | 14 | @Interceptor | ... | ... |
demoiselle-configuration/src/main/java/org/demoiselle/jee/configuration/ConfigurationLoader.java
... | ... | @@ -43,13 +43,6 @@ import org.demoiselle.jee.core.annotation.Ignore; |
43 | 43 | import org.demoiselle.jee.core.annotation.Name; |
44 | 44 | import org.demoiselle.jee.core.annotation.Priority; |
45 | 45 | |
46 | -/** | |
47 | - * This component loads a config class annotated with {@link org.demoiselle.jee.configuration.annotation.configuration.Configuration} | |
48 | - * by filling its attributes with {@link org.demoiselle.jsf.util.Parameter} | |
49 | - * according to a {@link org.demoiselle.configuration.ConfigType}. | |
50 | - * | |
51 | - * @author SERPRO | |
52 | - */ | |
53 | 46 | @ApplicationScoped |
54 | 47 | public class ConfigurationLoader implements Serializable { |
55 | 48 | |
... | ... | @@ -316,14 +309,7 @@ public class ConfigurationLoader implements Serializable { |
316 | 309 | throw new ConfigurationException(message.toString(), new ConstraintViolationException(violations)); |
317 | 310 | } |
318 | 311 | } |
319 | - | |
320 | - | |
321 | - | |
322 | 312 | |
323 | - /** | |
324 | - * @param type Base type to look for fields | |
325 | - * @return All non static fields from a certain type, including fields declared in superclasses of this type. | |
326 | - */ | |
327 | 313 | public List<Field> getNonStaticFields(Class<?> type) { |
328 | 314 | List<Field> fields = new ArrayList<Field>(); |
329 | 315 | |
... | ... | @@ -338,11 +324,6 @@ public class ConfigurationLoader implements Serializable { |
338 | 324 | return fields; |
339 | 325 | } |
340 | 326 | |
341 | - /** | |
342 | - * @param type Base type to look for fields | |
343 | - * @return All non static fields from a certain type. Inherited fields are not returned, so if you need to get | |
344 | - * inherited fields you must iterate over this type's hierarchy. | |
345 | - */ | |
346 | 327 | public Field[] getNonStaticDeclaredFields(Class<?> type) { |
347 | 328 | List<Field> fields = new ArrayList<Field>(); |
348 | 329 | |
... | ... | @@ -357,23 +338,11 @@ public class ConfigurationLoader implements Serializable { |
357 | 338 | return fields.toArray(new Field[0]); |
358 | 339 | } |
359 | 340 | |
360 | - /** | |
361 | - * Return an URL to access a resource available to the active classloader for the calling thread. | |
362 | - * | |
363 | - * @param resource String representation of the location of the resource on the classpath | |
364 | - * @return The {@link URL} for the resource | |
365 | - */ | |
366 | 341 | public URL getResourceAsURL(final String resource) { |
367 | 342 | ClassLoader classLoader = getClassLoaderForResource(resource); |
368 | 343 | return classLoader != null ? classLoader.getResource(resource) : null; |
369 | 344 | } |
370 | - | |
371 | - /** | |
372 | - * Obtains the {@link ClassLoader} for the given resource. | |
373 | - * | |
374 | - * @param resource String representation of the fully qualified path to the resource on the classpath | |
375 | - * @return {@link ClassLoader} ClassLoader for the given resource. | |
376 | - */ | |
345 | + | |
377 | 346 | public ClassLoader getClassLoaderForResource(final String resource) { |
378 | 347 | final String stripped = resource.charAt(0) == '/' ? resource.substring(1) : resource; |
379 | 348 | |
... | ... | @@ -413,13 +382,6 @@ public class ConfigurationLoader implements Serializable { |
413 | 382 | return result; |
414 | 383 | } |
415 | 384 | |
416 | - /** | |
417 | - * Sets a value in a field. | |
418 | - * | |
419 | - * @param field field to be setted. | |
420 | - * @param object object that contains the field. | |
421 | - * @param value value to be setted in the field. | |
422 | - */ | |
423 | 385 | public void setFieldValue(Field field, Object object, Object value) { |
424 | 386 | try { |
425 | 387 | boolean acessible = field.isAccessible(); | ... | ... |
demoiselle-configuration/src/main/java/org/demoiselle/jee/configuration/annotation/Configuration.java
... | ... | @@ -14,24 +14,6 @@ import java.lang.annotation.Target; |
14 | 14 | import static java.lang.annotation.ElementType.TYPE; |
15 | 15 | import static java.lang.annotation.RetentionPolicy.RUNTIME; |
16 | 16 | |
17 | -/** | |
18 | - * <p> | |
19 | - * Identifies a <b>configuration class</b>, that is, a structure reserved to store configuration values retrieved from a | |
20 | - * given resource file or system variables. | |
21 | - * </p> | |
22 | - * <p> | |
23 | - * Configuration resources are application scoped, meaning only one instance can ever exist in | |
24 | - * a running application. For that reason usually configuration fields are immutable, to avoid | |
25 | - * changes made in one context affecting other contexts in a running application. | |
26 | - * </p> | |
27 | - * <p>A <i>Configuration</i> is:</p> | |
28 | - * <ul> | |
29 | - * <li>defined when annotated with {@code @Configuration}</li> | |
30 | - * <li>automatically injected whenever {@code @Inject} is used</li> | |
31 | - * </ul> | |
32 | - * | |
33 | - * @author SERPRO | |
34 | - */ | |
35 | 17 | @ApplicationScoped |
36 | 18 | @Named |
37 | 19 | @InterceptorBinding |
... | ... | @@ -40,43 +22,14 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; |
40 | 22 | @Retention(RUNTIME) |
41 | 23 | public @interface Configuration { |
42 | 24 | |
43 | - /** | |
44 | - * Define the default prefix. | |
45 | - */ | |
46 | 25 | String DEFAULT_PREFIX = "demoiselle"; |
47 | 26 | |
48 | - /** | |
49 | - * Define the default resource. | |
50 | - */ | |
51 | 27 | String DEFAULT_RESOURCE = "demoiselle"; |
52 | 28 | |
53 | - /** | |
54 | - * Defines the resource type to be used: a properties file, an XML file, or system variables. | |
55 | - * If not specified, a properties resource file is to be considered. | |
56 | - * | |
57 | - * @return ConfigType Type of configuration resource file to look for | |
58 | - */ | |
59 | 29 | @Nonbinding ConfigType type() default ConfigType.PROPERTIES; |
60 | 30 | |
61 | - /** | |
62 | - * Defines an optional prefix to be used on every parameter key. | |
63 | - * For instance, if prefix is set to <code>"demoiselle.pagination"</code> and an attribute named | |
64 | - * <code>defaultPageSize</code> is found in the class, the corresponding key | |
65 | - * <code>demoiselle.pagination.defaultPageSize</code> is expected to be read in the resource file. | |
66 | - * | |
67 | - * @return String prefix common to all attributes to be read by the configuration class | |
68 | - */ | |
69 | 31 | @Nonbinding String prefix() default DEFAULT_PREFIX; |
70 | 32 | |
71 | - /** | |
72 | - * Defines the resource file name to be read by this configuration class. There is no need to specify file extension | |
73 | - * in the case of properties or XML resources. | |
74 | - * For instance, when resource is set to <code>"bookmark"</code> and the type set to properties, a corresponding | |
75 | - * file named <code>bookmark.properties</code> is considered. | |
76 | - * If not specified, the default configuration file <code>demoiselle.properties</code> is used instead. | |
77 | - * | |
78 | - * @return String Name of the resource file to look for (minus file extension) | |
79 | - */ | |
80 | 33 | @Nonbinding String resource() default DEFAULT_RESOURCE; |
81 | 34 | |
82 | 35 | } | ... | ... |
demoiselle-configuration/src/main/java/org/demoiselle/jee/configuration/extractor/ConfigurationValueExtractor.java
... | ... | @@ -4,48 +4,7 @@ import java.lang.reflect.Field; |
4 | 4 | |
5 | 5 | import org.apache.commons.configuration2.Configuration; |
6 | 6 | |
7 | -/** | |
8 | - * <p> | |
9 | - * Interface that defines how to convert values extracted from configuration | |
10 | - * files to fields in a class annotated with {@link Configuration}. | |
11 | - * </p> | |
12 | - * | |
13 | - * <p> | |
14 | - * Primitive types like <code>int</code> and <code>float</code>, their wrapper | |
15 | - * counterparts like {@link Integer} and {@link Float} and the {@link String} class | |
16 | - * can already be converted by the framework, this interface is reserved for specialized | |
17 | - * classes. | |
18 | - * </p> | |
19 | - * | |
20 | - * @author SERPRO | |
21 | - */ | |
22 | 7 | public interface ConfigurationValueExtractor { |
23 | - | |
24 | - /** | |
25 | - * Method that must appropriately extract the value from a property file and set this value to a | |
26 | - * field in a configuration class. | |
27 | - * | |
28 | - * @param prefix | |
29 | - * optional parte of property name that must be concatenated with <b>key</b> to form the whole | |
30 | - * property name. | |
31 | - * @param key | |
32 | - * key of the property. | |
33 | - * @param field | |
34 | - * configuration field to be setted. | |
35 | - * @param configuration | |
36 | - * a configuration object. | |
37 | - * @return current value of this property | |
38 | - * @throws Exception if the value can't be extracted from the property file | |
39 | - */ | |
40 | 8 | Object getValue(String prefix, String key, Field field, Configuration configuration) throws Exception; |
41 | - | |
42 | - /** | |
43 | - * Checks if the extractor class is appropriate to extract values to the type of deffined by parameter | |
44 | - * <b>field</b>. | |
45 | - * | |
46 | - * @param field | |
47 | - * field to be checked. | |
48 | - * @return <code>true</code> if this extractor can convert this field into the extractor's final type | |
49 | - */ | |
50 | 9 | boolean isSupported(Field field); |
51 | 10 | } | ... | ... |
demoiselle-core/src/main/java/org/demoiselle/jee/core/message/DemoiselleMessage.java
... | ... | @@ -46,7 +46,7 @@ public interface DemoiselleMessage { |
46 | 46 | String takingOff(); |
47 | 47 | |
48 | 48 | @MessageTemplate("{engine-off}") |
49 | - String engineOff(String ex); | |
49 | + String engineOff(); | |
50 | 50 | |
51 | 51 | @MessageTemplate("{setting-up-bean-manager}") |
52 | 52 | String settingUpBeanManagerException(String util); | ... | ... |
demoiselle-persistence-jpa/src/main/java/org/demoiselle/jee/persistence/jpa/crud/GenericCrudDAO.java
... | ... | @@ -60,13 +60,6 @@ public abstract class GenericCrudDAO<T> { |
60 | 60 | public GenericDataPage pageResult(String sort, String order, Integer from, Integer size, String search, |
61 | 61 | String fields, HashMap<String, String> filter) { |
62 | 62 | |
63 | - // TODO: Rever esta validação | |
64 | - // if (GPUtils.isEmpty(sort, order) || !((order.equalsIgnoreCase("asc") | |
65 | - // || order.equalsIgnoreCase("desc")) | |
66 | - // && (GPUtils.fieldInClass(sort, this.entityClass)))) { | |
67 | - // throw new GPException(GPMessage.LIST_PARAM_ERROR); | |
68 | - // } | |
69 | - | |
70 | 63 | if (from == null) { |
71 | 64 | from = 0; |
72 | 65 | } | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/annotation/Cache.java
0 → 100644
... | ... | @@ -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.rest.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=0"; | |
29 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/annotation/CorsAllowMethods.java
0 → 100644
... | ... | @@ -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.rest.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 CorsAllowMethods { | |
26 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/annotation/CorsAllowOrigin.java
0 → 100644
... | ... | @@ -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.rest.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 CorsAllowOrigin { | |
26 | + | |
27 | + @Nonbinding | |
28 | + String value() default "*"; | |
29 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/annotation/CorsMaxAge.java
0 → 100644
... | ... | @@ -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.rest.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 CorsMaxAge { | |
26 | + | |
27 | + @Nonbinding | |
28 | + String value() default "0"; | |
29 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/annotation/ValidatePayload.java
0 → 100644
... | ... | @@ -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.rest.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 | 26 | \ No newline at end of file | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/crud/package-info.java
0 → 100644
... | ... | @@ -0,0 +1,11 @@ |
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 | +/** | |
8 | + * Esta pacote tem o objetivo de conter as classes relacionadas aos | |
9 | + * facilitadores de CRUD do framework Demoiselle. | |
10 | + */ | |
11 | +package org.demoiselle.jee.rest.crud; | |
0 | 12 | \ No newline at end of file | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/exception/DemoiselleRESTException.java
0 → 100644
... | ... | @@ -0,0 +1,41 @@ |
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.rest.exception; | |
8 | + | |
9 | +import java.util.HashMap; | |
10 | + | |
11 | +import org.demoiselle.jee.core.exception.DemoiselleException; | |
12 | + | |
13 | +public class DemoiselleRESTException extends DemoiselleException { | |
14 | + | |
15 | + private static final long serialVersionUID = 519965615171844237L; | |
16 | + | |
17 | + private HashMap<String, String> messages = new HashMap<>(); | |
18 | + | |
19 | + private int statusCode; | |
20 | + | |
21 | + public DemoiselleRESTException() { | |
22 | + | |
23 | + } | |
24 | + | |
25 | + public DemoiselleRESTException(String string) { | |
26 | + super(string); | |
27 | + } | |
28 | + | |
29 | + public int getStatusCode() { | |
30 | + return statusCode; | |
31 | + } | |
32 | + | |
33 | + public void addMessage(String field, String msg) { | |
34 | + this.statusCode = 422; | |
35 | + messages.put(field, msg); | |
36 | + } | |
37 | + | |
38 | + public HashMap<String, String> getMessages() { | |
39 | + return messages; | |
40 | + } | |
41 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/exception/mapper/GenericExceptionMapper.java
0 → 100644
... | ... | @@ -0,0 +1,79 @@ |
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.rest.exception.mapper; | |
8 | + | |
9 | +import java.io.PrintWriter; | |
10 | +import java.io.StringWriter; | |
11 | +import java.util.HashMap; | |
12 | + | |
13 | +import javax.ws.rs.WebApplicationException; | |
14 | +import javax.ws.rs.core.MediaType; | |
15 | +import static javax.ws.rs.core.MediaType.APPLICATION_JSON; | |
16 | +import javax.ws.rs.core.Response; | |
17 | +import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; | |
18 | +import static javax.ws.rs.core.Response.status; | |
19 | +import static javax.ws.rs.core.Response.status; | |
20 | +import static javax.ws.rs.core.Response.status; | |
21 | +import static javax.ws.rs.core.Response.status; | |
22 | +import javax.ws.rs.ext.ExceptionMapper; | |
23 | +import javax.ws.rs.ext.Provider; | |
24 | + | |
25 | +import org.demoiselle.jee.rest.exception.DemoiselleRESTException; | |
26 | + | |
27 | +@Provider | |
28 | +public class GenericExceptionMapper implements ExceptionMapper<Exception> { | |
29 | + | |
30 | + public Response toResponse(Exception ex) { | |
31 | + | |
32 | + StringWriter errorStackTrace = new StringWriter(); | |
33 | + ex.printStackTrace(new PrintWriter(errorStackTrace)); | |
34 | + HashMap<String, String> entity = new HashMap<>(); | |
35 | + | |
36 | + // Verifica se a exception é de validação de PAYLOAD do REST | |
37 | + if (ex instanceof DemoiselleRESTException) { | |
38 | + DemoiselleRESTException exDemoiselleREST = (DemoiselleRESTException) ex; | |
39 | + if (!exDemoiselleREST.getMessages().isEmpty()) { | |
40 | + entity.put("error", exDemoiselleREST.getMessages().toString()); | |
41 | + return status(exDemoiselleREST.getStatusCode()).entity(entity) | |
42 | + .type(APPLICATION_JSON).build(); | |
43 | + } else if (exDemoiselleREST.getStatusCode() > 0) { | |
44 | + entity.put("error", exDemoiselleREST.getMessage()); | |
45 | + return status(exDemoiselleREST.getStatusCode()).entity(entity) | |
46 | + .type(APPLICATION_JSON).build(); | |
47 | + } | |
48 | + | |
49 | + } | |
50 | + | |
51 | + // No caso de existir message ele mostra a MESSAGE da Exception | |
52 | + if (ex.getMessage() != null) { | |
53 | + entity.put("error", ex.getMessage()); | |
54 | + | |
55 | + // Pega toda as mensagens da stacktrace | |
56 | + int level = 1; | |
57 | + while (ex.getCause() != null) { | |
58 | + ex = (Exception) ex.getCause(); | |
59 | + if (ex != null && ex.getMessage() != null && !ex.getMessage().isEmpty()) { | |
60 | + entity.put("inner_cause_" + level, ex.getMessage()); | |
61 | + } | |
62 | + level += 1; | |
63 | + } | |
64 | + | |
65 | + // Por padrão retorna SERVER ERROR, mas tenta encontrar o status do RESPONSE se for WebApplicationException | |
66 | + // http://docs.oracle.com/javaee/7/api/javax/ws/rs/WebApplicationException.html | |
67 | + int responseCode = INTERNAL_SERVER_ERROR.getStatusCode(); | |
68 | + if (ex instanceof WebApplicationException) { | |
69 | + responseCode = ((WebApplicationException) ex).getResponse().getStatus(); | |
70 | + } | |
71 | + | |
72 | + return status(responseCode).entity(entity).type(APPLICATION_JSON).build(); | |
73 | + } | |
74 | + | |
75 | + entity.put("error", "Erro interno desconhecido no servidor."); | |
76 | + return status(500).entity(entity).type(APPLICATION_JSON).build(); | |
77 | + } | |
78 | + | |
79 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/filter/JaxRsFilter.java
0 → 100644
... | ... | @@ -0,0 +1,74 @@ |
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.rest.filter; | |
8 | + | |
9 | +import java.util.logging.Logger; | |
10 | +import javax.annotation.PostConstruct; | |
11 | +import javax.inject.Inject; | |
12 | +import javax.ws.rs.container.ContainerRequestContext; | |
13 | +import javax.ws.rs.container.ContainerRequestFilter; | |
14 | +import javax.ws.rs.container.ContainerResponseContext; | |
15 | +import javax.ws.rs.container.ContainerResponseFilter; | |
16 | +import javax.ws.rs.container.PreMatching; | |
17 | +import javax.ws.rs.container.ResourceInfo; | |
18 | +import javax.ws.rs.core.Context; | |
19 | +import javax.ws.rs.ext.Provider; | |
20 | + | |
21 | +import org.demoiselle.jee.rest.annotation.Cache; | |
22 | +import org.demoiselle.jee.rest.annotation.CorsAllowMethods; | |
23 | +import org.demoiselle.jee.rest.annotation.CorsAllowOrigin; | |
24 | + | |
25 | +/** | |
26 | + * | |
27 | + * @author 70744416353 | |
28 | + */ | |
29 | +@Provider | |
30 | +@PreMatching | |
31 | +public class JaxRsFilter implements ContainerRequestFilter, ContainerResponseFilter { | |
32 | + | |
33 | + @Inject | |
34 | + private Logger LOG; | |
35 | + | |
36 | + @Context | |
37 | + private ResourceInfo info; | |
38 | + | |
39 | + @Override | |
40 | + public void filter(ContainerRequestContext requestContext) { | |
41 | + } | |
42 | + | |
43 | + @Override | |
44 | + public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { | |
45 | + | |
46 | + response.getHeaders().putSingle("Demoiselle", "3.0.0"); | |
47 | + response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); | |
48 | + response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); | |
49 | + response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); | |
50 | + | |
51 | + if (requestContext.getMethod().equals("GET")) { | |
52 | + Cache max = info.getResourceMethod().getAnnotation(Cache.class); | |
53 | + if (max != null) { | |
54 | + response.getHeaders().putSingle("Cache-Control", max.value()); | |
55 | + } | |
56 | + } | |
57 | + | |
58 | +// CorsAllowMethods corsAllowMethods = info.getResourceMethod().getAnnotation(CorsAllowMethods.class); | |
59 | +// if (corsAllowMethods != null) { | |
60 | +// response.getHeaders().putSingle("Access-Control-Allow-Methods", requestContext.getMethod()); | |
61 | +// } | |
62 | +// | |
63 | +// CorsAllowOrigin corsAllowOrigin = info.getResourceMethod().getAnnotation(CorsAllowOrigin.class); | |
64 | +// if (corsAllowOrigin != null) { | |
65 | +// response.getHeaders().putSingle("Access-Control-Allow-Origin", corsAllowOrigin.value()); | |
66 | +// } | |
67 | + } | |
68 | + | |
69 | + @PostConstruct | |
70 | + public void init() { | |
71 | + LOG.info("Demoiselle Module - Rest"); | |
72 | + } | |
73 | + | |
74 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/rest/interceptor/ValidatePayloadInterceptor.java
0 → 100644
... | ... | @@ -0,0 +1,67 @@ |
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.rest.interceptor; | |
8 | + | |
9 | +import static javax.interceptor.Interceptor.Priority.APPLICATION; | |
10 | +import static javax.validation.Validation.buildDefaultValidatorFactory; | |
11 | + | |
12 | +import java.io.Serializable; | |
13 | +import java.util.HashSet; | |
14 | +import java.util.Set; | |
15 | + | |
16 | +import javax.annotation.Priority; | |
17 | +import javax.interceptor.AroundInvoke; | |
18 | +import javax.interceptor.Interceptor; | |
19 | +import javax.interceptor.InvocationContext; | |
20 | +import javax.validation.ConstraintViolation; | |
21 | +import javax.validation.UnexpectedTypeException; | |
22 | +import javax.validation.Validator; | |
23 | +import javax.validation.ValidatorFactory; | |
24 | + | |
25 | +import org.demoiselle.jee.rest.annotation.ValidatePayload; | |
26 | +import org.demoiselle.jee.rest.exception.DemoiselleRESTException; | |
27 | + | |
28 | +@Interceptor | |
29 | +@ValidatePayload | |
30 | +@Priority(APPLICATION) | |
31 | +public class ValidatePayloadInterceptor implements Serializable { | |
32 | + | |
33 | + private static final long serialVersionUID = 1L; | |
34 | + | |
35 | + @AroundInvoke | |
36 | + public Object manage(final InvocationContext ic) throws Exception { | |
37 | + DemoiselleRESTException ex = new DemoiselleRESTException(); | |
38 | + Set<ConstraintViolation<?>> violations = new HashSet<>(); | |
39 | + for (Object params : ic.getParameters()) { | |
40 | + if (params != null) { | |
41 | + ValidatorFactory dfv = buildDefaultValidatorFactory(); | |
42 | + Validator validator = dfv.getValidator(); | |
43 | + try { | |
44 | + violations.addAll(validator.validate(params)); | |
45 | + for (ConstraintViolation<?> violation : violations) { | |
46 | + String field = (violation.getRootBeanClass().getSimpleName() + "_" | |
47 | + + violation.getPropertyPath()).toLowerCase(); | |
48 | + // GPMessage msg = | |
49 | + // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor() | |
50 | + // .getAnnotation().annotationType().getSimpleName().toLowerCase()); | |
51 | + | |
52 | + ex.addMessage(field, violation.getMessage()); | |
53 | + } | |
54 | + } catch (UnexpectedTypeException cause) { | |
55 | + // GPMessage msg = GPMessage.GENERAL_ERROR_P1; | |
56 | + // msg.setParam(cause.getMessage()); | |
57 | + throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR"); | |
58 | + } | |
59 | + } | |
60 | + } | |
61 | + | |
62 | + if (!violations.isEmpty() && !ex.getMessages().isEmpty()) { | |
63 | + throw ex; | |
64 | + } | |
65 | + return ic.proceed(); | |
66 | + } | |
67 | +} | ... | ... |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/Cache.java
... | ... | @@ -1,29 +0,0 @@ |
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=0"; | |
29 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/CorsAllowMethods.java
... | ... | @@ -1,26 +0,0 @@ |
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 CorsAllowMethods { | |
26 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/CorsAllowOrigin.java
... | ... | @@ -1,29 +0,0 @@ |
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 CorsAllowOrigin { | |
26 | - | |
27 | - @Nonbinding | |
28 | - String value() default "*"; | |
29 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/CorsMaxAge.java
... | ... | @@ -1,29 +0,0 @@ |
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 CorsMaxAge { | |
26 | - | |
27 | - @Nonbinding | |
28 | - String value() default "0"; | |
29 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/annotation/ValidatePayload.java
... | ... | @@ -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.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 | -} | |
26 | 0 | \ No newline at end of file |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/crud/package-info.java
... | ... | @@ -1,11 +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 | -/** | |
8 | - * Esta pacote tem o objetivo de conter as classes relacionadas aos | |
9 | - * facilitadores de CRUD do framework Demoiselle. | |
10 | - */ | |
11 | -package org.demoiselle.jee.ws.jaxrs.crud; | |
12 | 0 | \ No newline at end of file |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/DemoiselleRESTException.java
... | ... | @@ -1,41 +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.exception; | |
8 | - | |
9 | -import java.util.HashMap; | |
10 | - | |
11 | -import org.demoiselle.jee.core.exception.DemoiselleException; | |
12 | - | |
13 | -public class DemoiselleRESTException extends DemoiselleException { | |
14 | - | |
15 | - private static final long serialVersionUID = 519965615171844237L; | |
16 | - | |
17 | - private HashMap<String, String> messages = new HashMap<>(); | |
18 | - | |
19 | - private int statusCode; | |
20 | - | |
21 | - public DemoiselleRESTException() { | |
22 | - | |
23 | - } | |
24 | - | |
25 | - public DemoiselleRESTException(String string) { | |
26 | - super(string); | |
27 | - } | |
28 | - | |
29 | - public int getStatusCode() { | |
30 | - return statusCode; | |
31 | - } | |
32 | - | |
33 | - public void addMessage(String field, String msg) { | |
34 | - this.statusCode = 422; | |
35 | - messages.put(field, msg); | |
36 | - } | |
37 | - | |
38 | - public HashMap<String, String> getMessages() { | |
39 | - return messages; | |
40 | - } | |
41 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/exception/mapper/GenericExceptionMapper.java
... | ... | @@ -1,79 +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.exception.mapper; | |
8 | - | |
9 | -import java.io.PrintWriter; | |
10 | -import java.io.StringWriter; | |
11 | -import java.util.HashMap; | |
12 | - | |
13 | -import javax.ws.rs.WebApplicationException; | |
14 | -import javax.ws.rs.core.MediaType; | |
15 | -import static javax.ws.rs.core.MediaType.APPLICATION_JSON; | |
16 | -import javax.ws.rs.core.Response; | |
17 | -import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; | |
18 | -import static javax.ws.rs.core.Response.status; | |
19 | -import static javax.ws.rs.core.Response.status; | |
20 | -import static javax.ws.rs.core.Response.status; | |
21 | -import static javax.ws.rs.core.Response.status; | |
22 | -import javax.ws.rs.ext.ExceptionMapper; | |
23 | -import javax.ws.rs.ext.Provider; | |
24 | - | |
25 | -import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | |
26 | - | |
27 | -@Provider | |
28 | -public class GenericExceptionMapper implements ExceptionMapper<Exception> { | |
29 | - | |
30 | - public Response toResponse(Exception ex) { | |
31 | - | |
32 | - StringWriter errorStackTrace = new StringWriter(); | |
33 | - ex.printStackTrace(new PrintWriter(errorStackTrace)); | |
34 | - HashMap<String, String> entity = new HashMap<>(); | |
35 | - | |
36 | - // Verifica se a exception é de validação de PAYLOAD do REST | |
37 | - if (ex instanceof DemoiselleRESTException) { | |
38 | - DemoiselleRESTException exDemoiselleREST = (DemoiselleRESTException) ex; | |
39 | - if (!exDemoiselleREST.getMessages().isEmpty()) { | |
40 | - entity.put("error", exDemoiselleREST.getMessages().toString()); | |
41 | - return status(exDemoiselleREST.getStatusCode()).entity(entity) | |
42 | - .type(APPLICATION_JSON).build(); | |
43 | - } else if (exDemoiselleREST.getStatusCode() > 0) { | |
44 | - entity.put("error", exDemoiselleREST.getMessage()); | |
45 | - return status(exDemoiselleREST.getStatusCode()).entity(entity) | |
46 | - .type(APPLICATION_JSON).build(); | |
47 | - } | |
48 | - | |
49 | - } | |
50 | - | |
51 | - // No caso de existir message ele mostra a MESSAGE da Exception | |
52 | - if (ex.getMessage() != null) { | |
53 | - entity.put("error", ex.getMessage()); | |
54 | - | |
55 | - // Pega toda as mensagens da stacktrace | |
56 | - int level = 1; | |
57 | - while (ex.getCause() != null) { | |
58 | - ex = (Exception) ex.getCause(); | |
59 | - if (ex != null && ex.getMessage() != null && !ex.getMessage().isEmpty()) { | |
60 | - entity.put("inner_cause_" + level, ex.getMessage()); | |
61 | - } | |
62 | - level += 1; | |
63 | - } | |
64 | - | |
65 | - // Por padrão retorna SERVER ERROR, mas tenta encontrar o status do RESPONSE se for WebApplicationException | |
66 | - // http://docs.oracle.com/javaee/7/api/javax/ws/rs/WebApplicationException.html | |
67 | - int responseCode = INTERNAL_SERVER_ERROR.getStatusCode(); | |
68 | - if (ex instanceof WebApplicationException) { | |
69 | - responseCode = ((WebApplicationException) ex).getResponse().getStatus(); | |
70 | - } | |
71 | - | |
72 | - return status(responseCode).entity(entity).type(APPLICATION_JSON).build(); | |
73 | - } | |
74 | - | |
75 | - entity.put("error", "Erro interno desconhecido no servidor."); | |
76 | - return status(500).entity(entity).type(APPLICATION_JSON).build(); | |
77 | - } | |
78 | - | |
79 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/filter/JaxRsFilter.java
... | ... | @@ -1,73 +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.filter; | |
8 | - | |
9 | -import java.util.logging.Logger; | |
10 | -import javax.annotation.PostConstruct; | |
11 | -import javax.inject.Inject; | |
12 | -import javax.ws.rs.container.ContainerRequestContext; | |
13 | -import javax.ws.rs.container.ContainerRequestFilter; | |
14 | -import javax.ws.rs.container.ContainerResponseContext; | |
15 | -import javax.ws.rs.container.ContainerResponseFilter; | |
16 | -import javax.ws.rs.container.PreMatching; | |
17 | -import javax.ws.rs.container.ResourceInfo; | |
18 | -import javax.ws.rs.core.Context; | |
19 | -import javax.ws.rs.ext.Provider; | |
20 | -import org.demoiselle.jee.ws.jaxrs.annotation.Cache; | |
21 | -import org.demoiselle.jee.ws.jaxrs.annotation.CorsAllowMethods; | |
22 | -import org.demoiselle.jee.ws.jaxrs.annotation.CorsAllowOrigin; | |
23 | - | |
24 | -/** | |
25 | - * | |
26 | - * @author 70744416353 | |
27 | - */ | |
28 | -@Provider | |
29 | -@PreMatching | |
30 | -public class JaxRsFilter implements ContainerRequestFilter, ContainerResponseFilter { | |
31 | - | |
32 | - @Inject | |
33 | - private Logger LOG; | |
34 | - | |
35 | - @Context | |
36 | - private ResourceInfo info; | |
37 | - | |
38 | - @Override | |
39 | - public void filter(ContainerRequestContext requestContext) { | |
40 | - } | |
41 | - | |
42 | - @Override | |
43 | - public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) { | |
44 | - | |
45 | - response.getHeaders().putSingle("Demoiselle", "3.0.0"); | |
46 | - response.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); | |
47 | - response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE"); | |
48 | - response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type"); | |
49 | - | |
50 | - if (requestContext.getMethod().equals("GET")) { | |
51 | - Cache max = info.getResourceMethod().getAnnotation(Cache.class); | |
52 | - if (max != null) { | |
53 | - response.getHeaders().putSingle("Cache-Control", max.value()); | |
54 | - } | |
55 | - } | |
56 | - | |
57 | -// CorsAllowMethods corsAllowMethods = info.getResourceMethod().getAnnotation(CorsAllowMethods.class); | |
58 | -// if (corsAllowMethods != null) { | |
59 | -// response.getHeaders().putSingle("Access-Control-Allow-Methods", requestContext.getMethod()); | |
60 | -// } | |
61 | -// | |
62 | -// CorsAllowOrigin corsAllowOrigin = info.getResourceMethod().getAnnotation(CorsAllowOrigin.class); | |
63 | -// if (corsAllowOrigin != null) { | |
64 | -// response.getHeaders().putSingle("Access-Control-Allow-Origin", corsAllowOrigin.value()); | |
65 | -// } | |
66 | - } | |
67 | - | |
68 | - @PostConstruct | |
69 | - public void init() { | |
70 | - LOG.info("Demoiselle Module - Rest"); | |
71 | - } | |
72 | - | |
73 | -} |
demoiselle-rest/src/main/java/org/demoiselle/jee/ws/jaxrs/interceptor/ValidatePayloadInterceptor.java
... | ... | @@ -1,67 +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 org.demoiselle.jee.ws.jaxrs.annotation.ValidatePayload; | |
10 | -import java.io.Serializable; | |
11 | -import java.util.HashSet; | |
12 | -import java.util.Set; | |
13 | -import javax.annotation.Priority; | |
14 | - | |
15 | -import javax.interceptor.AroundInvoke; | |
16 | -import javax.interceptor.Interceptor; | |
17 | -import static javax.interceptor.Interceptor.Priority.APPLICATION; | |
18 | -import javax.interceptor.InvocationContext; | |
19 | -import javax.validation.ConstraintViolation; | |
20 | -import javax.validation.UnexpectedTypeException; | |
21 | -import javax.validation.Validation; | |
22 | -import static javax.validation.Validation.buildDefaultValidatorFactory; | |
23 | -import javax.validation.Validator; | |
24 | -import javax.validation.ValidatorFactory; | |
25 | - | |
26 | -import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | |
27 | - | |
28 | -@Interceptor | |
29 | -@ValidatePayload | |
30 | -@Priority(APPLICATION) | |
31 | -public class ValidatePayloadInterceptor implements Serializable { | |
32 | - | |
33 | - private static final long serialVersionUID = 1L; | |
34 | - | |
35 | - @AroundInvoke | |
36 | - public Object manage(final InvocationContext ic) throws Exception { | |
37 | - DemoiselleRESTException ex = new DemoiselleRESTException(); | |
38 | - Set<ConstraintViolation<?>> violations = new HashSet<>(); | |
39 | - for (Object params : ic.getParameters()) { | |
40 | - if (params != null) { | |
41 | - ValidatorFactory dfv = buildDefaultValidatorFactory(); | |
42 | - Validator validator = dfv.getValidator(); | |
43 | - try { | |
44 | - violations.addAll(validator.validate(params)); | |
45 | - for (ConstraintViolation<?> violation : violations) { | |
46 | - String field = (violation.getRootBeanClass().getSimpleName() + "_" | |
47 | - + violation.getPropertyPath()).toLowerCase(); | |
48 | - // GPMessage msg = | |
49 | - // GPMessage.INVALID_FIELD_P1.setSufix(violation.getConstraintDescriptor() | |
50 | - // .getAnnotation().annotationType().getSimpleName().toLowerCase()); | |
51 | - | |
52 | - ex.addMessage(field, violation.getMessage()); | |
53 | - } | |
54 | - } catch (UnexpectedTypeException cause) { | |
55 | - // GPMessage msg = GPMessage.GENERAL_ERROR_P1; | |
56 | - // msg.setParam(cause.getMessage()); | |
57 | - throw new DemoiselleRESTException("ERRO GENERICO -> ALTERAR"); | |
58 | - } | |
59 | - } | |
60 | - } | |
61 | - | |
62 | - if (!violations.isEmpty() && !ex.getMessages().isEmpty()) { | |
63 | - throw ex; | |
64 | - } | |
65 | - return ic.proceed(); | |
66 | - } | |
67 | -} |
demoiselle-security/src/main/java/org/demoiselle/jee/security/exception/DemoiselleSecurityException.java
... | ... | @@ -8,7 +8,7 @@ package org.demoiselle.jee.security.exception; |
8 | 8 | |
9 | 9 | import java.util.HashMap; |
10 | 10 | |
11 | -import org.demoiselle.jee.ws.jaxrs.exception.DemoiselleRESTException; | |
11 | +import org.demoiselle.jee.rest.exception.DemoiselleRESTException; | |
12 | 12 | |
13 | 13 | public class DemoiselleSecurityException extends DemoiselleRESTException { |
14 | 14 | ... | ... |