You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by km...@apache.org on 2015/03/02 21:44:36 UTC

knox git commit: KNOX-378: Knox rewrites numbers in JSON to engineering notation

Repository: knox
Updated Branches:
  refs/heads/master 9f2821470 -> 0a4fb9a7d


KNOX-378: Knox rewrites numbers in JSON to engineering notation


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

Branch: refs/heads/master
Commit: 0a4fb9a7d41a1e8a6169f4c2ad8ebd8915cc306b
Parents: 9f28214
Author: Kevin Minder <ke...@hortonworks.com>
Authored: Mon Mar 2 15:44:31 2015 -0500
Committer: Kevin Minder <ke...@hortonworks.com>
Committed: Mon Mar 2 15:44:31 2015 -0500

----------------------------------------------------------------------
 CHANGES                                         |  5 +
 .../rewrite/impl/json/JsonFilterReader.java     | 96 +++++++++++++++-----
 .../rewrite/impl/json/JsonFilterReaderTest.java | 18 ++++
 3 files changed, 97 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/0a4fb9a7/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 9f2677a..34aeee7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,10 @@ Release Notes - Apache Knox - Version 0.6.0
   * [KNOX-462] - Proper error message when root tag of topology file incorrect
   * [KNOX-501] - Avoid NPE in case of passing invalid argument to KnoxCli.
 
+** Bug
+  * [KNOX-378] - Knox rewrites numbers in JSON to engineering notation
+
+
 ------------------------------------------------------------------------------
 Release Notes - Apache Knox - Version 0.5.1
 ------------------------------------------------------------------------------
@@ -27,6 +31,7 @@ Release Notes - Apache Knox - Version 0.5.1
     * [KNOX-459] - fixed LDAP connection leaks in KnoxLdapRealm
     * [KNOX-464] - Location headers have wrong hostname when used behind load balancer
     * [KNOX-468] - update group lookup topologies to configure cache manager
+
 ------------------------------------------------------------------------------
 Release Notes - Apache Knox - Version 0.5.0
 ------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/knox/blob/0a4fb9a7/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReader.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReader.java b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReader.java
index 5ed3d81..10fc9b8 100644
--- a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReader.java
+++ b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReader.java
@@ -341,37 +341,89 @@ class JsonFilterReader extends Reader {
     if( parent.isArray() ) {
       if( bufferingLevel != null ) {
         ArrayNode array = (ArrayNode)parent.node;
-        array.add( parser.getDecimalValue() );
+        processBufferedArrayValueNumber( array );
       }
     } else {
       child = stack.pop();
       if( bufferingLevel != null ) {
         parent = stack.peek();
         ObjectNode object = (ObjectNode)parent.node;
-        object.put( child.field, parser.getDecimalValue() );
+        processBufferedFieldValueNumber( child, object );
       }
     }
     if( bufferingLevel == null ) {
-      switch( parser.getNumberType() ) {
-        case INT:
-          generator.writeNumber( parser.getIntValue() );
-          break;
-        case LONG:
-          generator.writeNumber( parser.getLongValue() );
-          break;
-        case BIG_INTEGER:
-          generator.writeNumber( parser.getBigIntegerValue() );
-          break;
-        case FLOAT:
-          generator.writeNumber( parser.getFloatValue() );
-          break;
-        case DOUBLE:
-          generator.writeNumber( parser.getDoubleValue() );
-          break;
-        case BIG_DECIMAL:
-          generator.writeNumber( parser.getDecimalValue() );
-          break;
-      }
+      processedUnbufferedValueNumber();
+    }
+  }
+
+  private void processedUnbufferedValueNumber() throws IOException {
+    switch( parser.getNumberType() ) {
+      case INT:
+        generator.writeNumber( parser.getIntValue() );
+        break;
+      case LONG:
+        generator.writeNumber( parser.getLongValue() );
+        break;
+      case BIG_INTEGER:
+        generator.writeNumber( parser.getBigIntegerValue() );
+        break;
+      case FLOAT:
+        generator.writeNumber( parser.getFloatValue() );
+        break;
+      case DOUBLE:
+        generator.writeNumber( parser.getDoubleValue() );
+        break;
+      case BIG_DECIMAL:
+        generator.writeNumber( parser.getDecimalValue() );
+        break;
+    }
+  }
+
+  private void processBufferedFieldValueNumber( Level child, ObjectNode object ) throws IOException {
+    //object.put( child.field, parser.getDecimalValue() );
+    switch( parser.getNumberType() ) {
+      case INT:
+        object.put( child.field, parser.getIntValue() );
+        break;
+      case LONG:
+        object.put( child.field, parser.getLongValue() );
+        break;
+      case BIG_INTEGER:
+        object.put( child.field, parser.getDecimalValue() );
+        break;
+      case FLOAT:
+        object.put( child.field, parser.getFloatValue() );
+        break;
+      case DOUBLE:
+        object.put( child.field, parser.getDoubleValue() );
+        break;
+      case BIG_DECIMAL:
+        object.put( child.field, parser.getDecimalValue() );
+        break;
+    }
+  }
+
+  private void processBufferedArrayValueNumber( ArrayNode array ) throws IOException {
+    //array.add( parser.getDecimalValue() );
+    switch( parser.getNumberType() ) {
+      case INT:
+        array.add( parser.getIntValue() );
+        break;
+      case LONG:
+        array.add( parser.getLongValue() );
+        break;
+      case BIG_INTEGER:
+        array.add( parser.getDecimalValue() );
+        break;
+      case FLOAT:
+        array.add( parser.getFloatValue() );
+        break;
+      case DOUBLE:
+        array.add( parser.getDoubleValue() );
+        break;
+      case BIG_DECIMAL:
+        array.add( parser.getDecimalValue() );
+        break;
     }
   }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/0a4fb9a7/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java
index 6f4eda2..f88f092 100644
--- a/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java
+++ b/gateway-provider-rewrite/src/test/java/org/apache/hadoop/gateway/filter/rewrite/impl/json/JsonFilterReaderTest.java
@@ -32,16 +32,34 @@ import org.junit.Test;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
+import java.math.BigInteger;
 import java.nio.charset.Charset;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.fail;
 
 public class JsonFilterReaderTest {
 
   @Test
+  public void testValueNumberWithBuffering() throws Exception {
+    String input = "{ \"apps\" : {\"app\":[{\"id\":\"one\", \"progress\":100.0, \"startedTime\":1399975176760}]} }";
+
+    UrlRewriteRulesDescriptor rulesConfig = UrlRewriteRulesDescriptorFactory.create();
+    UrlRewriteFilterDescriptor filterConfig = rulesConfig.addFilter( "filter-1" );
+    UrlRewriteFilterContentDescriptor contentConfig = filterConfig.addContent( "text/json" );
+    UrlRewriteFilterBufferDescriptor bufferConfig = contentConfig.addBuffer( "$.apps.app[*]" );
+    UrlRewriteFilterApplyDescriptor applyConfig = bufferConfig.addApply( "$.id", "test-rule" );
+
+    JsonFilterReader filter = new JsonFilterReader( new StringReader( input ), contentConfig );
+    String output = IOUtils.toString( filter );
+    assertThat( output, containsString( "\"startedTime\":1399975176760}" ) );
+  }
+
+
+  @Test
   public void testSimple() throws IOException {
     String inputJson = "{ \"test-name\" : \"test-value\" }";
     StringReader inputReader = new StringReader( inputJson );