From 761e4f76524203624e623926b20494a36ea15fb6 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 01 Jul 2016 08:35:46 +0000
Subject: [PATCH] OPENDJ-3193 fix IllegalArgumentException when performing query requests

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java         |   23 +++++++++++++++--------
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapHttpApplication.java          |   11 ++++-------
 opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/Rest2LdapEndpoint.java |    6 +-----
 opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/AdminEndpoint.java     |   12 ++++++++----
 4 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapHttpApplication.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapHttpApplication.java
index dc54f07..82d391f 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapHttpApplication.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapHttpApplication.java
@@ -16,10 +16,9 @@
 
 package org.forgerock.opendj.rest2ldap;
 
+import static org.forgerock.http.handler.Handlers.chainOf;
 import static org.forgerock.http.handler.HttpClientHandler.OPTION_KEY_MANAGERS;
 import static org.forgerock.http.handler.HttpClientHandler.OPTION_TRUST_MANAGERS;
-import static org.forgerock.http.routing.RouteMatchers.newResourceApiVersionBehaviourManager;
-import static org.forgerock.http.routing.RouteMatchers.resourceApiVersionContextFilter;
 import static org.forgerock.json.JsonValueFunctions.duration;
 import static org.forgerock.json.JsonValueFunctions.enumConstant;
 import static org.forgerock.json.JsonValueFunctions.setOf;
@@ -61,7 +60,6 @@
 import org.forgerock.http.HttpApplication;
 import org.forgerock.http.HttpApplicationException;
 import org.forgerock.http.filter.Filters;
-import org.forgerock.http.handler.Handlers;
 import org.forgerock.http.handler.HttpClientHandler;
 import org.forgerock.http.io.Buffer;
 import org.forgerock.http.protocol.Headers;
@@ -201,10 +199,9 @@
             configureSecurity(config.get("security"));
             configureConnectionFactories(config.get("ldapConnectionFactories"));
             final Filter authorizationFilter = buildAuthorizationFilter(config.get("authorization").required());
-            return Handlers.chainOf(newHttpHandler(configureRest2Ldap(configDirectory)),
-                                    new ErrorLoggerFilter(),
-                                    authorizationFilter,
-                                    resourceApiVersionContextFilter(newResourceApiVersionBehaviourManager()));
+            return chainOf(newHttpHandler(configureRest2Ldap(configDirectory)),
+                           new ErrorLoggerFilter(),
+                           authorizationFilter);
         } catch (final Exception e) {
             final LocalizableMessage errorMsg = ERR_FAIL_PARSE_CONFIGURATION.get(e.getLocalizedMessage());
             logger.error(errorMsg, e);
diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java
index 182bd30..2760cd3 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfigurator.java
@@ -18,6 +18,7 @@
 
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptyList;
+import static org.forgerock.http.routing.RouteMatchers.newResourceApiVersionBehaviourManager;
 import static org.forgerock.http.routing.RoutingMode.STARTS_WITH;
 import static org.forgerock.http.routing.Version.version;
 import static org.forgerock.http.util.Json.readJsonLenient;
@@ -25,6 +26,7 @@
 import static org.forgerock.json.JsonValueFunctions.pointer;
 import static org.forgerock.json.JsonValueFunctions.setOf;
 import static org.forgerock.json.resource.RouteMatchers.requestUriMatcher;
+import static org.forgerock.json.resource.RouteMatchers.resourceApiVersionContextFilter;
 import static org.forgerock.opendj.ldap.Connections.LOAD_BALANCER_MONITORING_INTERVAL;
 import static org.forgerock.opendj.ldap.Connections.newCachedConnectionPool;
 import static org.forgerock.opendj.ldap.Connections.newFailoverLoadBalancer;
@@ -62,10 +64,12 @@
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509KeyManager;
 
+import org.forgerock.http.routing.ResourceApiVersionBehaviourManager;
 import org.forgerock.i18n.LocalizedIllegalArgumentException;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.json.JsonValue;
 import org.forgerock.json.resource.BadRequestException;
+import org.forgerock.json.resource.FilterChain;
 import org.forgerock.json.resource.Request;
 import org.forgerock.json.resource.RequestHandler;
 import org.forgerock.json.resource.ResourceException;
@@ -193,14 +197,14 @@
         }
 
         for (final File endpoint : endpoints) {
-            final Router router = configureEndpoint(endpoint, options);
-            pathRouter.addRoute(requestUriMatcher(STARTS_WITH, endpoint.getName()), router);
+            final RequestHandler endpointHandler = configureEndpoint(endpoint, options);
+            pathRouter.addRoute(requestUriMatcher(STARTS_WITH, endpoint.getName()), endpointHandler);
         }
         return pathRouter;
     }
 
     /**
-     * Creates a new CREST {@link Router} representing a single endpoint whose configuration is defined in the
+     * Creates a new CREST {@link RequestHandler} representing a single endpoint whose configuration is defined in the
      * provided {@code endpointDirectory} parameter. The directory should contain a separate file for each supported
      * version of the REST endpoint. The name of the file, excluding the suffix, identifies the resource definition
      * which acts as the entry point into the endpoint.
@@ -208,12 +212,11 @@
      * @param endpointDirectory The directory containing the endpoint's resource definitions, e.g.
      *                          rest2ldap/routes/api would contain definitions for the "api" endpoint.
      * @param options The Rest2Ldap configuration options.
-     * @return A new CREST {@link Router} configured using the provided options and endpoint mappings.
+     * @return A new CREST {@link RequestHandler} configured using the provided options and endpoint mappings.
      * @throws IOException If the endpoint configuration cannot be read.
-     * @throws IllegalArgumentException
-     *         If the configuration is invalid.
+     * @throws IllegalArgumentException If the configuration is invalid.
      */
