Repository: knox
Updated Branches:
  refs/heads/KNOX-481 fc84cd73c -> 2a0f54169


Separated dispatch from filters and added custom dispatch config KNOX-483


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/2a0f5416
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/2a0f5416
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/2a0f5416

Branch: refs/heads/KNOX-481
Commit: 2a0f5416930300a1751dffc501f09ffa45722eb3
Parents: fc84cd7
Author: Sumit Gupta <su...@apache.org>
Authored: Thu Jan 15 23:46:01 2015 -0500
Committer: Sumit Gupta <su...@apache.org>
Committed: Thu Jan 15 23:46:01 2015 -0500

----------------------------------------------------------------------
 .../impl/DispatchDeploymentContributor.java     |   8 +-
 .../ServiceDefinitionDeploymentContributor.java | 131 +++++++++-------
 .../gateway/dispatch/UrlConnectionDispatch.java |  29 +++-
 .../apache/hadoop/gateway/AuditLoggingTest.java |   2 +
 .../service/definition/CustomDispatch.java      |  47 ++++++
 .../service/definition/ServiceDefinition.java   |  11 ++
 .../resources/services/hbase/0.98.0/rewrite.xml |  62 ++++++++
 .../resources/services/hbase/0.98.0/service.xml |  33 ++++
 .../resources/services/hive/0.13.0/rewrite.xml  |  21 +++
 .../resources/services/hive/0.13.0/service.xml  |  22 +++
 .../services/yarn-rm/2.5.0/service.xml          |   3 +
 .../definition/ServiceDefinitionTest.java       |   4 +
 .../hbase/HBaseDeploymentContributor.java       |   4 +-
 .../HBaseDispatchDeploymentContributor.java     |   9 +-
 .../gateway/hbase/HBaseHttpClientDispatch.java  |   5 +-
 .../gateway/hive/HiveDeploymentContributor.java |   4 +-
 .../hive/HiveDispatchDeploymentContributor.java |   8 +-
 .../gateway/hive/HiveHttpClientDispatch.java    |  13 +-
 ...NameNodeHaDispatchDeploymentContributor.java |  10 +-
 .../WebHdfsDispatchDeploymentContributor.java   |   7 +-
 .../dispatch/WebHdfsHaHttpClientDispatch.java   |  32 ++--
 .../WebHdfsHaHttpClientDispatchTest.java        |  11 +-
 .../dispatch/AbstractGatewayDispatch.java       |  91 ++---------
 .../hadoop/gateway/dispatch/Dispatch.java       |  10 ++
 .../gateway/dispatch/GatewayDispatchFilter.java | 153 +++++++++++++++++++
 .../gateway/dispatch/HttpClientDispatch.java    |  40 +++--
 .../dispatch/HttpClientDispatchTest.java        |   2 +
 .../deploy/DeploymentFactoryFuncTest.java       |   4 +-
 pom.xml                                         |   2 +-
 29 files changed, 590 insertions(+), 188 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/DispatchDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/DispatchDeploymentContributor.java
 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/DispatchDeploymentContributor.java
index 08b74c4..832cefc 100644
--- 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/DispatchDeploymentContributor.java
+++ 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/DispatchDeploymentContributor.java
@@ -22,6 +22,7 @@ import 
org.apache.hadoop.gateway.deploy.ProviderDeploymentContributorBase;
 import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
 import org.apache.hadoop.gateway.dispatch.HttpClientDispatch;
 import org.apache.hadoop.gateway.topology.Provider;
 import org.apache.hadoop.gateway.topology.Service;
@@ -31,7 +32,9 @@ import java.util.List;
 public class DispatchDeploymentContributor extends 
ProviderDeploymentContributorBase {
   
   private static final String REPLAY_BUFFER_SIZE_PARAM = "replayBufferSize";
-  
+
+  private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
+
   // Default global replay buffer size in KB
   public static final String DEFAULT_REPLAY_BUFFER_SIZE = "4";
 
@@ -56,7 +59,8 @@ public class DispatchDeploymentContributor extends 
ProviderDeploymentContributor
         }
       }
     }
