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 );