Skip to content

Commit ac6fa70

Browse files
committed
Fix Symbol decoding in DBObjectCodec
JAVA-1909
1 parent 145785a commit ac6fa70

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

bson/src/main/org/bson/codecs/StringCodec.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.bson.codecs;
1818

1919
import org.bson.BsonReader;
20+
import org.bson.BsonType;
2021
import org.bson.BsonWriter;
2122

2223
/**
@@ -32,7 +33,11 @@ public void encode(final BsonWriter writer, final String value, final EncoderCon
3233

3334
@Override
3435
public String decode(final BsonReader reader, final DecoderContext decoderContext) {
35-
return reader.readString();
36+
if (reader.getCurrentBsonType() == BsonType.SYMBOL) {
37+
return reader.readSymbol();
38+
} else {
39+
return reader.readString();
40+
}
3641
}
3742

3843
@Override

driver/src/test/unit/com/mongodb/DBObjectCodecSpecification.groovy

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ import org.bson.BsonBinarySubType
2323
import org.bson.BsonDocument
2424
import org.bson.BsonDocumentReader
2525
import org.bson.BsonDocumentWriter
26+
import org.bson.BsonSymbol
2627
import org.bson.codecs.DecoderContext
2728
import org.bson.codecs.EncoderContext
2829
import org.bson.codecs.UuidCodec
2930
import org.bson.codecs.ValueCodecProvider
3031
import org.bson.types.Binary
32+
import org.bson.types.Symbol
3133
import spock.lang.Specification
3234

3335
import static org.bson.UuidRepresentation.STANDARD
@@ -115,4 +117,22 @@ class DBObjectCodecSpecification extends Specification {
115117
then:
116118
decodedUuid.get('byteArray') == new Binary(subType, array)
117119
}
120+
121+
def 'should encode Symbol to BsonSymbol and decode BsonSymbol to String'() {
122+
given:
123+
def symbol = new Symbol('symbol');
124+
def doc = new BasicDBObject('symbol', symbol)
125+
126+
when:
127+
dbObjectCodec.encode(new BsonDocumentWriter(bsonDoc), doc, EncoderContext.builder().build())
128+
129+
then:
130+
bsonDoc.get('symbol') == new BsonSymbol('symbol')
131+
132+
when:
133+
def decodedSymbol = dbObjectCodec.decode(new BsonDocumentReader(bsonDoc), DecoderContext.builder().build())
134+
135+
then:
136+
decodedSymbol.get('symbol') == symbol.toString()
137+
}
118138
}

0 commit comments

Comments
 (0)