Skip to content

Commit 60887e4

Browse files
committed
JAVA-2296: Support Decimal128 in com.mongodb.util.JSON
1 parent 88bc69a commit 60887e4

File tree

4 files changed

+34
-4
lines changed

4 files changed

+34
-4
lines changed

driver/src/main/com/mongodb/util/JSONCallback.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008-2014 MongoDB, Inc.
2+
* Copyright 2008-2016 MongoDB, Inc.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@
3030
import org.bson.types.Binary;
3131
import org.bson.types.Code;
3232
import org.bson.types.CodeWScope;
33+
import org.bson.types.Decimal128;
3334
import org.bson.types.MaxKey;
3435
import org.bson.types.MinKey;
3536
import org.bson.types.ObjectId;
@@ -131,6 +132,8 @@ public Object objectDone() {
131132
o = new BsonUndefined();
132133
} else if (b.containsField("$numberLong")) {
133134
o = Long.valueOf((String) b.get("$numberLong"));
135+
} else if (b.containsField("$numberDecimal")) {
136+
o = Decimal128.parse((String) b.get("$numberDecimal"));
134137
}
135138

136139
if (!isStackEmpty()) {

driver/src/main/com/mongodb/util/JSONSerializers.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008-2014 MongoDB, Inc.
2+
* Copyright 2008-2016 MongoDB, Inc.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@
2525
import org.bson.types.Binary;
2626
import org.bson.types.Code;
2727
import org.bson.types.CodeWScope;
28+
import org.bson.types.Decimal128;
2829
import org.bson.types.MaxKey;
2930
import org.bson.types.MinKey;
3031
import org.bson.types.ObjectId;
@@ -108,6 +109,7 @@ static ClassMapBasedObjectSerializer addCommonSerializers() {
108109
serializer.addObjectSerializer(Symbol.class, new SymbolSerializer(serializer));
109110
serializer.addObjectSerializer(UUID.class, new UuidSerializer(serializer));
110111
serializer.addObjectSerializer(BsonUndefined.class, new UndefinedSerializer(serializer));
112+
serializer.addObjectSerializer(Decimal128.class, new Decimal128Serializer(serializer));
111113
return serializer;
112114
}
113115

@@ -509,4 +511,16 @@ public void serialize(final Object obj, final StringBuilder buf) {
509511
}
510512

511513
}
514+
515+
private static class Decimal128Serializer extends CompoundObjectSerializer {
516+
517+
Decimal128Serializer(final ObjectSerializer serializer) {
518+
super(serializer);
519+
}
520+
521+
@Override
522+
public void serialize(final Object obj, final StringBuilder buf) {
523+
serializer.serialize(new BasicDBObject("$numberDecimal", obj.toString()), buf);
524+
}
525+
}
512526
}

driver/src/test/unit/com/mongodb/util/JSONCallbackTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008-2014 MongoDB, Inc.
2+
* Copyright 2008-2016 MongoDB, Inc.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
2323
import org.bson.Transformer;
2424
import org.bson.types.BSONTimestamp;
2525
import org.bson.types.Binary;
26+
import org.bson.types.Decimal128;
2627
import org.bson.types.ObjectId;
2728
import org.junit.Test;
2829

@@ -133,4 +134,9 @@ public void numberLongParsing() {
133134

134135
}
135136

137+
@Test
138+
public void numberDecimalParsing() {
139+
Decimal128 number = (Decimal128) JSON.parse(("{\"$numberDecimal\" : \"314E-2\"}"));
140+
assertEquals(number, Decimal128.parse("314E-2"));
141+
}
136142
}

driver/src/test/unit/com/mongodb/util/JSONSerializersTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2008-2014 MongoDB, Inc.
2+
* Copyright 2008-2016 MongoDB, Inc.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
2424
import org.bson.types.Binary;
2525
import org.bson.types.Code;
2626
import org.bson.types.CodeWScope;
27+
import org.bson.types.Decimal128;
2728
import org.bson.types.MaxKey;
2829
import org.bson.types.MinKey;
2930
import org.bson.types.ObjectId;
@@ -187,6 +188,12 @@ public void testLegacySerialization() {
187188
buf = new StringBuilder();
188189
serializer.serialize(uuid, buf);
189190
assertEquals("{ \"$uuid\" : \"" + uuid.toString() + "\"}", buf.toString());
191+
192+
// test Decimal128
193+
Decimal128 decimal128 = Decimal128.parse("3.140");
194+
buf = new StringBuilder();
195+
serializer.serialize(decimal128, buf);
196+
assertEquals("{ \"$numberDecimal\" : \"3.140\"}", buf.toString());
190197
}
191198

192199
@Test

0 commit comments

Comments
 (0)