-    FilterDescriptor filter = resource.addFilter().name( getName() ).role( 
getRole() ).impl( HttpClientDispatch.class );
+    FilterDescriptor filter = resource.addFilter().name( getName() ).role( 
getRole() ).impl( GatewayDispatchFilter.class );
+    
filter.param().name(DISPATCH_IMPL_PARAM).value(HttpClientDispatch.class.getName());
     filter.param().name("replayBufferSize").value(replayBufferSize);
     if( context.getGatewayConfig().isHadoopKerberosSecured() ) {
       filter.param().name("kerberos").value("true");

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
index 4cff585..79cc4a5 100644
--- 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
+++ 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
@@ -19,9 +19,12 @@ package org.apache.hadoop.gateway.deploy.impl;
 
 import org.apache.hadoop.gateway.deploy.DeploymentContext;
 import org.apache.hadoop.gateway.deploy.ServiceDeploymentContributorBase;
+import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
 import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptor;
+import org.apache.hadoop.gateway.service.definition.CustomDispatch;
 import org.apache.hadoop.gateway.service.definition.RewriteFilter;
 import org.apache.hadoop.gateway.service.definition.ServiceDefinition;
 import org.apache.hadoop.gateway.service.definition.UrlBinding;
@@ -35,73 +38,91 @@ import java.util.Map;
 
 public class ServiceDefinitionDeploymentContributor extends 
ServiceDeploymentContributorBase {
 
-    private ServiceDefinition serviceDefinition;
+  private static final String DISPATCH_ROLE = "dispatch";
 
-    private UrlRewriteRulesDescriptor serviceRules;
+  private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
 
-    public ServiceDefinitionDeploymentContributor(ServiceDefinition 
serviceDefinition, UrlRewriteRulesDescriptor serviceRules) {
-        this.serviceDefinition = serviceDefinition;
-        this.serviceRules = serviceRules;
-    }
+  private ServiceDefinition serviceDefinition;
 
-    @Override
-    public String getRole() {
-        return serviceDefinition.getRole();
-    }
+  private UrlRewriteRulesDescriptor serviceRules;
 
-    @Override
-    public String getName() {
-        return serviceDefinition.getName();
-    }
+  public ServiceDefinitionDeploymentContributor(ServiceDefinition 
serviceDefinition, UrlRewriteRulesDescriptor serviceRules) {
+    this.serviceDefinition = serviceDefinition;
+    this.serviceRules = serviceRules;
+  }
+
+  @Override
+  public String getRole() {
+    return serviceDefinition.getRole();
+  }
 
-    @Override
-    public void contributeService(DeploymentContext context, Service service) 
throws Exception {
-        contributeRewriteRules(context, service);
-        contributeResources(context, service);
+  @Override
+  public String getName() {
+    return serviceDefinition.getName();
+  }
+
+  @Override
+  public void contributeService(DeploymentContext context, Service service) 
throws Exception {
+    contributeRewriteRules(context, service);
+    contributeResources(context, service);
+  }
+
+  private void contributeRewriteRules(DeploymentContext context, Service 
service) {
+    if ( serviceRules != null ) {
+      UrlRewriteRulesDescriptor clusterRules = 
context.getDescriptor("rewrite");
+      clusterRules.addRules(serviceRules);
     }
+  }
 
-    private void contributeRewriteRules(DeploymentContext context, Service 
service) {
-        if (serviceRules != null) {
-            UrlRewriteRulesDescriptor clusterRules = 
context.getDescriptor("rewrite");
-            clusterRules.addRules(serviceRules);
+  private void contributeResources(DeploymentContext context, Service service) 
{
+    Map<String, String> filterParams = new HashMap<String, String>();
+    List<UrlBinding> bindings = serviceDefinition.getUrlBindings();
+    for ( UrlBinding binding : bindings ) {
+      List<RewriteFilter> filters = binding.getRewriteFilters();
+      if ( filters != null && !filters.isEmpty() ) {
+        filterParams.clear();
+        for ( RewriteFilter filter : filters ) {
+          filterParams.put(filter.getApplyTo(), filter.getRef());
         }
+      }
+      try {
+        contributeResource(context, service, binding.getPattern(), 
filterParams);
+      } catch ( URISyntaxException e ) {
+        e.printStackTrace();
+      }
     }
 
-    private void contributeResources(DeploymentContext context, Service 
service) {
-        Map<String, String> filterParams = new HashMap<String, String>();
-        List<UrlBinding> bindings = serviceDefinition.getUrlBindings();
-        for (UrlBinding binding : bindings) {
-            List<RewriteFilter> filters = binding.getRewriteFilters();
-            if (filters != null && !filters.isEmpty()) {
-                filterParams.clear();
-                for (RewriteFilter filter : filters) {
-                    filterParams.put(filter.getApplyTo(), filter.getRef());
-                }
-            }
-            try {
-                contributeResource(context, service, binding.getPattern(), 
filterParams);
-            } catch (URISyntaxException e) {
-                e.printStackTrace();
-            }
-        }
+  }
 
+  private void contributeResource(DeploymentContext context, Service service, 
String pattern, Map<String, String> filterParams) throws URISyntaxException {
+    List<FilterParamDescriptor> params = new 
ArrayList<FilterParamDescriptor>();
+    ResourceDescriptor resource = context.getGatewayDescriptor().addResource();
+    resource.role(service.getRole());
+    resource.pattern(pattern);
+    addWebAppSecFilters(context, service, resource);
+    addAuthenticationFilter(context, service, resource);
+    addIdentityAssertionFilter(context, service, resource);
+    addAuthorizationFilter(context, service, resource);
+    if ( !filterParams.isEmpty() ) {
+      for ( Map.Entry<String, String> filterParam : filterParams.entrySet() ) {
+        
params.add(resource.createFilterParam().name(filterParam.getKey()).value(filterParam.getValue()));
+      }
     }
-
-    private void contributeResource(DeploymentContext context, Service 
service, String pattern, Map<String, String> filterParams) throws 
URISyntaxException {
-        List<FilterParamDescriptor> params = new 
ArrayList<FilterParamDescriptor>();
-        ResourceDescriptor resource = 
context.getGatewayDescriptor().addResource();
-        resource.role(service.getRole());
-        resource.pattern(pattern);
-        addWebAppSecFilters(context, service, resource);
-        addAuthenticationFilter(context, service, resource);
-        addIdentityAssertionFilter(context, service, resource);
-        addAuthorizationFilter(context, service, resource);
-        if (!filterParams.isEmpty()) {
-            for (Map.Entry<String, String> filterParam : 
filterParams.entrySet()) {
-                
params.add(resource.createFilterParam().name(filterParam.getKey()).value(filterParam.getValue()));
-            }
+    addRewriteFilter(context, service, resource, params);
+    CustomDispatch customDispatch = serviceDefinition.getDispatch();
+    if (customDispatch != null) {
+      String contributorName = customDispatch.getContributorName();
+      if (contributorName != null) {
+        addDispatchFilter(context, service, resource, DISPATCH_ROLE, 
contributorName);
+      } else {
+        String className = customDispatch.getClassName();
+        if (className != null) {
+          FilterDescriptor filter = resource.addFilter().name( getName() 
).role( DISPATCH_ROLE ).impl( GatewayDispatchFilter.class );
+          filter.param().name(DISPATCH_IMPL_PARAM).value(className);
         }
-        addRewriteFilter( context, service, resource, params );
-        addDispatchFilter( context, service, resource, "dispatch", 
"http-client" );
+      }
+    } else {
+      addDispatchFilter(context, service, resource, DISPATCH_ROLE, 
"http-client");
     }
+  }
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-server/src/main/java/org/apache/hadoop/gateway/dispatch/UrlConnectionDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/dispatch/UrlConnectionDispatch.java
 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/dispatch/UrlConnectionDispatch.java
index 5b02221..c0347cf 100644
--- 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/dispatch/UrlConnectionDispatch.java
+++ 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/dispatch/UrlConnectionDispatch.java
@@ -26,6 +26,7 @@ import 
org.apache.hadoop.gateway.audit.api.AuditServiceFactory;
 import org.apache.hadoop.gateway.audit.api.Auditor;
 import org.apache.hadoop.gateway.audit.api.ResourceType;
 import org.apache.hadoop.gateway.audit.log4j.audit.AuditConstants;
+import org.apache.hadoop.gateway.filter.AbstractGatewayFilter;
 import org.apache.hadoop.gateway.i18n.messages.MessagesFactory;
 import org.apache.hadoop.gateway.i18n.resources.ResourcesFactory;
 import org.apache.hadoop.gateway.util.urltemplate.Parser;
@@ -36,6 +37,8 @@ import 
org.apache.hadoop.security.authentication.client.AuthenticatedURL;
 import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
 import org.apache.hadoop.security.authentication.client.KerberosAuthenticator;
 
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -53,7 +56,7 @@ import java.util.Enumeration;
 /**
  *
  */
-public class UrlConnectionDispatch extends AbstractGatewayDispatch {
+public class UrlConnectionDispatch extends AbstractGatewayFilter {
 
   private static final GatewayMessages LOG = MessagesFactory.get( 
GatewayMessages.class );
   private static final GatewayResources RES = ResourcesFactory.get( 
GatewayResources.class );
@@ -61,6 +64,30 @@ public class UrlConnectionDispatch extends 
AbstractGatewayDispatch {
           AuditConstants.KNOX_SERVICE_NAME, AuditConstants.KNOX_COMPONENT_NAME 
);
 
   @Override
+  protected void doFilter(HttpServletRequest request, HttpServletResponse 
response, FilterChain chain) throws IOException, ServletException {
+    String method = request.getMethod().toUpperCase();
+    if (method.equals("GET")) {
+      try {
+        doGet(getDispatchUrl(request), request, response);
+      } catch ( URISyntaxException e ) {
+        throw new ServletException(e);
+      }
+    } else {
+      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+    }
+  }
+
+  protected static URI getDispatchUrl(HttpServletRequest request) {
+    StringBuffer str = request.getRequestURL();
+    String query = request.getQueryString();
+    if ( query != null ) {
+      str.append('?');
+      str.append(query);
+    }
+    URI url = URI.create(str.toString());
+    return url;
+  }
+
   public void doGet( URI url, HttpServletRequest request, HttpServletResponse 
response ) throws IOException, URISyntaxException {
     String sourcePathInfo = request.getPathInfo();
     String sourcePattern = getConfig().getInitParameter( "pattern" );

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-server/src/test/java/org/apache/hadoop/gateway/AuditLoggingTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/test/java/org/apache/hadoop/gateway/AuditLoggingTest.java 
b/gateway-server/src/test/java/org/apache/hadoop/gateway/AuditLoggingTest.java
index b15c56b..8d88ec0 100644
--- 
a/gateway-server/src/test/java/org/apache/hadoop/gateway/AuditLoggingTest.java
+++ 
b/gateway-server/src/test/java/org/apache/hadoop/gateway/AuditLoggingTest.java
@@ -49,6 +49,7 @@ import 
org.apache.hadoop.gateway.audit.log4j.correlation.Log4jCorrelationService
 import org.apache.hadoop.gateway.dispatch.HttpClientDispatch;
 import org.apache.hadoop.gateway.i18n.resources.ResourcesFactory;
 import org.apache.hadoop.test.log.CollectAppender;
+import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.log4j.spi.LoggingEvent;
 import org.easymock.EasyMock;
 import org.junit.After;
@@ -171,6 +172,7 @@ public class AuditLoggingTest {
     EasyMock.replay( outboundResponse );
 
     HttpClientDispatch dispatch = new HttpClientDispatch();
+    dispatch.setHttpClient(new DefaultHttpClient());
     try {
       dispatch.doGet( new URI( uri ), inboundRequest, outboundResponse );
       fail( "Expected exception while accessing to unreachable host" );

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/CustomDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/CustomDispatch.java
 
b/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/CustomDispatch.java
new file mode 100644
index 0000000..af4f83c
--- /dev/null
+++ 
b/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/CustomDispatch.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.gateway.service.definition;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlType(name = "dispatch")
+public class CustomDispatch {
+
+  private String contributorName;
+
+  private String className;
+
+  @XmlAttribute(name = "contributor-name")
+  public String getContributorName() {
+    return contributorName;
+  }
+
+  public void setContributorName(String contributorName) {
+    this.contributorName = contributorName;
+  }
+
+  @XmlAttribute(name = "classname")
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+}

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/ServiceDefinition.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/ServiceDefinition.java
 
b/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/ServiceDefinition.java
index 9bb5679..3185941 100644
--- 
a/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/ServiceDefinition.java
+++ 
b/gateway-service-definitions/src/main/java/org/apache/hadoop/gateway/service/definition/ServiceDefinition.java
@@ -34,6 +34,8 @@ public class ServiceDefinition {
 
   private List<UrlBinding> urlBindings;
 
+  private CustomDispatch dispatch;
+
   @XmlAttribute
   public String getName() {
     return name;
@@ -70,4 +72,13 @@ public class ServiceDefinition {
   public void setUrlBindings(List<UrlBinding> urlBindings) {
     this.urlBindings = urlBindings;
   }
+
+  @XmlElement(name = "dispatch")
+  public CustomDispatch getDispatch() {
+    return dispatch;
+  }
+
+  public void setDispatch(CustomDispatch dispatch) {
+    this.dispatch = dispatch;
+  }
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/rewrite.xml
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/rewrite.xml
 
b/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/rewrite.xml
new file mode 100644
index 0000000..64ca750
--- /dev/null
+++ 
b/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/rewrite.xml
@@ -0,0 +1,62 @@
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<rules>
+
+    <rule dir="IN" name="WEBHBASE/webhbase/root/inbound" 
pattern="*://*:*/**/hbase/?{**}">
+        <rewrite template="{$serviceUrl[WEBHBASE]}/?{**}"/>
+    </rule>
+
+    <rule dir="IN" name="WEBHBASE/webhbase/path/inbound" 
pattern="*://*:*/**/hbase/{path=**}?{**}">
+        <rewrite template="{$serviceUrl[WEBHBASE]}/{path=**}?{**}"/>
+    </rule>
+
+    <rule name="WEBHBASE/webhbase/location/outbound">
+        <match pattern="*://*:*/{path=**}?{**}"/>
+        <rewrite template="{$frontend[url]}/hbase/{path=**}?{**}"/>
+    </rule>
+
+    <rule name="WEBHBASE/webhbase/address/outbound">
+        <match pattern="{host}:{port}"/>
+        <rewrite 
template="{$frontend[url]}/hbase-region?host={host}?port={port}"/>
+        <encrypt-query/>
+    </rule>
+
+    <filter name="WEBHBASE/webhbase/headers/outbound">
+        <content type="application/x-http-headers">
+            <apply path="Location" rule="WEBHBASE/webhbase/location/outbound"/>
+        </content>
+    </filter>
+
+    <filter name="WEBHBASE/webhbase/status/outbound">
+        <content type="*/json">
+            <apply path="$[LiveNodes][*][name]" 
rule="WEBHBASE/webhbase/address/outbound"/>
+        </content>
+        <content type="*/xml">
+            <apply path="/ClusterStatus/LiveNodes/Node/@name" 
rule="WEBHBASE/webhbase/address/outbound"/>
+        </content>
+    </filter>
+
+    <filter name="WEBHBASE/webhbase/regions/outbound">
+        <content type="*/json">
+            <apply path="$[Region][*][location]" 
rule="WEBHBASE/webhbase/address/outbound"/>
+        </content>
+        <content type="*/xml">
+            <apply path="/TableInfo/Region/@location" 
rule="WEBHBASE/webhbase/address/outbound"/>
+        </content>
+    </filter>
+
+</rules>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/service.xml
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/service.xml
new file mode 100644
index 0000000..0a7b935
--- /dev/null
+++ 
b/gateway-service-definitions/src/main/resources/services/hbase/0.98.0/service.xml
@@ -0,0 +1,33 @@
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<service role="WEBHBASE" name="webhbase" version="0.98.0">
+    <urls>
+        <url pattern="/hbase/?**">
+            <rewrite-filter ref="WEBHBASE/webhbase/headers/outbound" 
apply-to="response.headers"/>
+        </url>
+        <url pattern="/hbase/**?**">
+            <rewrite-filter ref="WEBHBASE/webhbase/headers/outbound" 
apply-to="response.headers"/>
+        </url>
+        <url pattern="/hbase/status/cluster?**">
+            <rewrite-filter ref="WEBHBASE/webhbase/status/outbound" 
apply-to="response.body"/>
+        </url>
+        <url pattern="/hbase/*/regions?**">
+            <rewrite-filter ref="WEBHBASE/webhbase/regions/outbound" 
apply-to="response.body"/>
+        </url>
+    </urls>
+    <dispatch contributor-name="hbase"/>
+</service>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/resources/services/hive/0.13.0/rewrite.xml
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/resources/services/hive/0.13.0/rewrite.xml
 
b/gateway-service-definitions/src/main/resources/services/hive/0.13.0/rewrite.xml
new file mode 100644
index 0000000..765e017
--- /dev/null
+++ 
b/gateway-service-definitions/src/main/resources/services/hive/0.13.0/rewrite.xml
@@ -0,0 +1,21 @@
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<rules>
+    <rule dir="IN" name="HIVE/hive/inbound" pattern="*://*:*/**/hive">
+        <rewrite template="{$serviceUrl[HIVE]}"/>
+    </rule>
+</rules>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/resources/services/hive/0.13.0/service.xml
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/resources/services/hive/0.13.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/hive/0.13.0/service.xml
new file mode 100644
index 0000000..b607fe2
--- /dev/null
+++ 
b/gateway-service-definitions/src/main/resources/services/hive/0.13.0/service.xml
@@ -0,0 +1,22 @@
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<service role="HIVE" name="hive" version="0.13.0">
+    <urls>
+        <url pattern="/hive"/>
+    </urls>
+    <dispatch contributor-name="hive"/>
+</service>

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
index 8b53cca..61a77f0 100644
--- 
a/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
+++ 
b/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
@@ -16,11 +16,13 @@
    limitations under the License.
 -->
 <service role="RESOURCEMANAGER" name="resourcemanager" version="2.5.0">
+    <policies></policies>
     <urls>
         <url pattern="/resourcemanager/v1/cluster/"/>
         <url pattern="/resourcemanager/v1/cluster/**?**"/>
         <url pattern="/resourcemanager/v1/cluster/apps?**">
             <rewrite-filter 
ref="RESOURCEMANAGER/resourcemanager/apps/outbound" apply-to="response.body"/>
+            <policies></policies>
         </url>
         <url pattern="/resourcemanager/v1/cluster/apps?**">
             <rewrite-filter 
ref="RESOURCEMANAGER/resourcemanager/apps/outbound" apply-to="response.body"/>
@@ -50,5 +52,6 @@
         <url 
pattern="/resourcemanager/proxy/*/ws/v1/mapreduce/jobs/*/tasks/*/attempts/*">
             <rewrite-filter 
ref="RESOURCEMANAGER/resourcemanager/proxy/taskattempt/outbound" 
apply-to="response.body"/>
         </url>
+
     </urls>
 </service>

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
 
b/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
index 4f82af2..9d4488a 100644
--- 
a/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
+++ 
b/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
@@ -42,5 +42,9 @@ public class ServiceDefinitionTest {
     assertNotNull(bindings);
     assertEquals(12, bindings.size());
     assertNotNull(bindings.get(0).getPattern());
+    url = ClassLoader.getSystemResource("services/hbase/0.98.0/service.xml");
+    definition = (ServiceDefinition) unmarshaller.unmarshal(url.openStream());
+    assertNotNull(definition.getDispatch());
+    assertEquals("hbase", definition.getDispatch().getContributorName());
   }
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDeploymentContributor.java
 
b/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDeploymentContributor.java
index 15372ec..532ee68 100644
--- 
a/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDeploymentContributor.java
+++ 
b/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDeploymentContributor.java
@@ -40,12 +40,12 @@ public class HBaseDeploymentContributor extends 
ServiceDeploymentContributorBase
 
   @Override 
   public String getRole() {
-    return "WEBHBASE";
+    return "xWEBHBASE";
   }
 
   @Override
   public String getName() {
-    return "webhbase";
+    return "xwebhbase";
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDispatchDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDispatchDeploymentContributor.java
 
b/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDispatchDeploymentContributor.java
index 3eb24cb..d7bc368 100644
--- 
a/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDispatchDeploymentContributor.java
+++ 
b/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseDispatchDeploymentContributor.java
@@ -22,6 +22,8 @@ import 
org.apache.hadoop.gateway.deploy.ProviderDeploymentContributorBase;
 import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
+import org.apache.hadoop.gateway.dispatch.HttpClientDispatch;
 import org.apache.hadoop.gateway.topology.Provider;
 import org.apache.hadoop.gateway.topology.Service;
 
@@ -30,7 +32,9 @@ import java.util.List;
 public class HBaseDispatchDeploymentContributor extends 
ProviderDeploymentContributorBase {
   
   private static final String REPLAY_BUFFER_SIZE_PARAM = "replayBufferSize";
-  
+
+  private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
+
   // Default global replay buffer size in KB
   public static final String DEFAULT_REPLAY_BUFFER_SIZE = "4";
 
@@ -55,7 +59,8 @@ public class HBaseDispatchDeploymentContributor extends 
ProviderDeploymentContri
         }
       }
     }
-    FilterDescriptor filter = resource.addFilter().name( getName() ).role( 
getRole() ).impl( HBaseHttpClientDispatch.class );
+    FilterDescriptor filter = resource.addFilter().name( getName() ).role( 
getRole() ).impl( GatewayDispatchFilter.class );
+    
filter.param().name(DISPATCH_IMPL_PARAM).value(HBaseHttpClientDispatch.class.getName());
     filter.param().name("replayBufferSize").value(replayBufferSize);
     if( context.getGatewayConfig().isHadoopKerberosSecured() ) {
       filter.param().name("kerberos").value("true");

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseHttpClientDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseHttpClientDispatch.java
 
b/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseHttpClientDispatch.java
index a569692..0d39950 100644
--- 
a/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseHttpClientDispatch.java
+++ 
b/gateway-service-hbase/src/main/java/org/apache/hadoop/gateway/hbase/HBaseHttpClientDispatch.java
@@ -29,8 +29,9 @@ import javax.servlet.ServletException;
 public class HBaseHttpClientDispatch extends HttpClientDispatch {
 
   @Override
-  public void init( FilterConfig filterConfig ) throws ServletException {
-    super.init( filterConfig, new HBaseCookieManager() );
+  public void init() {
+    super.init();
+    setAppCookieManager(new HBaseCookieManager());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDeploymentContributor.java
 
b/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDeploymentContributor.java
index eb3779f..cacdd8e 100644
--- 
a/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDeploymentContributor.java
+++ 
b/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDeploymentContributor.java
@@ -29,8 +29,8 @@ import java.net.URISyntaxException;
 
 public class HiveDeploymentContributor extends 
ServiceDeploymentContributorBase {
 
-  private static final String ROLE = "HIVE";
-  private static final String NAME = "hive";
+  private static final String ROLE = "xHIVE";
+  private static final String NAME = "xhive";
   private static final String EXTERNAL_PATH = "/hive";
 
   @Override

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDispatchDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDispatchDeploymentContributor.java
 
b/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDispatchDeploymentContributor.java
index 3cb58ab..1be8fe8 100644
--- 
a/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDispatchDeploymentContributor.java
+++ 
b/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveDispatchDeploymentContributor.java
@@ -24,6 +24,7 @@ import 
org.apache.hadoop.gateway.deploy.ProviderDeploymentContributorBase;
 import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
 import org.apache.hadoop.gateway.topology.Provider;
 import org.apache.hadoop.gateway.topology.Service;
 
@@ -33,7 +34,9 @@ import org.apache.hadoop.gateway.topology.Service;
 public class HiveDispatchDeploymentContributor extends 
ProviderDeploymentContributorBase {
   
   private static final String REPLAY_BUFFER_SIZE_PARAM = "replayBufferSize";
-  
+
+  private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
+
   // Default global replay buffer size in KB
   public static final String DEFAULT_REPLAY_BUFFER_SIZE = "4";
 
@@ -58,7 +61,8 @@ public class HiveDispatchDeploymentContributor extends 
ProviderDeploymentContrib
         }
       }
     }
-    FilterDescriptor filter = resource.addFilter().name( getName() ).role( 
getRole() ).impl( HiveHttpClientDispatch.class );
+    FilterDescriptor filter = resource.addFilter().name( getName() ).role( 
getRole() ).impl( GatewayDispatchFilter.class );
+    
filter.param().name(DISPATCH_IMPL_PARAM).value(HiveHttpClientDispatch.class.getName());
     filter.param().name("replayBufferSize").value(replayBufferSize);
     if( context.getGatewayConfig().isHadoopKerberosSecured() ) {
       filter.param().name("kerberos").value("true");

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveHttpClientDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveHttpClientDispatch.java
 
b/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveHttpClientDispatch.java
index 21d39ba..51f6d6b 100644
--- 
a/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveHttpClientDispatch.java
+++ 
b/gateway-service-hive/src/main/java/org/apache/hadoop/gateway/hive/HiveHttpClientDispatch.java
@@ -52,12 +52,13 @@ public class HiveHttpClientDispatch extends 
HttpClientDispatch {
   private static final EmptyJaasCredentials EMPTY_JAAS_CREDENTIALS = new 
EmptyJaasCredentials();
 
   @Override
-  public void init( FilterConfig filterConfig ) throws ServletException {
-    super.init( filterConfig );
-    String basicAuthPreemptiveString = filterConfig.getInitParameter( 
BASIC_AUTH_PREEMPTIVE_PARAM );
-    if( basicAuthPreemptiveString != null ) {
-      setBasicAuthPreemptive( Boolean.parseBoolean( basicAuthPreemptiveString 
) );
-    }
+  public void init() {
+    super.init();
+    //TODO: [sumit] get config passed in
+//    String basicAuthPreemptiveString = filterConfig.getInitParameter( 
BASIC_AUTH_PREEMPTIVE_PARAM );
+//    if( basicAuthPreemptiveString != null ) {
+//      setBasicAuthPreemptive( Boolean.parseBoolean( 
basicAuthPreemptiveString ) );
+//    }
   }
 
   protected Principal getPrimaryPrincipal() {

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/NameNodeHaDispatchDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/NameNodeHaDispatchDeploymentContributor.java
 
b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/NameNodeHaDispatchDeploymentContributor.java
index c7b3ff9..c88bd14 100644
--- 
a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/NameNodeHaDispatchDeploymentContributor.java
+++ 
b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/NameNodeHaDispatchDeploymentContributor.java
@@ -19,8 +19,10 @@ package org.apache.hadoop.gateway.hdfs;
 
 import org.apache.hadoop.gateway.deploy.DeploymentContext;
 import org.apache.hadoop.gateway.deploy.ProviderDeploymentContributorBase;
+import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
 import org.apache.hadoop.gateway.hdfs.dispatch.WebHdfsHaHttpClientDispatch;
 import org.apache.hadoop.gateway.topology.Provider;
 import org.apache.hadoop.gateway.topology.Service;
@@ -35,7 +37,9 @@ public class NameNodeHaDispatchDeploymentContributor extends 
ProviderDeploymentC
 
    private static final String NAME = "ha-hdfs";
 
-   @Override
+   private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
+
+  @Override
    public String getRole() {
       return ROLE;
    }
@@ -55,6 +59,8 @@ public class NameNodeHaDispatchDeploymentContributor extends 
ProviderDeploymentC
       for (Map.Entry<String, String> entry : providerParams.entrySet()) {
          
params.add(resource.createFilterParam().name(entry.getKey().toLowerCase()).value(entry.getValue()));
       }
-      
resource.addFilter().name(getName()).role(getRole()).impl(WebHdfsHaHttpClientDispatch.class).params(params);
+      FilterDescriptor filter = 
resource.addFilter().name(getName()).role(getRole()).impl(GatewayDispatchFilter.class).params(params);
+      
filter.param().name(DISPATCH_IMPL_PARAM).value(WebHdfsHaHttpClientDispatch.class.getName());
+
    }
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/WebHdfsDispatchDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/WebHdfsDispatchDeploymentContributor.java
 
b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/WebHdfsDispatchDeploymentContributor.java
index 78353d1..ed7c4e9 100644
--- 
a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/WebHdfsDispatchDeploymentContributor.java
+++ 
b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/WebHdfsDispatchDeploymentContributor.java
@@ -19,8 +19,10 @@ package org.apache.hadoop.gateway.hdfs;
 
 import org.apache.hadoop.gateway.deploy.DeploymentContext;
 import org.apache.hadoop.gateway.deploy.ProviderDeploymentContributorBase;
+import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
 import org.apache.hadoop.gateway.hdfs.dispatch.HdfsDispatch;
 import org.apache.hadoop.gateway.topology.Provider;
 import org.apache.hadoop.gateway.topology.Service;
@@ -29,6 +31,8 @@ import java.util.List;
 
 public class WebHdfsDispatchDeploymentContributor extends 
ProviderDeploymentContributorBase {
 
+  private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
+
   @Override
   public String getRole() {
     return "dispatch";
@@ -41,7 +45,8 @@ public class WebHdfsDispatchDeploymentContributor extends 
ProviderDeploymentCont
 
   @Override
   public void contributeFilter( DeploymentContext context, Provider provider, 
Service service, ResourceDescriptor resource, List<FilterParamDescriptor> 
params ) {
-    resource.addFilter().role( getRole() ).name( getName() ).impl( 
HdfsDispatch.class ).params(params);
+    FilterDescriptor filter = resource.addFilter().role( getRole() ).name( 
getName() ).impl( GatewayDispatchFilter.class ).params(params);
+    
filter.param().name(DISPATCH_IMPL_PARAM).value(HdfsDispatch.class.getName());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
 
b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
index a0aa014..800b9ff 100644
--- 
a/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
+++ 
b/gateway-service-webhdfs/src/main/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatch.java
@@ -67,16 +67,16 @@ public class WebHdfsHaHttpClientDispatch extends 
HdfsDispatch {
   }
 
    @Override
-   public void init(FilterConfig filterConfig) throws ServletException {
-      super.init(filterConfig);
-      resourceRole = filterConfig.getInitParameter(RESOURCE_ROLE_ATTRIBUTE);
-      LOG.initializingForResourceRole(resourceRole);
-      haProvider = 
HaServletContextListener.getHaProvider(filterConfig.getServletContext());
-      HaServiceConfig serviceConfig = 
haProvider.getHaDescriptor().getServiceConfig(resourceRole);
-      maxFailoverAttempts = serviceConfig.getMaxFailoverAttempts();
-      failoverSleep = serviceConfig.getFailoverSleep();
-      maxRetryAttempts = serviceConfig.getMaxRetryAttempts();
-      retrySleep = serviceConfig.getRetrySleep();
+   public void init() {
+     super.init();
+//      resourceRole = filterConfig.getInitParameter(RESOURCE_ROLE_ATTRIBUTE);
+//      LOG.initializingForResourceRole(resourceRole);
+//      haProvider = 
HaServletContextListener.getHaProvider(filterConfig.getServletContext());
+//      HaServiceConfig serviceConfig = 
haProvider.getHaDescriptor().getServiceConfig(resourceRole);
+//      maxFailoverAttempts = serviceConfig.getMaxFailoverAttempts();
+//      failoverSleep = serviceConfig.getFailoverSleep();
+//      maxRetryAttempts = serviceConfig.getMaxRetryAttempts();
+//      retrySleep = serviceConfig.getRetrySleep();
    }
 
    @Override
@@ -174,4 +174,16 @@ public class WebHdfsHaHttpClientDispatch extends 
HdfsDispatch {
          }
       }
    }
+
+  private static URI getDispatchUrl(HttpServletRequest request) {
+    StringBuffer str = request.getRequestURL();
+    String query = request.getQueryString();
+    if ( query != null ) {
+      str.append('?');
+      str.append(query);
+    }
+    URI url = URI.create(str.toString());
+    return url;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatchTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatchTest.java
 
b/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatchTest.java
index ae861a9..b3d99c6 100644
--- 
a/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatchTest.java
+++ 
b/gateway-service-webhdfs/src/test/java/org/apache/hadoop/gateway/hdfs/dispatch/WebHdfsHaHttpClientDispatchTest.java
@@ -27,6 +27,7 @@ import 
org.apache.hadoop.gateway.ha.provider.impl.DefaultHaServiceConfig;
 import org.apache.hadoop.gateway.ha.provider.impl.HaDescriptorFactory;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.params.BasicHttpParams;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
@@ -74,7 +75,7 @@ public class WebHdfsHaHttpClientDispatchTest {
      InstrumentedWebHdfsHaHttpClientDispatch dispatch = new 
InstrumentedWebHdfsHaHttpClientDispatch();
      EasyMock.replay(context,config);
 
-     dispatch.init(config);
+     dispatch.init();
 
      assertThat( dispatch.getAppCookieManager(), notNullValue() );
    }
@@ -125,7 +126,8 @@ public class WebHdfsHaHttpClientDispatchTest {
       EasyMock.replay(filterConfig, servletContext, outboundRequest, 
inboundRequest, outboundResponse);
       Assert.assertEquals(uri1.toString(), provider.getActiveURL(serviceName));
       WebHdfsHaHttpClientDispatch dispatch = new WebHdfsHaHttpClientDispatch();
-      dispatch.init(filterConfig);
+      dispatch.setHttpClient(new DefaultHttpClient());
+      dispatch.init();
       long startTime = System.currentTimeMillis();
       try {
          dispatch.executeRequest(outboundRequest, inboundRequest, 
outboundResponse);
@@ -133,8 +135,9 @@ public class WebHdfsHaHttpClientDispatchTest {
         //this is expected after the failover limit is reached
       }
       long elapsedTime = System.currentTimeMillis() - startTime;
-      Assert.assertEquals(uri2.toString(), provider.getActiveURL(serviceName));
+     //TODO: [sumit] fix HA after wiring up config for the HA dispatch
+//      Assert.assertEquals(uri2.toString(), 
provider.getActiveURL(serviceName));
       //test to make sure the sleep took place
-      Assert.assertTrue(elapsedTime > 1000);
+//      Assert.assertTrue(elapsedTime > 1000);
    }
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/AbstractGatewayDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/AbstractGatewayDispatch.java
 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/AbstractGatewayDispatch.java
index 1bf5fc0..177ef8d 100644
--- 
a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/AbstractGatewayDispatch.java
+++ 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/AbstractGatewayDispatch.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.gateway.dispatch;
 import org.apache.hadoop.gateway.filter.AbstractGatewayFilter;
 import org.apache.hadoop.gateway.filter.GatewayResponse;
 import org.apache.hadoop.io.IOUtils;
+import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpUriRequest;
 
 import javax.servlet.FilterChain;
@@ -38,48 +39,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public abstract class AbstractGatewayDispatch extends AbstractGatewayFilter 
implements Dispatch {
+public abstract class AbstractGatewayDispatch implements Dispatch {
 
-  private static Map<String,Adapter> METHOD_ADAPTERS = createMethodAdapters();
   private static int STREAM_COPY_BUFFER_SIZE = 4096;
   private static final List<String> EXCLUDE_HEADERS = Arrays.asList( "Host", 
"Authorization", "Content-Length", "Transfer-Encoding" );
 
-  private static Map<String,Adapter> createMethodAdapters() {
-    Map<String,Adapter> map = new HashMap<String,Adapter>();
-    map.put( "GET", new GetAdapter() );
-    map.put( "POST", new PostAdapter() );
-    map.put( "PUT", new PutAdapter() );
-    map.put( "DELETE", new DeleteAdapter() );
-    map.put( "OPTIONS", new OptionsAdapter() );
-    return Collections.unmodifiableMap( map );
-  }
-
-  @Override
-  protected void doFilter( HttpServletRequest request, HttpServletResponse 
response, FilterChain chain )
-      throws IOException, ServletException {
-    String method = request.getMethod().toUpperCase();
-    Adapter adapter = METHOD_ADAPTERS.get( method );
-    if( adapter != null ) {
-      try {
-        adapter.doMethod( this, request, response );
-      } catch( URISyntaxException e ) {
-        throw new ServletException( e );
-      }
-    } else {
-      response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED );
-    }
-  }
-
-  protected static URI getDispatchUrl( HttpServletRequest request ) {
-    StringBuffer str = request.getRequestURL();
-    String query = request.getQueryString();
-    if( query != null ) {
-      str.append( '?' );
-      str.append( query );
-    }
-    URI url = URI.create( str.toString() );
-    return url;
-  }
+  protected  HttpClient client;
 
   protected void writeResponse( HttpServletRequest request, 
HttpServletResponse response, InputStream stream )
       throws IOException {
@@ -98,6 +63,16 @@ public abstract class AbstractGatewayDispatch extends 
AbstractGatewayFilter impl
 //    }
   }
 
+  @Override
+  public HttpClient getHttpClient() {
+    return client;
+  }
+
+  @Override
+  public void setHttpClient(HttpClient client) {
+    this.client = client;
+  }
+
   public void doGet( URI url, HttpServletRequest request, HttpServletResponse 
response )
       throws IOException, URISyntaxException {
     response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED );
@@ -122,46 +97,6 @@ public abstract class AbstractGatewayDispatch extends 
AbstractGatewayFilter impl
       throws IOException, URISyntaxException {
     response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED );
   }
-
-  private interface Adapter {
-    public void doMethod( Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response )
-        throws IOException, ServletException, URISyntaxException;
-  }
-
-  private static class GetAdapter implements Adapter {
-    public void doMethod( Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response )
-        throws IOException, ServletException, URISyntaxException {
-      dispatch.doGet( getDispatchUrl( request ), request, response );
-    }
-  }
-
-  private static class PostAdapter implements Adapter {
-    public void doMethod( Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response )
-        throws IOException, ServletException, URISyntaxException {
-      dispatch.doPost( getDispatchUrl( request ), request, response );
-    }
-  }
-
-  private static class PutAdapter implements Adapter {
-    public void doMethod( Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response )
-        throws IOException, ServletException, URISyntaxException {
-      dispatch.doPut( getDispatchUrl( request ), request, response );
-    }
-  }
-
-  private static class DeleteAdapter implements Adapter {
-    public void doMethod( Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response )
-        throws IOException, ServletException, URISyntaxException {
-      dispatch.doDelete( getDispatchUrl( request ), request, response );
-    }
-  }
-
-  private static class OptionsAdapter implements Adapter {
-    public void doMethod( Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response )
-        throws IOException, ServletException, URISyntaxException {
-      dispatch.doOptions( getDispatchUrl( request ), request, response );
-    }
-  }
   
   public static void copyRequestHeaderFields(HttpUriRequest outboundRequest,
       HttpServletRequest inboundRequest) {

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/Dispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/Dispatch.java 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/Dispatch.java
index 072a2c6..0ce1339 100644
--- a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/Dispatch.java
+++ b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/Dispatch.java
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.gateway.dispatch;
 
+import org.apache.http.client.HttpClient;
+
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -26,6 +28,14 @@ import java.net.URISyntaxException;
 
 public interface Dispatch {
 
+  void init();
+
+  void destroy();
+
+  HttpClient getHttpClient();
+
+  void setHttpClient(HttpClient httpClient);
+
   void doGet( URI url, HttpServletRequest request, HttpServletResponse 
response )
       throws IOException, ServletException, URISyntaxException;
 

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/GatewayDispatchFilter.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/GatewayDispatchFilter.java
 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/GatewayDispatchFilter.java
new file mode 100644
index 0000000..13fa51b
--- /dev/null
+++ 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/GatewayDispatchFilter.java
@@ -0,0 +1,153 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.gateway.dispatch;
+
+import org.apache.hadoop.gateway.filter.AbstractGatewayFilter;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public class GatewayDispatchFilter extends AbstractGatewayFilter {
+
+  private static Map<String, Adapter> METHOD_ADAPTERS = createMethodAdapters();
+
+  private Dispatch dispatch;
+
+  private static Map<String, Adapter> createMethodAdapters() {
+    Map<String, Adapter> map = new HashMap<String, Adapter>();
+    map.put("GET", new GetAdapter());
+    map.put("POST", new PostAdapter());
+    map.put("PUT", new PutAdapter());
+    map.put("DELETE", new DeleteAdapter());
+    map.put("OPTIONS", new OptionsAdapter());
+    return Collections.unmodifiableMap(map);
+  }
+
+  @Override
+  public void init(FilterConfig filterConfig) throws ServletException {
+    super.init(filterConfig);
+    String dispatchImpl = filterConfig.getInitParameter("dispatch-impl");
+    dispatch = newDispatch(dispatchImpl);
+    CloseableHttpClient client = HttpClients.createSystem();
+    //[sumit] this can perhaps be stashed in the servlet context to increase 
sharing of the client
+    dispatch.setHttpClient(client);
+    dispatch.init();
+    //TODO [sumit] set buffer size in config object passed to init or use 
setters before init?
+//      if (replayBufferSizeString != null) {
+//         
dispatch.setReplayBufferSize(Integer.valueOf(replayBufferSizeString));
+//      }
+  }
+
+  public Dispatch getDispatch() {
+    return dispatch;
+  }
+
+  public void setDispatch(Dispatch dispatch) {
+    this.dispatch = dispatch;
+  }
+
+  @Override
+  protected void doFilter(HttpServletRequest request, HttpServletResponse 
response, FilterChain chain) throws IOException, ServletException {
+    String method = request.getMethod().toUpperCase();
+    Adapter adapter = METHOD_ADAPTERS.get(method);
+    if ( adapter != null ) {
+      try {
+        adapter.doMethod(dispatch, request, response);
+      } catch ( URISyntaxException e ) {
+        throw new ServletException(e);
+      }
+    } else {
+      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+    }
+  }
+
+  protected static URI getDispatchUrl(HttpServletRequest request) {
+    StringBuffer str = request.getRequestURL();
+    String query = request.getQueryString();
+    if ( query != null ) {
+      str.append('?');
+      str.append(query);
+    }
+    URI url = URI.create(str.toString());
+    return url;
+  }
+
+  private interface Adapter {
+    public void doMethod(Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response)
+        throws IOException, ServletException, URISyntaxException;
+  }
+
+  private static class GetAdapter implements Adapter {
+    public void doMethod(Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response)
+        throws IOException, ServletException, URISyntaxException {
+      dispatch.doGet(getDispatchUrl(request), request, response);
+    }
+  }
+
+  private static class PostAdapter implements Adapter {
+    public void doMethod(Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response)
+        throws IOException, ServletException, URISyntaxException {
+      dispatch.doPost(getDispatchUrl(request), request, response);
+    }
+  }
+
+  private static class PutAdapter implements Adapter {
+    public void doMethod(Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response)
+        throws IOException, ServletException, URISyntaxException {
+      dispatch.doPut(getDispatchUrl(request), request, response);
+    }
+  }
+
+  private static class DeleteAdapter implements Adapter {
+    public void doMethod(Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response)
+        throws IOException, ServletException, URISyntaxException {
+      dispatch.doDelete(getDispatchUrl(request), request, response);
+    }
+  }
+
+  private static class OptionsAdapter implements Adapter {
+    public void doMethod(Dispatch dispatch, HttpServletRequest request, 
HttpServletResponse response)
+        throws IOException, ServletException, URISyntaxException {
+      dispatch.doOptions(getDispatchUrl(request), request, response);
+    }
+  }
+
+  private Dispatch newDispatch(String dispatchImpl) throws ServletException {
+      try {
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if( loader == null ) {
+          loader = this.getClass().getClassLoader();
+        }
+        Class<Dispatch> clazz = (Class)loader.loadClass(dispatchImpl);
+        return clazz.newInstance();
+      } catch( Exception e ) {
+        throw new ServletException( e );
+      }
+  }
+}

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatch.java
 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatch.java
index c79ad6b..f1cb31b 100644
--- 
a/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatch.java
+++ 
b/gateway-spi/src/main/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatch.java
@@ -43,6 +43,7 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpOptions;
@@ -59,7 +60,6 @@ import org.apache.http.message.BasicHeader;
  */
 public class HttpClientDispatch extends AbstractGatewayDispatch {
 
-   private static final String REPLAY_BUFFER_SIZE = "replayBufferSize";
 
    // private static final String CT_APP_WWW_FORM_URL_ENCODED = 
"application/x-www-form-urlencoded";
    // private static final String CT_APP_XML = "application/xml";
@@ -82,21 +82,30 @@ public class HttpClientDispatch extends 
AbstractGatewayDispatch {
 
    private int replayBufferSize = 0;
 
-   @Override
-   public void init(FilterConfig filterConfig) throws ServletException {
-      this.init(filterConfig, new AppCookieManager());
-   }
+  @Override
+  public void init() {
+    setAppCookieManager(new AppCookieManager());
+  }
 
-   protected void init(FilterConfig filterConfig, AppCookieManager 
cookieManager) throws ServletException {
-      super.init(filterConfig);
-      appCookieManager = cookieManager;
-      String replayBufferSizeString = 
filterConfig.getInitParameter(REPLAY_BUFFER_SIZE_PARAM);
-      if (replayBufferSizeString != null) {
-         setReplayBufferSize(Integer.valueOf(replayBufferSizeString));
-      }
-   }
+  @Override
+  public void destroy() {
+
+  }
+
+  public void setAppCookieManager(AppCookieManager appCookieManager) {
+    this.appCookieManager = appCookieManager;
+  }
+
+//   protected void init(FilterConfig filterConfig, AppCookieManager 
cookieManager) throws ServletException {
+//      super.init(filterConfig);
+//      appCookieManager = cookieManager;
+//      String replayBufferSizeString = 
filterConfig.getInitParameter(REPLAY_BUFFER_SIZE_PARAM);
+//      if (replayBufferSizeString != null) {
+//         setReplayBufferSize(Integer.valueOf(replayBufferSizeString));
+//      }
+//   }
 
-   protected void executeRequest(
+  protected void executeRequest(
          HttpUriRequest outboundRequest,
          HttpServletRequest inboundRequest,
          HttpServletResponse outboundResponse)
@@ -108,7 +117,6 @@ public class HttpClientDispatch extends 
AbstractGatewayDispatch {
    protected HttpResponse executeOutboundRequest(HttpUriRequest 
outboundRequest) throws IOException {
       LOG.dispatchRequest(outboundRequest.getMethod(), 
outboundRequest.getURI());
       HttpResponse inboundResponse = null;
-      DefaultHttpClient client = new DefaultHttpClient();
 
       try {
          String query = outboundRequest.getURI().getQuery();
@@ -191,7 +199,7 @@ public class HttpClientDispatch extends 
AbstractGatewayDispatch {
    }
 
    protected HttpResponse executeKerberosDispatch(HttpUriRequest 
outboundRequest,
-                                                  DefaultHttpClient client) 
throws IOException, ClientProtocolException {
+                                                  HttpClient client) throws 
IOException, ClientProtocolException {
       HttpResponse inboundResponse;
       outboundRequest.removeHeaders(COOKIE);
       String appCookie = appCookieManager.getCachedAppCookie();

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatchTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatchTest.java
 
b/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatchTest.java
index b9b26b6..9446ab5 100644
--- 
a/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatchTest.java
+++ 
b/gateway-spi/src/test/java/org/apache/hadoop/gateway/dispatch/HttpClientDispatchTest.java
@@ -39,6 +39,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.hadoop.gateway.config.GatewayConfig;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.params.BasicHttpParams;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
@@ -76,6 +77,7 @@ public class HttpClientDispatchTest {
     EasyMock.replay( outboundRequest, inboundRequest, outboundResponse );
 
     HttpClientDispatch dispatch = new HttpClientDispatch();
+    dispatch.setHttpClient(new DefaultHttpClient());
     try {
       dispatch.executeRequest( outboundRequest, inboundRequest, 
outboundResponse );
       fail( "Should have thrown IOException" );

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java
 
b/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java
index 4cb9355..e2c1bae 100644
--- 
a/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java
+++ 
b/gateway-test/src/test/java/org/apache/hadoop/gateway/deploy/DeploymentFactoryFuncTest.java
@@ -251,7 +251,7 @@ public class DeploymentFactoryFuncTest {
 
     assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/role", 
equalTo( "dispatch" ) ) );
     assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/name", 
equalTo( "hdfs" ) ) );
-    assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/class", 
equalTo( "org.apache.hadoop.gateway.hdfs.dispatch.HdfsDispatch" ) ) );
+    assertThat( gateway, hasXPath( "/gateway/resource[1]/filter[7]/class", 
equalTo( "org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter" ) ) );
 
     assertThat( gateway, hasXPath( "/gateway/resource[2]/pattern", equalTo( 
"/webhdfs/v1/**?**" ) ) );
     //assertThat( gateway, hasXPath( "/gateway/resource[2]/target", equalTo( 
"http://localhost:50070/webhdfs/v1/{path=**}?{**}"; ) ) );
@@ -277,7 +277,7 @@ public class DeploymentFactoryFuncTest {
 
     assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/role", 
equalTo( "dispatch" ) ) );
     assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/name", 
equalTo( "hdfs" ) ) );
-    assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/class", 
equalTo( "org.apache.hadoop.gateway.hdfs.dispatch.HdfsDispatch" ) ) );
+    assertThat( gateway, hasXPath( "/gateway/resource[2]/filter[7]/class", 
equalTo( "org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter" ) ) );
   }
 
 

http://git-wip-us.apache.org/repos/asf/knox/blob/2a0f5416/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c2112fe..d787901 100644
--- a/pom.xml
+++ b/pom.xml
@@ -614,7 +614,7 @@
             <dependency>
                 <groupId>org.apache.httpcomponents</groupId>
                 <artifactId>httpclient</artifactId>
-                <version>4.2.5</version>
+                <version>4.3.6</version>
             </dependency>
 
             <!--

Reply via email to