diff --git a/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java b/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java index a873a5d5a995d..6a1675e6ceeb0 100644 --- a/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java +++ b/src/main/java/org/elasticsearch/common/xcontent/XContentBuilder.java @@ -499,28 +499,36 @@ public XContentBuilder field(XContentBuilderString name, BigDecimal value) throw 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; }