aboutsummaryrefslogtreecommitdiffstats
path: root/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java')
-rw-r--r--aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java194
1 files changed, 97 insertions, 97 deletions
diff --git a/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java
index ab3c9fd..e6cf080 100644
--- a/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java
+++ b/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java
@@ -19,131 +19,131 @@
*/
package org.onap.aai.web;
+import jersey.repackaged.com.google.common.collect.Sets;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.servlet.ServletProperties;
-import org.onap.aai.rest.CQ2Gremlin;
-import org.onap.aai.rest.CQ2GremlinTest;
-import org.onap.aai.rest.DslConsumer;
-import org.onap.aai.rest.QueryConsumer;
-import org.onap.aai.rest.RecentAPIConsumer;
+import org.onap.aai.aailog.logs.AaiDebugLog;
+import org.onap.aai.rest.*;
import org.onap.aai.rest.search.ModelAndNamedQueryRestProvider;
import org.onap.aai.rest.search.SearchProvider;
import org.onap.aai.rest.util.EchoResponse;
-import org.reflections.Reflections;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Component;
import javax.annotation.Priority;
-import javax.ws.rs.container.ContainerRequestFilter;
-import javax.ws.rs.container.ContainerResponseFilter;
-
-import java.util.List;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+import java.util.Comparator;
import java.util.Set;
import java.util.logging.Logger;
-import java.util.stream.Collectors;
-@Component
-public class JerseyConfiguration extends ResourceConfig {
+import static java.lang.Boolean.parseBoolean;
+import static java.util.Comparator.comparingInt;
- private static final Logger log = Logger.getLogger(JerseyConfiguration.class.getName());
+@Configuration
+public class JerseyConfiguration {
- private Environment env;
+ private static final Logger log = Logger.getLogger(JerseyConfiguration.class.getName());
+ private static final org.slf4j.Logger logger = LoggerFactory.getLogger(JerseyConfiguration.class.getName());
- @Autowired
- public JerseyConfiguration(Environment env) {
-
- this.env = env;
-
- register(SearchProvider.class);
- register(ModelAndNamedQueryRestProvider.class);
- register(QueryConsumer.class);
- register(RecentAPIConsumer.class);
- register(DslConsumer.class);
- register(EchoResponse.class);
- register(CQ2Gremlin.class);
- register(CQ2GremlinTest.class);
-
- //Request Filters
- registerFiltersForRequests();
- // Response Filters
- registerFiltersForResponses();
-
- property(ServletProperties.FILTER_FORWARD_ON_404, true);
-
- // Following registers the request headers and response headers
- // If the LoggingFilter second argument is set to true, it will print response value as well
- if ("true".equalsIgnoreCase(env.getProperty("aai.request.logging.enabled"))) {
- register(new LoggingFilter(log, false));
- }
+ private static AaiDebugLog debugLog = new AaiDebugLog();
+ static {
+ debugLog.setupMDC();
}
- public void registerFiltersForRequests() {
+ private static final String LOGGING_ENABLED_PROPERTY = "aai.request.logging.enabled";
+ private static final boolean ENABLE_RESPONSE_LOGGING = false;
+
+ private final Environment environment;
- // Find all the classes within the interceptors package
- Reflections reflections = new Reflections("org.onap.aai.interceptors");
- // Filter them based on the clazz that was passed in
- Set<Class<? extends ContainerRequestFilter>> filters = reflections.getSubTypesOf(ContainerRequestFilter.class);
+ @Autowired
+ public JerseyConfiguration(Environment environment) {
+ this.environment = environment;
+ }
+ @Bean
+ public ResourceConfig resourceConfig() {
+ ResourceConfig resourceConfig = new ResourceConfig();
+
+ Set<Class<?>> classes = Sets.newHashSet(
+ SearchProvider.class,
+ ModelAndNamedQueryRestProvider.class,
+ QueryConsumer.class,
+ RecentAPIConsumer.class,
+ DslConsumer.class,
+ EchoResponse.class,
+ CQ2Gremlin.class,
+ CQ2GremlinTest.class
+ );
+ Set<Class<?>> filterClasses = Sets.newHashSet(
+ org.onap.aai.aailog.filter.AaiAuditLogContainerFilter.class,
+ org.onap.aai.interceptors.pre.RequestTransactionLogging.class,
+ org.onap.aai.interceptors.pre.HeaderValidation.class,
+ org.onap.aai.interceptors.pre.HttpHeaderInterceptor.class,
+ org.onap.aai.interceptors.pre.OneWaySslAuthorization.class,
+ org.onap.aai.interceptors.pre.VersionLatestInterceptor.class,
+ org.onap.aai.interceptors.pre.RetiredInterceptor.class,
+ org.onap.aai.interceptors.pre.VersionInterceptor.class,
+ org.onap.aai.interceptors.pre.RequestHeaderManipulation.class,
+ org.onap.aai.interceptors.pre.RequestModification.class,
+ org.onap.aai.interceptors.post.InvalidResponseStatus.class,
+ org.onap.aai.interceptors.post.ResponseTransactionLogging.class,
+ org.onap.aai.interceptors.post.ResponseHeaderManipulation.class
+ );
+ if (isLoggingEnabled()) {
+ logRequests(resourceConfig);
+ }
+ resourceConfig.registerClasses(classes);
+ logger.debug("REGISTERED CLASSES " + classes.toString());
+
+ throwIfPriorityAnnotationAbsent(filterClasses);
+ filterClasses.stream()
+ .filter(this::isEnabledByActiveProfiles)
+ .sorted(priorityComparator())
+ .forEach(resourceConfig::register);
+
+ filterClasses.stream()
+ .filter(this::isEnabledByActiveProfiles)
+ .sorted(priorityComparator())
+ .forEach(s -> logger.debug("REGISTERED FILTERS " + s.getName()));
+ return resourceConfig;
+ }
- // Check to ensure that each of the filter has the @Priority annotation and if not throw exception
- for (Class filterClass : filters) {
- if (filterClass.getAnnotation(Priority.class) == null) {
- throw new RuntimeException("Container filter " + filterClass.getName() + " does not have @Priority annotation");
+ private <T> void throwIfPriorityAnnotationAbsent(Collection<Class<? extends T>> classes) {
+ for (Class clazz : classes) {
+ if (!clazz.isAnnotationPresent(Priority.class)) {
+ logger.debug("throwIfPriorityAnnotationAbsent: missing filter priority for : " + clazz.getName());
+ throw new MissingFilterPriorityException(clazz);
}
}
+ }
- // Turn the set back into a list
- List<Class<? extends ContainerRequestFilter>> filtersList = filters
- .stream()
- .filter(f -> {
- if (f.isAnnotationPresent(Profile.class)
- && !env.acceptsProfiles(f.getAnnotation(Profile.class).value())) {
- return false;
- }
- return true;
- })
- .collect(Collectors.toList());
-
- // Sort them by their priority levels value
- filtersList.sort((c1, c2) -> Integer.valueOf(c1.getAnnotation(Priority.class).value()).compareTo(c2.getAnnotation(Priority.class).value()));
-
- // Then register this to the jersey application
- filtersList.forEach(this::register);
+ private <T> Comparator<Class<? extends T>> priorityComparator() {
+ return comparingInt(clazz -> clazz.getAnnotation(Priority.class).value());
}
- public void registerFiltersForResponses() {
+ private void logRequests(ResourceConfig resourceConfig) {
+ resourceConfig.register(new LoggingFilter(log, ENABLE_RESPONSE_LOGGING));
+ }
- // Find all the classes within the interceptors package
- Reflections reflections = new Reflections("org.onap.aai.interceptors");
- // Filter them based on the clazz that was passed in
- Set<Class<? extends ContainerResponseFilter>> filters = reflections.getSubTypesOf(ContainerResponseFilter.class);
+ private boolean isLoggingEnabled() {
+ return parseBoolean(environment.getProperty(LOGGING_ENABLED_PROPERTY));
+ }
+ private boolean isEnabledByActiveProfiles(AnnotatedElement annotatedElement) {
+ boolean result = !annotatedElement.isAnnotationPresent(Profile.class) ||
+ environment.acceptsProfiles(annotatedElement.getAnnotation(Profile.class).value());
+ logger.debug("isEnabledByActiveProfiles: annotatedElement: " + annotatedElement.toString() + " result=" + result);
+ return result;
+ }
- // Check to ensure that each of the filter has the @Priority annotation and if not throw exception
- for (Class filterClass : filters) {
- if (filterClass.getAnnotation(Priority.class) == null) {
- throw new RuntimeException("Container filter " + filterClass.getName() + " does not have @Priority annotation");
- }
+ private class MissingFilterPriorityException extends RuntimeException {
+ private MissingFilterPriorityException(Class<?> clazz) {
+ super("Container filter " + clazz.getName() + " does not have @Priority annotation");
}
-
- // Turn the set back into a list
- List<Class<? extends ContainerResponseFilter>> filtersList = filters.stream()
- .filter(f -> {
- if (f.isAnnotationPresent(Profile.class)
- && !env.acceptsProfiles(f.getAnnotation(Profile.class).value())) {
- return false;
- }
- return true;
- })
- .collect(Collectors.toList());
-
- // Sort them by their priority levels value
- filtersList.sort((c1, c2) -> Integer.valueOf(c1.getAnnotation(Priority.class).value()).compareTo(c2.getAnnotation(Priority.class).value()));
-
- // Then register this to the jersey application
- filtersList.forEach(this::register);
}
-}
+} \ No newline at end of file