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 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

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 {

--
Gitblit v1.10.0