KNOX-1441 - Enable spotbugs for static build checking

Signed-off-by: Kevin Risden <[email protected]>


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

Branch: refs/heads/master
Commit: 5bf7bc5d01d57481a53c04f6db05e26f42a0e9ca
Parents: 16e1b62
Author: Kevin Risden <[email protected]>
Authored: Fri Sep 21 09:25:41 2018 -0400
Committer: Kevin Risden <[email protected]>
Committed: Mon Sep 24 19:26:40 2018 -0400

----------------------------------------------------------------------
 .travis.yml                                     |  52 ++++++++
 .../ambari/AmbariDynamicServiceURLCreator.java  |   4 +-
 .../topology/discovery/ambari/RESTInvoker.java  |  19 +--
 .../ambari/SparkHistoryUIServiceURLCreator.java |   3 +-
 .../deploy/HaProviderDeploymentContributor.java |  10 +-
 .../DefaultIdentityAssertionFilterTest.java     |  34 ++---
 .../encrypturi/impl/DecryptUriProcessor.java    |  11 +-
 .../apache/knox/gateway/GatewayCommandLine.java |   9 +-
 .../org/apache/knox/gateway/GatewayServer.java  |  16 ++-
 .../org/apache/knox/gateway/GatewayServlet.java |  35 ++---
 .../impl/ApplicationDeploymentContributor.java  |  33 ++---
 .../filter/BasicAuthChallengeFilter.java        |   3 +-
 .../security/impl/RemoteAliasService.java       |   7 +-
 .../DefaultRemoteConfigurationMonitor.java      |   6 +-
 .../simple/ProviderConfigurationParser.java     |   4 +-
 .../simple/SimpleDescriptorHandler.java         |  33 +++--
 .../apache/knox/gateway/trace/ErrorHandler.java |  42 ------
 .../knox/gateway/trace/KnoxErrorHandler.java    |  43 ++++++
 .../org/apache/knox/gateway/util/KnoxCLI.java   |  65 ++++-----
 .../gateway/util/ServiceDefinitionsLoader.java  |   5 +-
 .../gateway/rm/dispatch/RMHaBaseDispatcher.java |  13 +-
 .../service/test/ServiceTestResource.java       |  43 +++---
 .../hdfs/dispatch/AbstractHdfsHaDispatch.java   |  20 +--
 .../org/apache/knox/gateway/shell/KnoxSh.java   |  14 +-
 .../knox/gateway/dispatch/DefaultDispatch.java  |  24 ++--
 .../services/hostmap/FileBasedHostMapper.java   |   3 +-
 .../security/impl/BaseKeystoreService.java      |   3 +-
 .../security/impl/CMFMasterService.java         |   5 +-
 .../main/java/org/apache/knox/test/Console.java |   7 +-
 .../java/org/apache/knox/test/TestUtils.java    |  27 ++--
 .../gateway/audit/log4j/audit/Log4jAuditor.java |   2 +-
 .../impl/DefaultConfigurationInjector.java      |   8 +-
 pom.xml                                         | 133 ++++++++++++-------
 src/spotbugs-filter.xml                         |  69 ++++++++++
 34 files changed, 494 insertions(+), 311 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..3c18224
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,52 @@
+# Configuration file for Travis continuous integration.
+# See https://travis-ci.org/apache/knox
+#
+# 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.
+#
+language: java
+matrix:
+  fast_finish: true
+  include:
+    - env: IMAGE=maven:3-jdk-8
+    - env: IMAGE=maven:3-jdk-9
+    - env: IMAGE=maven:3-jdk-10
+    - env: IMAGE=maven:3-jdk-11
+  allow_failures:
+    - env: IMAGE=maven:3-jdk-9
+    - env: IMAGE=maven:3-jdk-10
+    - env: IMAGE=maven:3-jdk-11
+    
+env:
+  global:
+  - DOCKERRUN="docker run -it --rm -v $PWD:/src -v $HOME/.m2:/root/.m2 -w /src"
+services:
+  - docker
+before_install:
+  - docker pull $IMAGE
+install:
+  # Print the Maven version, skip tests and javadoc
+  - $DOCKERRUN $IMAGE mvn install -DskipTests=true -Dmaven.javadoc.skip=true 
-Djavax.net.ssl.trustStorePassword=changeit -B -V
+script:
+  # Print surefire output to the console instead of files
+  - unset _JAVA_OPTIONS
+  - $DOCKERRUN $IMAGE mvn -Dsurefire.useFile=false -Dsurefire.parallel= 
-Djavax.net.ssl.trustStorePassword=changeit verify
+git:
+  depth: 1000
+sudo: required
+cache:
+  directories:
+    - $HOME/.m2
+# End .travis.yml

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
index 5f1e8a4..ed53f91 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
@@ -23,13 +23,13 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-
 class AmbariDynamicServiceURLCreator implements ServiceURLCreator {
 
     static final String MAPPING_CONFIG_OVERRIDE_FILE = 
"ambari-discovery-url-mappings.xml";
@@ -56,7 +56,7 @@ class AmbariDynamicServiceURLCreator implements 
ServiceURLCreator {
 
     AmbariDynamicServiceURLCreator(AmbariCluster cluster, String mappings) {
         this.cluster = cluster;
-        config = new ServiceURLPropertyConfig(new 
ByteArrayInputStream(mappings.getBytes()));
+        config = new ServiceURLPropertyConfig(new 
ByteArrayInputStream(mappings.getBytes(StandardCharsets.UTF_8)));
     }
 
 

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/RESTInvoker.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/RESTInvoker.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/RESTInvoker.java
index b51bd1c..4df1c4d 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/RESTInvoker.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/RESTInvoker.java
@@ -18,23 +18,25 @@ package org.apache.knox.gateway.topology.discovery.ambari;
 
 import net.minidev.json.JSONObject;
 import net.minidev.json.JSONValue;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
 import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
 import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.util.EntityUtils;
 import org.apache.knox.gateway.config.ConfigurationException;
 import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.i18n.messages.MessagesFactory;
 import org.apache.knox.gateway.services.security.AliasService;
 import org.apache.knox.gateway.services.security.AliasServiceException;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.util.EntityUtils;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 
 class RESTInvoker {
 
@@ -130,8 +132,7 @@ class RESTInvoker {
             }
 
             // Add an auth header if credentials are available
-            String encodedCreds =
-                    
org.apache.commons.codec.binary.Base64.encodeBase64String((username + ":" + 
password).getBytes());
+            String encodedCreds = Base64.getEncoder().encodeToString((username 
+ ":" + password).getBytes(StandardCharsets.UTF_8));
             request.addHeader(new BasicHeader("Authorization", "Basic " + 
encodedCreds));
 
             // Ambari CSRF protection

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/SparkHistoryUIServiceURLCreator.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/SparkHistoryUIServiceURLCreator.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/SparkHistoryUIServiceURLCreator.java
index 09506c9..95c01e8 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/SparkHistoryUIServiceURLCreator.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/SparkHistoryUIServiceURLCreator.java
@@ -20,7 +20,6 @@ public class SparkHistoryUIServiceURLCreator extends 
SparkCommonServiceURLCreato
 
   private static final String RESOURCE_ROLE = "SPARKHISTORYUI";
 
-
   private static final String SSL_FLAG_PRIMARY   = 
"spark.ssl.historyServer.enabled";
   private static final String SSL_FLAG_SECONDARY = "spark.ssl.enabled";
 
@@ -49,7 +48,7 @@ public class SparkHistoryUIServiceURLCreator extends 
SparkCommonServiceURLCreato
     if (isSSL(comp)) {
       String sslPort = comp.getConfigProperty(SSL_PORT_PROPERTY);
       if (sslPort == null || sslPort.isEmpty()) {
-        int p = Integer.valueOf(comp.getConfigProperty(portConfigProperty)) + 
SSL_PORT_OFFSET;
+        int p = Integer.parseInt(comp.getConfigProperty(portConfigProperty)) + 
SSL_PORT_OFFSET;
         sslPort = String.valueOf(p);
       }
       port = sslPort;

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/deploy/HaProviderDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/deploy/HaProviderDeploymentContributor.java
 
b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/deploy/HaProviderDeploymentContributor.java
index 633179d..875f6c1 100644
--- 
a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/deploy/HaProviderDeploymentContributor.java
+++ 
b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/deploy/HaProviderDeploymentContributor.java
@@ -110,27 +110,27 @@ public class HaProviderDeploymentContributor extends 
ProviderDeploymentContribut
       if (serviceLevelParams != null && !serviceLevelParams.isEmpty()) {
          String enabled = serviceLevelParams.get(Service.HA_ENABLED_PARAM);
          if (enabled != null) {
-            config.setEnabled(Boolean.valueOf(enabled));
+            config.setEnabled(Boolean.parseBoolean(enabled));
          }
 
          String failOverSleep = 
serviceLevelParams.get(HaServiceConfigConstants.CONFIG_PARAM_FAILOVER_SLEEP);
          if (failOverSleep != null) {
-            config.setFailoverSleep(Integer.valueOf(failOverSleep));
+            config.setFailoverSleep(Integer.parseInt(failOverSleep));
          }
 
          String failOverAttempts = 
serviceLevelParams.get(HaServiceConfigConstants.CONFIG_PARAM_MAX_FAILOVER_ATTEMPTS);
          if (failOverAttempts != null) {
-            config.setMaxFailoverAttempts(Integer.valueOf(failOverAttempts));
+            config.setMaxFailoverAttempts(Integer.parseInt(failOverAttempts));
          }
 
          String retrySleep = 
serviceLevelParams.get(HaServiceConfigConstants.CONFIG_PARAM_RETRY_SLEEP);
          if (retrySleep != null) {
-            config.setRetrySleep(Integer.valueOf(retrySleep));
+            config.setRetrySleep(Integer.parseInt(retrySleep));
          }
 
          String retryAttempts = 
serviceLevelParams.get(HaServiceConfigConstants.CONFIG_PARAM_MAX_RETRY_ATTEMPTS);
          if (retryAttempts != null) {
-            config.setMaxRetryAttempts(Integer.valueOf(retryAttempts));
+            config.setMaxRetryAttempts(Integer.parseInt(retryAttempts));
          }
 
          String zkEnsemble = 
serviceLevelParams.get(HaServiceConfigConstants.CONFIG_PARAM_ZOOKEEPER_ENSEMBLE);

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/knox/gateway/identityasserter/filter/DefaultIdentityAssertionFilterTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/knox/gateway/identityasserter/filter/DefaultIdentityAssertionFilterTest.java
 
b/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/knox/gateway/identityasserter/filter/DefaultIdentityAssertionFilterTest.java
index adfc95d..95a5909 100644
--- 
a/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/knox/gateway/identityasserter/filter/DefaultIdentityAssertionFilterTest.java
+++ 
b/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/knox/gateway/identityasserter/filter/DefaultIdentityAssertionFilterTest.java
@@ -17,21 +17,21 @@
  */
 package org.apache.knox.gateway.identityasserter.filter;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.security.Principal;
+import org.apache.knox.gateway.security.GroupPrincipal;
+import org.apache.knox.gateway.security.PrimaryPrincipal;
+import org.easymock.EasyMock;
+import org.junit.Test;
 
 import javax.security.auth.Subject;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
+import java.security.Principal;
+import java.util.Arrays;
 
-import org.apache.knox.gateway.security.GroupPrincipal;
-import org.apache.knox.gateway.security.PrimaryPrincipal;
-import org.easymock.EasyMock;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 /**
  *
@@ -71,9 +71,9 @@ public class DefaultIdentityAssertionFilterTest {
     username = filter.mapUserPrincipal(((Principal) 
subject.getPrincipals(PrimaryPrincipal.class).toArray()[0]).getName());
     String[] mappedGroups = filter.mapGroupPrincipals(((Principal) 
subject.getPrincipals(PrimaryPrincipal.class).toArray()[0]).getName(), subject);
     assertEquals("hdfs", username);
-    assertTrue("mrgroup not found in groups: " + mappedGroups, 
groupFoundIn("mrgroup", mappedGroups));
-    assertTrue("mrducks not found in groups: " + mappedGroups, 
groupFoundIn("mrducks", mappedGroups));
-    assertFalse("group1 WAS found in groups: " + mappedGroups, 
groupFoundIn("group1", mappedGroups));
+    assertTrue("mrgroup not found in groups: " + 
Arrays.toString(mappedGroups), groupFoundIn("mrgroup", mappedGroups));
+    assertTrue("mrducks not found in groups: " + 
Arrays.toString(mappedGroups), groupFoundIn("mrducks", mappedGroups));
+    assertFalse("group1 WAS found in groups: " + 
Arrays.toString(mappedGroups), groupFoundIn("group1", mappedGroups));
 
     subject = new Subject();
     
@@ -91,7 +91,7 @@ public class DefaultIdentityAssertionFilterTest {
     username = filter.mapUserPrincipal(((Principal) 
subject.getPrincipals(PrimaryPrincipal.class).toArray()[0]).getName());
     mappedGroups = filter.mapGroupPrincipals(((Principal) 
subject.getPrincipals(PrimaryPrincipal.class).toArray()[0]).getName(), subject);
     assertEquals("hdfs", username);
-    assertTrue("group1 not found in groups: " + mappedGroups, 
groupFoundIn("group1", mappedGroups));
+    assertTrue("group1 not found in groups: " + Arrays.toString(mappedGroups), 
groupFoundIn("group1", mappedGroups));
   }
 
   /**
@@ -147,9 +147,9 @@ public class DefaultIdentityAssertionFilterTest {
     username = filter.mapUserPrincipal(((Principal) 
subject.getPrincipals(PrimaryPrincipal.class).toArray()[0]).getName());
     groups = filter.mapGroupPrincipals(((Principal) 
subject.getPrincipals(PrimaryPrincipal.class).toArray()[0]).getName(), subject);
     assertEquals("hdfs", username);
-    assertTrue("mrgroup not found in groups: " + groups, 
groupFoundIn("mrgroup", groups));
-    assertTrue("mrducks not found in groups: " + groups, 
groupFoundIn("mrducks", groups));
-    assertFalse("group1 WAS found in groups: " + groups, 
groupFoundIn("group1", groups));
+    assertTrue("mrgroup not found in groups: " + Arrays.toString(groups), 
groupFoundIn("mrgroup", groups));
+    assertTrue("mrducks not found in groups: " + Arrays.toString(groups), 
groupFoundIn("mrducks", groups));
+    assertFalse("group1 WAS found in groups: " + Arrays.toString(groups), 
groupFoundIn("group1", groups));
 
     subject = new Subject();
     

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/knox/gateway/encrypturi/impl/DecryptUriProcessor.java
----------------------------------------------------------------------
diff --git 
a/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/knox/gateway/encrypturi/impl/DecryptUriProcessor.java
 
b/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/knox/gateway/encrypturi/impl/DecryptUriProcessor.java
index c1b2e8e..a2df314 100644
--- 
a/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/knox/gateway/encrypturi/impl/DecryptUriProcessor.java
+++ 
b/gateway-provider-rewrite-step-encrypt-uri/src/main/java/org/apache/knox/gateway/encrypturi/impl/DecryptUriProcessor.java
@@ -17,9 +17,6 @@
  */
 package org.apache.knox.gateway.encrypturi.impl;
 
-import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-
 import org.apache.commons.codec.binary.Base64;
 import org.apache.knox.gateway.encrypturi.EncryptStepContextParams;
 import org.apache.knox.gateway.encrypturi.api.DecryptUriDescriptor;
@@ -35,6 +32,10 @@ import org.apache.knox.gateway.util.urltemplate.Expander;
 import org.apache.knox.gateway.util.urltemplate.Parser;
 import org.apache.knox.gateway.util.urltemplate.Template;
 
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+
 public class DecryptUriProcessor
     implements UrlRewriteStepProcessor<DecryptUriDescriptor> {
 
@@ -63,7 +64,7 @@ public class DecryptUriProcessor
           .expandToString( template, context.getParameters(), 
context.getEvaluator() );
       String url = decode( resolvedTemplate );
       EncryptStepContextParams params = new EncryptStepContextParams();
-      params.addParam( param, Arrays.asList( url ) );
+      params.addParam( param, Collections.singletonList(url));
       context.addParameters( params );
       return UrlRewriteStepStatus.SUCCESS;
     }
@@ -83,7 +84,7 @@ public class DecryptUriProcessor
         result.iv,
         result.salt);
     if (clear != null) {
-      return new String(clear);
+      return new String(clear, StandardCharsets.UTF_8);
     }
     return null;
   }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/GatewayCommandLine.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayCommandLine.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayCommandLine.java
index 18aaa5c..a981c4e 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayCommandLine.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayCommandLine.java
@@ -26,9 +26,12 @@ import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.PosixParser;
 import org.apache.knox.gateway.i18n.resources.ResourcesFactory;
 
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
 
-import static org.apache.commons.cli.HelpFormatter.*;
+import static org.apache.commons.cli.HelpFormatter.DEFAULT_DESC_PAD;
+import static org.apache.commons.cli.HelpFormatter.DEFAULT_LEFT_PAD;
 
 public class GatewayCommandLine {
 
@@ -39,13 +42,13 @@ public class GatewayCommandLine {
   }
 
   public static void printUsage() {
-    PrintWriter printer = new PrintWriter( System.err );
+    PrintWriter printer = new PrintWriter(new OutputStreamWriter( System.err, 
StandardCharsets.UTF_8), true);
     new HelpFormatter().printUsage( printer, LINE_WIDTH, COMMAND_NAME, 
createCommandLine() );
     printer.flush();
   }
 
   public static void printHelp() {
-    PrintWriter printer = new PrintWriter( System.err );
+    PrintWriter printer = new PrintWriter(new OutputStreamWriter( System.err, 
StandardCharsets.UTF_8), true);
     new HelpFormatter().printHelp(printer, LINE_WIDTH, COMMAND_NAME, null, 
createCommandLine(), DEFAULT_LEFT_PAD, DEFAULT_DESC_PAD, null);
     printer.flush();
   }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
index fc92f48..bf4929d 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
@@ -48,7 +48,7 @@ import org.apache.knox.gateway.topology.Topology;
 import org.apache.knox.gateway.topology.TopologyEvent;
 import org.apache.knox.gateway.topology.TopologyListener;
 import org.apache.knox.gateway.trace.AccessHandler;
-import org.apache.knox.gateway.trace.ErrorHandler;
+import org.apache.knox.gateway.trace.KnoxErrorHandler;
 import org.apache.knox.gateway.trace.TraceHandler;
 import org.apache.knox.gateway.util.Urls;
 import org.apache.knox.gateway.util.XmlUtils;
@@ -82,10 +82,11 @@ import org.xml.sax.SAXException;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStreamWriter;
 import java.io.Serializable;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
@@ -93,6 +94,7 @@ import java.net.Socket;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
 import java.security.cert.CertificateException;
@@ -424,7 +426,7 @@ public class GatewayServer {
     String[] mimeTypes = {};
     if (config.getMimeTypesToCompress() != null
         && !config.getMimeTypesToCompress().isEmpty()) {
-      mimeTypes = (String[]) config.getMimeTypesToCompress().toArray();
+      mimeTypes = config.getMimeTypesToCompress().toArray(new String[0]);
     }
     gzipHandler.addIncludedMimeTypes(mimeTypes);
     gzipHandler.setHandler(correlationHandler);
@@ -693,8 +695,8 @@ public class GatewayServer {
     return addresses;
   }
 
-  private ErrorHandler createErrorHandler() {
-    ErrorHandler errorHandler = new ErrorHandler();
+  private KnoxErrorHandler createErrorHandler() {
+    KnoxErrorHandler errorHandler = new KnoxErrorHandler();
     errorHandler.setShowStacks( false );
     errorHandler.setTracedBodyFilter( System.getProperty( 
"org.apache.knox.gateway.trace.body.status.filter" ) );
     return errorHandler;
@@ -755,8 +757,8 @@ public class GatewayServer {
           originalRoot.appendChild( importedNode );
         }
       }
-
-      XmlUtils.writeXml( webXmlDoc, new FileWriter(webXmlFile) );
+      
+      XmlUtils.writeXml( webXmlDoc, new OutputStreamWriter(new 
FileOutputStream(webXmlFile), StandardCharsets.UTF_8) );
     }
   }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
index 21aa29b..020cafb 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
@@ -17,22 +17,6 @@
  */
 package org.apache.knox.gateway;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URISyntaxException;
-import java.util.Enumeration;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.knox.gateway.audit.api.Action;
 import org.apache.knox.gateway.audit.api.ActionOutcome;
 import org.apache.knox.gateway.audit.api.AuditService;
@@ -49,6 +33,23 @@ import 
org.apache.knox.gateway.i18n.resources.ResourcesFactory;
 import org.apache.knox.gateway.services.GatewayServices;
 import org.apache.knox.gateway.services.metrics.MetricsService;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.util.Enumeration;
+
 public class GatewayServlet implements Servlet, Filter {
 
   public static final String GATEWAY_DESCRIPTOR_LOCATION_DEFAULT = 
"gateway.xml";
@@ -214,7 +215,7 @@ public class GatewayServlet implements Servlet, Filter {
       GatewayFilter filter = null;
       if( stream != null ) {
         try {
-          GatewayDescriptor descriptor = GatewayDescriptorFactory.load( "xml", 
new InputStreamReader( stream ) );
+          GatewayDescriptor descriptor = GatewayDescriptorFactory.load("xml", 
new InputStreamReader(stream, StandardCharsets.UTF_8));
           filter = GatewayFactory.create( descriptor );
         } finally {
           stream.close();

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/deploy/impl/ApplicationDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/deploy/impl/ApplicationDeploymentContributor.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/deploy/impl/ApplicationDeploymentContributor.java
index e02c0e5..2a8f872 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/deploy/impl/ApplicationDeploymentContributor.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/deploy/impl/ApplicationDeploymentContributor.java
@@ -17,21 +17,6 @@
  */
 package org.apache.knox.gateway.deploy.impl;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-
 import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.config.impl.GatewayConfigImpl;
 import org.apache.knox.gateway.deploy.DeploymentContext;
@@ -52,6 +37,22 @@ import org.apache.knox.gateway.topology.Application;
 import org.apache.knox.gateway.topology.Service;
 import org.apache.knox.gateway.topology.Version;
 
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public class ApplicationDeploymentContributor extends 
ServiceDeploymentContributorBase {
 
   private static final String SERVICE_DEFINITION_FILE_NAME = "service.xml";
@@ -94,7 +95,7 @@ public class ApplicationDeploymentContributor extends 
ServiceDeploymentContribut
     if( !file.exists() ) {
       rules = UrlRewriteRulesDescriptorFactory.load( "xml", new StringReader( 
"<rules/>" ) );
     } else {
-      FileReader reader = new FileReader( file );
+      InputStreamReader reader = new InputStreamReader(new 
FileInputStream(file), StandardCharsets.UTF_8);
       rules = UrlRewriteRulesDescriptorFactory.load( "xml", reader );
       reader.close();
     }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/filter/BasicAuthChallengeFilter.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/filter/BasicAuthChallengeFilter.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/filter/BasicAuthChallengeFilter.java
index 589c20f..49088c7 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/filter/BasicAuthChallengeFilter.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/filter/BasicAuthChallengeFilter.java
@@ -26,6 +26,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 /**
  *
@@ -67,7 +68,7 @@ public class BasicAuthChallengeFilter extends 
AbstractGatewayFilter {
     if( basicAuthResponse != null ) {
       String[] parts = basicAuthResponse.split( " " );
       if( parts.length == 2 ) {
-        String usernamePassword = new String( Base64.decodeBase64( parts[1] ) 
);
+        String usernamePassword = new String( Base64.decodeBase64( parts[1] ), 
StandardCharsets.UTF_8);
         parts = usernamePassword.split( ":" );
         if( parts.length == 2 ) {
           String username = parts[0];

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/RemoteAliasService.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/RemoteAliasService.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/RemoteAliasService.java
index f270ad1..4af4991 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/RemoteAliasService.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/RemoteAliasService.java
@@ -33,6 +33,7 @@ import 
org.apache.knox.gateway.services.security.EncryptionResult;
 import org.apache.knox.gateway.services.security.MasterService;
 import org.apache.zookeeper.ZooDefs;
 
+import java.nio.charset.StandardCharsets;
 import java.security.cert.Certificate;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -566,12 +567,12 @@ public class RemoteAliasService implements AliasService {
    */
   public String decrypt(final String encoded) throws Exception {
 
-    final String line = new String(Base64.decodeBase64(encoded));
+    final String line = new String(Base64.decodeBase64(encoded), 
StandardCharsets.UTF_8);
     final String[] parts = line.split("::");
 
     return new String(encryptor
         .decrypt(Base64.decodeBase64(parts[0]), Base64.decodeBase64(parts[1]),
-            Base64.decodeBase64(parts[2])), "UTF8");
+            Base64.decodeBase64(parts[2])), StandardCharsets.UTF_8);
   }
 
   /**
@@ -679,7 +680,7 @@ public class RemoteAliasService implements AliasService {
             && aliasService instanceof RemoteAliasService) {
           try {
             ((RemoteAliasService) aliasService)
-                .addAliasForClusterLocally(cluster, alias, 
remoteAliasService.decrypt(new String(data)));
+                .addAliasForClusterLocally(cluster, alias, 
remoteAliasService.decrypt(new String(data, StandardCharsets.UTF_8)));
           } catch (final Exception e) {
             /* log and move on */
             LOG.errorAddingAliasLocally(cluster, alias, e.toString());

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/topology/monitor/DefaultRemoteConfigurationMonitor.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/monitor/DefaultRemoteConfigurationMonitor.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/monitor/DefaultRemoteConfigurationMonitor.java
index 6501288..d90ae03 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/monitor/DefaultRemoteConfigurationMonitor.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/monitor/DefaultRemoteConfigurationMonitor.java
@@ -20,19 +20,19 @@ import org.apache.commons.io.FileUtils;
 import org.apache.knox.gateway.GatewayMessages;
 import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.i18n.messages.MessagesFactory;
+import 
org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClient;
 import 
org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClient.ChildEntryListener;
 import 
org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClient.EntryListener;
-import 
org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClient;
 import 
org.apache.knox.gateway.services.config.client.RemoteConfigurationRegistryClientService;
 import org.apache.zookeeper.ZooDefs;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-
 class DefaultRemoteConfigurationMonitor implements RemoteConfigurationMonitor {
 
     private static final String NODE_KNOX = "/knox";
@@ -155,7 +155,7 @@ class DefaultRemoteConfigurationMonitor implements 
RemoteConfigurationMonitor {
             for (String providerConfig : providerConfigs) {
                 File localFile = new File(providersDir, providerConfig);
 
-                byte[] remoteContent = client.getEntryData(NODE_KNOX_PROVIDERS 
+ "/" + providerConfig).getBytes();
+                byte[] remoteContent = client.getEntryData(NODE_KNOX_PROVIDERS 
+ "/" + providerConfig).getBytes(StandardCharsets.UTF_8);
                 if (!localFile.exists() || !Arrays.equals(remoteContent, 
FileUtils.readFileToByteArray(localFile))) {
                     FileUtils.writeByteArrayToFile(localFile, remoteContent);
                     log.downloadedRemoteConfigFile(providersDir.getName(), 
providerConfig);

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/ProviderConfigurationParser.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/ProviderConfigurationParser.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/ProviderConfigurationParser.java
index 4515ff7..7c7c20b 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/ProviderConfigurationParser.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/ProviderConfigurationParser.java
@@ -33,7 +33,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -45,7 +45,7 @@ public class ProviderConfigurationParser {
   private static final String EXT_YML  = "yml";
   private static final String EXT_YAML = "yaml";
 
-  public static final List<String> SUPPORTED_EXTENSIONS = 
Arrays.asList(EXT_XML, EXT_JSON, EXT_YML, EXT_YAML);
+  public static final List<String> SUPPORTED_EXTENSIONS = 
Collections.unmodifiableList(Arrays.asList(EXT_XML, EXT_JSON, EXT_YML, 
EXT_YAML));
 
 
   public static ProviderConfiguration parse(String path) throws Exception {

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
index f3bc172..affd46f 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
@@ -16,15 +16,27 @@
  */
 package org.apache.knox.gateway.topology.simple;
 
+import org.apache.knox.gateway.GatewayServer;
+import org.apache.knox.gateway.config.GatewayConfig;
+import org.apache.knox.gateway.i18n.messages.MessagesFactory;
+import org.apache.knox.gateway.services.GatewayServices;
+import org.apache.knox.gateway.services.Service;
+import org.apache.knox.gateway.services.security.AliasService;
+import org.apache.knox.gateway.services.security.KeystoreService;
+import org.apache.knox.gateway.services.security.MasterService;
+import 
org.apache.knox.gateway.topology.discovery.DefaultServiceDiscoveryConfig;
+import org.apache.knox.gateway.topology.discovery.ServiceDiscovery;
+import org.apache.knox.gateway.topology.discovery.ServiceDiscoveryFactory;
+
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
 import java.io.IOException;
-
+import java.io.OutputStreamWriter;
 import java.io.StringWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
-
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -33,19 +45,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.apache.knox.gateway.GatewayServer;
-import org.apache.knox.gateway.config.GatewayConfig;
-import org.apache.knox.gateway.i18n.messages.MessagesFactory;
-import org.apache.knox.gateway.services.GatewayServices;
-import org.apache.knox.gateway.services.Service;
-import org.apache.knox.gateway.services.security.AliasService;
-import org.apache.knox.gateway.services.security.KeystoreService;
-import org.apache.knox.gateway.services.security.MasterService;
-import 
org.apache.knox.gateway.topology.discovery.DefaultServiceDiscoveryConfig;
-import org.apache.knox.gateway.topology.discovery.ServiceDiscovery;
-import org.apache.knox.gateway.topology.discovery.ServiceDiscoveryFactory;
-
-
 /**
  * Processes simple topology descriptors, producing full topology files, which 
can subsequently be deployed to the
  * gateway.
@@ -577,7 +576,7 @@ public class SimpleDescriptorHandler {
             }
             topologyDescriptor = new File(destDirectory, topologyFilename + 
".xml");
 
-            fw = new BufferedWriter(new FileWriter(topologyDescriptor));
+            fw = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(topologyDescriptor), StandardCharsets.UTF_8));
             fw.write(sw.toString());
             fw.flush();
         } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/trace/ErrorHandler.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/trace/ErrorHandler.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/trace/ErrorHandler.java
deleted file mode 100644
index 694159d..0000000
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/trace/ErrorHandler.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.knox.gateway.trace;
-
-import org.eclipse.jetty.server.Request;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Set;
-
-public class ErrorHandler extends 
org.eclipse.jetty.server.handler.ErrorHandler {
-
-  private Set<Integer> bodyFilter;
-
-  public void setTracedBodyFilter( String s ) {
-    bodyFilter = TraceUtil.parseIntegerSet( s );
-  }
-
-  @Override
-  public void handle( String target, Request baseRequest, HttpServletRequest 
request, HttpServletResponse response )
-      throws IOException {
-    HttpServletResponse traceResponse = new TraceResponse( response, 
bodyFilter );
-    super.handle( target, baseRequest, request, traceResponse );
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/trace/KnoxErrorHandler.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/trace/KnoxErrorHandler.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/trace/KnoxErrorHandler.java
new file mode 100644
index 0000000..3310ca3
--- /dev/null
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/trace/KnoxErrorHandler.java
@@ -0,0 +1,43 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.knox.gateway.trace;
+
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.handler.ErrorHandler;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Set;
+
+public class KnoxErrorHandler extends ErrorHandler {
+
+  private Set<Integer> bodyFilter;
+
+  public void setTracedBodyFilter( String s ) {
+    bodyFilter = TraceUtil.parseIntegerSet( s );
+  }
+
+  @Override
+  public void handle( String target, Request baseRequest, HttpServletRequest 
request, HttpServletResponse response )
+      throws IOException {
+    HttpServletResponse traceResponse = new TraceResponse( response, 
bodyFilter );
+    super.handle( target, baseRequest, request, traceResponse );
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java
index 6524ca0..6ff8a91 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/util/KnoxCLI.java
@@ -17,30 +17,19 @@
  */
 package org.apache.knox.gateway.util;
 
-import java.io.BufferedReader;
-import java.io.Console;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.cert.Certificate;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLException;
-
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.conf.Configured;
+import org.apache.hadoop.util.Tool;
+import org.apache.hadoop.util.ToolRunner;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.ssl.SSLContexts;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
 import org.apache.knox.gateway.GatewayCommandLine;
 import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.config.impl.GatewayConfigImpl;
@@ -60,15 +49,6 @@ import 
org.apache.knox.gateway.services.topology.TopologyService;
 import org.apache.knox.gateway.topology.Provider;
 import org.apache.knox.gateway.topology.Topology;
 import org.apache.knox.gateway.topology.validation.TopologyValidator;
-import org.apache.hadoop.util.Tool;
-import org.apache.hadoop.util.ToolRunner;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.conn.ssl.SSLContexts;
-import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
 import org.apache.log4j.PropertyConfigurator;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.AuthenticationException;
@@ -83,6 +63,27 @@ import org.eclipse.persistence.oxm.MediaType;
 import org.jboss.shrinkwrap.api.exporter.ExplodedExporter;
 import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
 
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLException;
+import java.io.BufferedReader;
+import java.io.Console;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.Certificate;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.UUID;
+
 /**
  *
  */
@@ -1473,7 +1474,7 @@ public class KnoxCLI extends Configured implements Tool {
           this.username = c.readLine("Username: ");
         }else{
           try {
-            BufferedReader reader = new BufferedReader(new 
InputStreamReader(System.in));
+            BufferedReader reader = new BufferedReader(new 
InputStreamReader(System.in, StandardCharsets.UTF_8));
             out.println("Username: ");
             this.username = reader.readLine();
             reader.close();
@@ -1490,7 +1491,7 @@ public class KnoxCLI extends Configured implements Tool {
           this.password = c.readPassword("Password: ");
         }else{
           try {
-            BufferedReader reader = new BufferedReader(new 
InputStreamReader(System.in));
+            BufferedReader reader = new BufferedReader(new 
InputStreamReader(System.in, StandardCharsets.UTF_8));
             out.println("Password: ");
             String pw = reader.readLine();
             if(pw != null){
@@ -1766,7 +1767,7 @@ public class KnoxCLI extends Configured implements Tool {
       String authString = "";
 //    Create Authorization String
       if( user != null && pass != null) {
-        authString = "Basic " + Base64.encodeBase64String((user + ":" + 
pass).getBytes());
+        authString = "Basic " + Base64.encodeBase64String((user + ":" + 
pass).getBytes(StandardCharsets.UTF_8));
       } else {
         out.println("Username and/or password not supplied. Expect HTTP 401 
Unauthorized responses.");
       }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
index 5c97100..ad72342 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
@@ -38,6 +38,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
@@ -117,10 +118,10 @@ public class ServiceDefinitionsLoader {
   public static UrlRewriteRulesDescriptor loadRewriteRules(File servicesDir) {
     File rewriteFile = new File(servicesDir, REWRITE_FILE);
     if ( rewriteFile.exists() ) {
-      InputStream stream = null;
+      InputStream stream;
       try {
         stream = new FileInputStream(rewriteFile);
-        Reader reader = new InputStreamReader(stream);
+        Reader reader = new InputStreamReader(stream, StandardCharsets.UTF_8);
         UrlRewriteRulesDescriptor rules = 
UrlRewriteRulesDescriptorFactory.load(
             "xml", reader);
         reader.close();

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
 
b/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
index 82cc247..f1ef169 100644
--- 
a/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
+++ 
b/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
@@ -16,21 +16,24 @@ package org.apache.knox.gateway.rm.dispatch;
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.entity.BufferedHttpEntity;
 import org.apache.knox.gateway.dispatch.DefaultDispatch;
 import org.apache.knox.gateway.filter.AbstractGatewayFilter;
 import org.apache.knox.gateway.ha.provider.HaProvider;
 import org.apache.knox.gateway.ha.provider.impl.HaServiceConfigConstants;
 import org.apache.knox.gateway.i18n.messages.MessagesFactory;
 import org.apache.knox.gateway.rm.i18n.RMMessages;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.entity.BufferedHttpEntity;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URI;
+import java.nio.charset.StandardCharsets;
 import java.util.concurrent.atomic.AtomicInteger;
 
 class  RMHaBaseDispatcher extends DefaultDispatch {
@@ -119,7 +122,7 @@ class  RMHaBaseDispatcher extends DefaultDispatch {
           inboundResponse.setEntity(entity);
           ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
           inboundResponse.getEntity().writeTo(outputStream);
-          String body = new String(outputStream.toByteArray());
+          String body = new String(outputStream.toByteArray(), 
StandardCharsets.UTF_8);
           if (body.contains("This is standby RM")) {
              throw new StandbyException();
           }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-service-test/src/main/java/org/apache/knox/gateway/service/test/ServiceTestResource.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-test/src/main/java/org/apache/knox/gateway/service/test/ServiceTestResource.java
 
b/gateway-service-test/src/main/java/org/apache/knox/gateway/service/test/ServiceTestResource.java
index 7b74ff3..63a8189 100644
--- 
a/gateway-service-test/src/main/java/org/apache/knox/gateway/service/test/ServiceTestResource.java
+++ 
b/gateway-service-test/src/main/java/org/apache/knox/gateway/service/test/ServiceTestResource.java
@@ -17,12 +17,20 @@
  */
 package org.apache.knox.gateway.service.test;
 
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.conn.ssl.SSLContexts;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.knox.gateway.config.GatewayConfig;
+import org.apache.knox.gateway.services.GatewayServices;
+import org.apache.knox.gateway.services.topology.TopologyService;
+import org.apache.knox.gateway.topology.Service;
+import org.apache.knox.gateway.topology.Topology;
+import org.glassfish.jersey.internal.util.Base64;
+
 import javax.net.ssl.SSLContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.GET;
@@ -36,20 +44,13 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.knox.gateway.config.GatewayConfig;
-import org.apache.knox.gateway.services.GatewayServices;
-import org.apache.knox.gateway.services.topology.TopologyService;
-import org.apache.knox.gateway.topology.Service;
-import org.apache.knox.gateway.topology.Topology;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.conn.ssl.SSLContexts;
-import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.glassfish.jersey.internal.util.Base64;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 import static javax.ws.rs.core.MediaType.APPLICATION_XML;
@@ -76,7 +77,7 @@ public class ServiceTestResource {
 
 //    Create Authorization String
     if( username != null && password != null) {
-      authString = "Basic " + Base64.encodeAsString((username + ":" + 
password).getBytes());
+      authString = "Basic " + Base64.encodeAsString((username + ":" + 
password).getBytes(StandardCharsets.UTF_8));
     } else if (request.getHeader("Authorization") != null) {
       authString = request.getHeader("Authorization");
     } else {

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
 
b/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
index 1bd4136..64d94b4 100644
--- 
a/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
+++ 
b/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
@@ -17,15 +17,6 @@
  */
 package org.apache.knox.gateway.hdfs.dispatch;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.methods.HttpUriRequest;
@@ -38,6 +29,15 @@ import 
org.apache.knox.gateway.ha.provider.impl.HaServiceConfigConstants;
 import org.apache.knox.gateway.hdfs.i18n.WebHdfsMessages;
 import org.apache.knox.gateway.i18n.messages.MessagesFactory;
 
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.atomic.AtomicInteger;
+
 public abstract class AbstractHdfsHaDispatch extends HdfsHttpClientDispatch {
 
   private static final String FAILOVER_COUNTER_ATTRIBUTE = 
"dispatch.ha.failover.counter";
@@ -104,7 +104,7 @@ public abstract class AbstractHdfsHaDispatch extends 
HdfsHttpClientDispatch {
          inboundResponse.setEntity(entity);
          ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
          inboundResponse.getEntity().writeTo(outputStream);
-         String body = new String(outputStream.toByteArray());
+         String body = new String(outputStream.toByteArray(), 
StandardCharsets.UTF_8);
          if (body.contains("StandbyException")) {
             throw new StandbyException();
          }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSh.java
----------------------------------------------------------------------
diff --git 
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSh.java 
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSh.java
index 7993a47..c80581f 100644
--- a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSh.java
+++ b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSh.java
@@ -17,12 +17,18 @@
  */
 package org.apache.knox.gateway.shell;
 
+import org.apache.knox.gateway.shell.knox.token.Get;
+import org.apache.knox.gateway.shell.knox.token.Token;
+import org.apache.knox.gateway.util.JsonUtils;
+
 import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.io.PrintStream;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.attribute.PosixFilePermission;
@@ -34,10 +40,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.knox.gateway.shell.knox.token.Token;
-import org.apache.knox.gateway.util.JsonUtils;
-import org.apache.knox.gateway.shell.knox.token.Get;
-
 /**
  *
  */
@@ -275,7 +277,7 @@ public class KnoxSh {
   }
 
   private String readFile(String file) throws IOException {
-    BufferedReader reader = new BufferedReader(new FileReader (file));
+    BufferedReader reader = new BufferedReader(new InputStreamReader(new 
FileInputStream(file), StandardCharsets.UTF_8));
     String line = null;
     String content = null;
     StringBuilder  stringBuilder = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/DefaultDispatch.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/DefaultDispatch.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/DefaultDispatch.java
index 4f8c82f..8757192 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/DefaultDispatch.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/DefaultDispatch.java
@@ -17,6 +17,17 @@
  */
 package org.apache.knox.gateway.dispatch;
 
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpHead;
+import org.apache.http.client.methods.HttpOptions;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.entity.ContentType;
 import org.apache.knox.gateway.SpiGatewayMessages;
 import org.apache.knox.gateway.SpiGatewayResources;
 import org.apache.knox.gateway.audit.api.Action;
@@ -31,17 +42,6 @@ import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.i18n.messages.MessagesFactory;
 import org.apache.knox.gateway.i18n.resources.ResourcesFactory;
 import org.apache.knox.gateway.util.MimeTypes;
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpDelete;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpHead;
-import org.apache.http.client.methods.HttpOptions;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.entity.ContentType;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -63,7 +63,7 @@ public class DefaultDispatch extends AbstractGatewayDispatch {
 
   protected static final SpiGatewayMessages LOG = 
MessagesFactory.get(SpiGatewayMessages.class);
   protected static final SpiGatewayResources RES = 
ResourcesFactory.get(SpiGatewayResources.class);
-  protected static Auditor auditor = 
AuditServiceFactory.getAuditService().getAuditor(AuditConstants.DEFAULT_AUDITOR_NAME,
+  protected static final Auditor auditor = 
AuditServiceFactory.getAuditService().getAuditor(AuditConstants.DEFAULT_AUDITOR_NAME,
       AuditConstants.KNOX_SERVICE_NAME, AuditConstants.KNOX_COMPONENT_NAME);
 
   private Set<String> outboundResponseExcludeHeaders;

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-spi/src/main/java/org/apache/knox/gateway/services/hostmap/FileBasedHostMapper.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/hostmap/FileBasedHostMapper.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/hostmap/FileBasedHostMapper.java
index 1a9c958..30631f0 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/hostmap/FileBasedHostMapper.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/hostmap/FileBasedHostMapper.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -33,7 +34,7 @@ public class FileBasedHostMapper implements HostMapper {
   public FileBasedHostMapper( URL url ) throws IOException {
     if( url != null ) {
       InputStream stream = url.openStream();
-      BufferedReader reader = new BufferedReader( new InputStreamReader( 
stream ) );
+      BufferedReader reader = new BufferedReader( new InputStreamReader( 
stream, StandardCharsets.UTF_8 ) );
       String line = reader.readLine();
       while( line != null ) {
         String[] lineSplit = line.split( "=" );

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
index 8155d7a..999a00c 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
@@ -29,6 +29,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.security.Key;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
@@ -197,7 +198,7 @@ public class BaseKeystoreService {
   protected char[] getCredential(String alias, char[] credential, KeyStore ks) 
{
     if (ks != null) {
       try {
-        credential = new String(ks.getKey(alias, 
masterService.getMasterSecret()).getEncoded()).toCharArray();
+        credential = new String(ks.getKey(alias, 
masterService.getMasterSecret()).getEncoded(), 
StandardCharsets.UTF_8).toCharArray();
       } catch (UnrecoverableKeyException e) {
         LOG.failedToGetCredential(e);
       } catch (KeyStoreException e) {

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
index b39e6ab..fa7736a 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
@@ -29,6 +29,7 @@ import 
org.apache.knox.gateway.services.security.EncryptionResult;
 import java.io.Console;
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -162,10 +163,10 @@ public class CMFMasterService {
 
   protected void initializeFromMaster(File masterFile) throws Exception {
       try {
-        List<String> lines = FileUtils.readLines(masterFile, "UTF8");
+        List<String> lines = FileUtils.readLines(masterFile, 
StandardCharsets.UTF_8);
         String tag = lines.get(0);
         LOG.loadingFromPersistentMaster( tag );
-        String line = new String(Base64.decodeBase64(lines.get(1)));
+        String line = new String(Base64.decodeBase64(lines.get(1)), 
StandardCharsets.UTF_8);
         String[] parts = line.split("::");
         this.master = new 
String(encryptor.decrypt(Base64.decodeBase64(parts[0]),
             Base64.decodeBase64(parts[1]), Base64.decodeBase64(parts[2])),

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-test-utils/src/main/java/org/apache/knox/test/Console.java
----------------------------------------------------------------------
diff --git a/gateway-test-utils/src/main/java/org/apache/knox/test/Console.java 
b/gateway-test-utils/src/main/java/org/apache/knox/test/Console.java
index 0965748..9891532 100644
--- a/gateway-test-utils/src/main/java/org/apache/knox/test/Console.java
+++ b/gateway-test-utils/src/main/java/org/apache/knox/test/Console.java
@@ -19,6 +19,7 @@ package org.apache.knox.test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
 
 public class Console {
 
@@ -26,14 +27,14 @@ public class Console {
   PrintStream oldErr, newErr;
   ByteArrayOutputStream newOutBuf, newErrBuf;
 
-  public void capture() {
+  public void capture() throws UnsupportedEncodingException {
     oldErr = System.err;
     newErrBuf = new ByteArrayOutputStream();
-    newErr = new PrintStream( newErrBuf );
+    newErr = new PrintStream( newErrBuf, false, "UTF-8" );
 
     oldOut = System.out; // I18N not required.
     newOutBuf = new ByteArrayOutputStream();
-    newOut = new PrintStream( newOutBuf );
+    newOut = new PrintStream( newOutBuf, false, "UTF-8" );
 
     System.setErr( newErr );
     System.setOut( newOut );

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
----------------------------------------------------------------------
diff --git 
a/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java 
b/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
index e5ed5c9..8d8ce24 100644
--- a/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
+++ b/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
@@ -17,6 +17,17 @@
  */
 package org.apache.knox.test;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.servlet.ServletTester;
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -30,21 +41,11 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.URL;
 import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.apache.velocity.runtime.RuntimeConstants;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-import org.eclipse.jetty.http.HttpTester;
-import org.eclipse.jetty.servlet.ServletTester;
-
 public class TestUtils {
 
   private static Logger LOG = Logger.getLogger(TestUtils.class);
@@ -204,10 +205,10 @@ public class TestUtils {
   public static HttpTester.Response execute( ServletTester server, 
HttpTester.Request request ) throws Exception {
     LOG.debug( "execute: request=" + request );
     ByteBuffer requestBuffer = request.generate();
-    LOG.trace( "execute: requestBuffer=[" + new 
String(requestBuffer.array(),0,requestBuffer.limit()) + "]" );
+    LOG.trace( "execute: requestBuffer=[" + new 
String(requestBuffer.array(),0,requestBuffer.limit(), StandardCharsets.UTF_8) + 
"]" );
     ByteBuffer responseBuffer = server.getResponses( requestBuffer, 30, 
TimeUnit.SECONDS );
     HttpTester.Response response = HttpTester.parseResponse( responseBuffer );
-    LOG.trace( "execute: responseBuffer=[" + new 
String(responseBuffer.array(),0,responseBuffer.limit()) + "]" );
+    LOG.trace( "execute: responseBuffer=[" + new 
String(responseBuffer.array(),0,responseBuffer.limit(), StandardCharsets.UTF_8) 
+ "]" );
     LOG.debug( "execute: reponse=" + response );
     return response;
   }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/audit/Log4jAuditor.java
----------------------------------------------------------------------
diff --git 
a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/audit/Log4jAuditor.java
 
b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/audit/Log4jAuditor.java
index 30ea8d4..1e2911c 100644
--- 
a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/audit/Log4jAuditor.java
+++ 
b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/audit/Log4jAuditor.java
@@ -37,7 +37,7 @@ public class Log4jAuditor implements Auditor {
   /** Comma seperated list of query parameters who's values will be masked
   * e.g. -Dmasked_params=knoxtoken,ccNumber
   **/
-  public static String MASKED_QUERY_PARAMS_OPTION = "masked_params";
+  public static final String MASKED_QUERY_PARAMS_OPTION = "masked_params";
   private Logger logger;
   private String componentName;
   private String serviceName;

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/gateway-util-configinjector/src/main/java/org/apache/knox/gateway/config/impl/DefaultConfigurationInjector.java
----------------------------------------------------------------------
diff --git 
a/gateway-util-configinjector/src/main/java/org/apache/knox/gateway/config/impl/DefaultConfigurationInjector.java
 
b/gateway-util-configinjector/src/main/java/org/apache/knox/gateway/config/impl/DefaultConfigurationInjector.java
index ad48199..f211e28 100755
--- 
a/gateway-util-configinjector/src/main/java/org/apache/knox/gateway/config/impl/DefaultConfigurationInjector.java
+++ 
b/gateway-util-configinjector/src/main/java/org/apache/knox/gateway/config/impl/DefaultConfigurationInjector.java
@@ -18,14 +18,14 @@
 package org.apache.knox.gateway.config.impl;
 
 import org.apache.commons.beanutils.ConvertUtilsBean2;
+import org.apache.knox.gateway.config.Alias;
 import org.apache.knox.gateway.config.ConfigurationAdapter;
+import org.apache.knox.gateway.config.ConfigurationBinding;
 import org.apache.knox.gateway.config.ConfigurationException;
 import org.apache.knox.gateway.config.Configure;
-import org.apache.knox.gateway.config.spi.ConfigurationInjector;
-import org.apache.knox.gateway.config.Alias;
-import org.apache.knox.gateway.config.ConfigurationBinding;
 import org.apache.knox.gateway.config.Default;
 import org.apache.knox.gateway.config.Optional;
+import org.apache.knox.gateway.config.spi.ConfigurationInjector;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
@@ -157,7 +157,7 @@ public class DefaultConfigurationInjector implements 
ConfigurationInjector {
   private <T extends Annotation> T findAnnotation( Annotation[] annotations, 
Class<T> type ) {
     T found = null;
     for( Annotation current : annotations ) {
-      if( type.isAssignableFrom( current.getClass() ) ) {
+      if( type.isAssignableFrom( current.annotationType() ) ) {
         found = (T)current;
         break;
       }

http://git-wip-us.apache.org/repos/asf/knox/blob/5bf7bc5d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 09b0f0e..f9965a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,6 +103,12 @@
     </modules>
 
     <properties>
+        <!--
+         It is recommended to set the compiler version globally,
+         as the compiler plugin and the forbidden API checker both
+         use this version
+        -->
+        <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <repo.id>internal.repo</repo.id>
@@ -112,18 +118,23 @@
         <gateway-artifact>knox</gateway-artifact>
         <gateway-version>1.2.0-SNAPSHOT</gateway-version>
         <gateway-group>org.apache.knox</gateway-group>
+
+        <!-- Dependencies sorted alphabetically -->
+        <apacheds-version>2.0.0-M16</apacheds-version>
+        <commons-beanutils-version>1.9.3</commons-beanutils-version>
+        <failsafe-version>2.19.1</failsafe-version>
+        <findsecbugs-plugin.version>1.8.0</findsecbugs-plugin.version>
         <groovy-version>2.4.8</groovy-version>
         <hadoop-version>3.0.0</hadoop-version>
         <jackson.version>2.9.5</jackson.version>
-        <jetty-version>9.2.25.v20180606</jetty-version>
-        <mockito-version>1.10.19</mockito-version>
-        <surefire-version>2.16</surefire-version>
-        <failsafe-version>2.19.1</failsafe-version>
-        <apacheds-version>2.0.0-M16</apacheds-version>
         <javax-websocket-version>1.1</javax-websocket-version>
+        <jetty-version>9.2.25.v20180606</jetty-version>
         <metrics-version>3.1.2</metrics-version>
+        <mockito-version>1.10.19</mockito-version>
         <shiro.version>1.2.6</shiro.version>
-        <commons-beanutils-version>1.9.3</commons-beanutils-version>
+        <spotbugs.version>3.1.7</spotbugs.version>
+        <spotbugs-maven-plugin.version>3.1.6</spotbugs-maven-plugin.version>
+        <surefire-version>2.16</surefire-version>
     </properties>
 
     <licenses>
@@ -183,7 +194,9 @@
                             <execution>
                                 <id>source</id>
                                 <phase>package</phase>
-                                <goals><goal>single</goal></goals>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
                                 <configuration>
                                     
<finalName>${gateway-artifact}-${gateway-version}</finalName>
                                     
<outputDirectory>target/${gateway-version}</outputDirectory>
@@ -227,7 +240,9 @@
                 <executions>
                     <execution>
                         <phase>verify</phase>
-                        <goals><goal>check</goal></goals>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
                     </execution>
                 </executions>
                 <configuration>
@@ -298,12 +313,10 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.3</version>
+                <version>3.8.0</version>
                 <configuration>
-                    <compilerId>javac</compilerId>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <debug>true</debug>
+                    <source>${maven.compiler.target}</source>
+                    <target>${maven.compiler.target}</target>
                 </configuration>
                 <dependencies>
                     <dependency>
@@ -351,25 +364,56 @@
                 <artifactId>maven-enforcer-plugin</artifactId>
                 <version>3.0.0-M1</version>
                 <executions>
-                  <execution>
-                    <id>enforce-maven</id>
-                    <goals>
-                      <goal>enforce</goal>
-                    </goals>
-                    <configuration>
-                      <rules>
-                        <requireMavenVersion>
-                          <version>[3.0.2,)</version>
-                        </requireMavenVersion>
-                        <requireJavaVersion>
-                          <version>[1.8,)</version>
-                        </requireJavaVersion>
-                      </rules>
-                    </configuration>
-                  </execution>
+                    <execution>
+                        <id>enforce-maven</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireMavenVersion>
+                                    <version>[3.0.2,)</version>
+                                </requireMavenVersion>
+                                <requireJavaVersion>
+                                    <version>[1.8,)</version>
+                                </requireJavaVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
-
+            <plugin>
+                <groupId>com.github.spotbugs</groupId>
+                <artifactId>spotbugs-maven-plugin</artifactId>
+                <version>${spotbugs-maven-plugin.version}</version>
+                <configuration>
+                    <threshold>High</threshold>
+                    <failOnError>true</failOnError>
+                    
<excludeFilterFile>${session.executionRootDirectory}/src/spotbugs-filter.xml</excludeFilterFile>
+                    <plugins>
+                        <plugin>
+                            <groupId>com.h3xstream.findsecbugs</groupId>
+                            <artifactId>findsecbugs-plugin</artifactId>
+                            <version>${findsecbugs-plugin.version}</version> 
<!-- Auto-update to the latest stable -->
+                        </plugin>
+                    </plugins>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <!-- overwrite dependency on spotbugs if you want to 
specify the version of spotbugs -->
+                    <dependency>
+                        <groupId>com.github.spotbugs</groupId>
+                        <artifactId>spotbugs</artifactId>
+                        <version>${spotbugs.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
         </plugins>
     </build>
 
@@ -419,11 +463,6 @@
             </plugin>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
-                <artifactId>findbugs-maven-plugin</artifactId>
-                <version>2.5.2</version>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
                 <artifactId>javancss-maven-plugin</artifactId>
                 <version>2.0-beta-2</version>
             </plugin>
@@ -763,16 +802,16 @@
                 <version>2.6</version>
             </dependency>
             <dependency>
-              <groupId>com.nimbusds</groupId>
-              <artifactId>nimbus-jose-jwt</artifactId>
-              <version>4.41.2</version>
-              <scope>compile</scope>
-              <exclusions>
-                <exclusion>
-                  <groupId>org.bouncycastle</groupId>
-                  <artifactId>bcprov-jdk15on</artifactId>
-                </exclusion>
-              </exclusions>
+                <groupId>com.nimbusds</groupId>
+                <artifactId>nimbus-jose-jwt</artifactId>
+                <version>4.41.2</version>
+                <scope>compile</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.bouncycastle</groupId>
+                        <artifactId>bcprov-jdk15on</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>net.minidev</groupId>
@@ -823,7 +862,7 @@
                 <version>2.5.2</version>
             </dependency>
 
-           <dependency>
+            <dependency>
                 <groupId>com.thetransactioncompany</groupId>
                 <artifactId>cors-filter</artifactId>
                 <version>2.4</version>
@@ -1231,7 +1270,7 @@
                 <version>${jetty-version}</version>
             </dependency>
 
-             <!-- Websocket support -->
+            <!-- Websocket support -->
             <dependency>
                 <groupId>org.eclipse.jetty.websocket</groupId>
                 <artifactId>websocket-server</artifactId>

Reply via email to