-    public static Router configureEndpoint(final File endpointDirectory, final Options options) throws IOException {
+    public static RequestHandler configureEndpoint(File endpointDirectory, Options options) throws IOException {
         final Router versionRouter = new Router();
         final File[] endpointVersions = endpointDirectory.listFiles(new FileFilter() {
             @Override
@@ -259,7 +262,11 @@
                 }
             });
         }
-        return versionRouter;
+
+        // FIXME: Disable the warning header for now due to CREST-389 / CREST-390.
+        final ResourceApiVersionBehaviourManager behaviourManager = newResourceApiVersionBehaviourManager();
+        behaviourManager.setWarningEnabled(false);
+        return new FilterChain(versionRouter, resourceApiVersionContextFilter(behaviourManager));
     }
 
     static JsonValue readJson(final File resource) throws IOException {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/AdminEndpoint.java b/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/AdminEndpoint.java
index d0f5a5f..7085ae5 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/AdminEndpoint.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/AdminEndpoint.java
@@ -16,10 +16,9 @@
  */
 package org.opends.server.protocols.http.rest2ldap;
 
-import static org.forgerock.http.handler.Handlers.chainOf;
 import static org.forgerock.http.routing.RouteMatchers.newResourceApiVersionBehaviourManager;
-import static org.forgerock.http.routing.RouteMatchers.resourceApiVersionContextFilter;
 import static org.forgerock.http.routing.Version.version;
+import static org.forgerock.json.resource.RouteMatchers.resourceApiVersionContextFilter;
 import static org.forgerock.json.resource.http.CrestHttp.newHttpHandler;
 import static org.forgerock.opendj.ldap.schema.CoreSchema.getBooleanSyntax;
 import static org.forgerock.opendj.ldap.schema.CoreSchema.getIntegerSyntax;
@@ -40,9 +39,11 @@
 import org.forgerock.http.HttpApplication;
 import org.forgerock.http.HttpApplicationException;
 import org.forgerock.http.io.Buffer;
+import org.forgerock.http.routing.ResourceApiVersionBehaviourManager;
 import org.forgerock.http.routing.Version;
 import org.forgerock.json.JsonPointer;
 import org.forgerock.json.resource.BadRequestException;
+import org.forgerock.json.resource.FilterChain;
 import org.forgerock.json.resource.Request;
 import org.forgerock.json.resource.RequestHandler;
 import org.forgerock.json.resource.ResourceException;
@@ -191,8 +192,11 @@
           return new BadRequestException(message).asPromise();
         }
       });
-      return chainOf(newHttpHandler(versionRouter),
-                     resourceApiVersionContextFilter(newResourceApiVersionBehaviourManager()));
+
+      // FIXME: Disable the warning header for now due to CREST-389 / CREST-390.
+      final ResourceApiVersionBehaviourManager behaviourManager = newResourceApiVersionBehaviourManager();
+      behaviourManager.setWarningEnabled(false);
+      return newHttpHandler(new FilterChain(versionRouter, resourceApiVersionContextFilter(behaviourManager)));
     }
 
     private Resource buildResource(final AbstractManagedObjectDefinition<?, ?> mod)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/Rest2LdapEndpoint.java b/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/Rest2LdapEndpoint.java
index 4ce2892..b328186 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/Rest2LdapEndpoint.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/rest2ldap/Rest2LdapEndpoint.java
@@ -15,9 +15,6 @@
  */
 package org.opends.server.protocols.http.rest2ldap;
 
-import static org.forgerock.http.handler.Handlers.chainOf;
-import static org.forgerock.http.routing.RouteMatchers.newResourceApiVersionBehaviourManager;
-import static org.forgerock.http.routing.RouteMatchers.resourceApiVersionContextFilter;
 import static org.forgerock.json.resource.http.CrestHttp.newHttpHandler;
 import static org.forgerock.opendj.rest2ldap.Rest2LdapJsonConfigurator.configureEndpoint;
 import static org.forgerock.util.Options.defaultOptions;
@@ -79,8 +76,7 @@
       final File endpointConfig = getFileForPath(configuration.getConfigDirectory(), serverContext);
       try
       {
-        return chainOf(newHttpHandler(configureEndpoint(endpointConfig, defaultOptions())),
-                       resourceApiVersionContextFilter(newResourceApiVersionBehaviourManager()));
+        return newHttpHandler(configureEndpoint(endpointConfig, defaultOptions()));
       }
       catch (IOException e)
       {

--
Gitblit v1.10.0