瀏覽代碼

Fix #11699

Add a null-check for XContentBuilder#field for BigDecimals
Johannes Barthelmes 10 年之前
父節點
當前提交
38ceeb5c30
共有 1 個文件被更改,包括 20 次插入12 次删除
  1. 20 12
      core/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java

+ 20 - 12
core/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java

@@ -499,28 +499,36 @@ public final class XContentBuilder implements BytesStream, Releasable {
 
     public XContentBuilder field(String name, BigDecimal value, int scale, RoundingMode rounding, boolean toDouble) throws IOException {
         field(name);
-        if (toDouble) {
-            try {
-                generator.writeNumber(value.setScale(scale, rounding).doubleValue());
-            } catch (ArithmeticException e) {
+        if (value == null) {
+            generator.writeNull();
+        } else {
+            if (toDouble) {
+                try {
+                    generator.writeNumber(value.setScale(scale, rounding).doubleValue());
+                } catch (ArithmeticException e) {
+                    generator.writeString(value.toEngineeringString());
+                }
+            } else {
                 generator.writeString(value.toEngineeringString());
             }
-        } else {
-            generator.writeString(value.toEngineeringString());
         }
         return this;
     }
 
     public XContentBuilder field(XContentBuilderString name, BigDecimal value, int scale, RoundingMode rounding, boolean toDouble) throws IOException {
         field(name);
-        if (toDouble) {
-            try {
-                generator.writeNumber(value.setScale(scale, rounding).doubleValue());
-            } catch (ArithmeticException e) {
+        if (value == null) {
+            generator.writeNull();
+        } else {
+            if (toDouble) {
+                try {
+                    generator.writeNumber(value.setScale(scale, rounding).doubleValue());
+                } catch (ArithmeticException e) {
+                    generator.writeString(value.toEngineeringString());
+                }
+            } else {
                 generator.writeString(value.toEngineeringString());
             }
-        } else {
-            generator.writeString(value.toEngineeringString());
         }
         return this;
     }