/** * Creates a new instance with a default codec registry that uses the {@link BsonValueCodecProvider}. */ public BsonValueCodec() { this(fromProviders(new BsonValueCodecProvider())); }
/** * This method may be overridden to change the behavior of reading the current value from the given {@code BsonReader}. It is required * that the value be fully consumed before returning. * * @param reader the read to read the value from * @param decoderContext the decoder context * @return the non-null value read from the reader */ protected BsonValue readValue(final BsonReader reader, final DecoderContext decoderContext) { return codecRegistry.get(BsonValueCodecProvider.getClassForBsonType(reader.getCurrentBsonType())).decode(reader, decoderContext); }
private void addCodecs() { addCodec(new BsonNullCodec()); addCodec(new BsonBinaryCodec()); addCodec(new BsonBooleanCodec()); addCodec(new BsonDateTimeCodec()); addCodec(new BsonDBPointerCodec()); addCodec(new BsonDoubleCodec()); addCodec(new BsonInt32Codec()); addCodec(new BsonInt64Codec()); addCodec(new BsonDecimal128Codec()); addCodec(new BsonMinKeyCodec()); addCodec(new BsonMaxKeyCodec()); addCodec(new BsonJavaScriptCodec()); addCodec(new BsonObjectIdCodec()); addCodec(new BsonRegularExpressionCodec()); addCodec(new BsonStringCodec()); addCodec(new BsonSymbolCodec()); addCodec(new BsonTimestampCodec()); addCodec(new BsonUndefinedCodec()); }
/** * Construct a new instance with the default codec for each BSON type. */ public BsonValueCodecProvider() { addCodecs(); }
/** * Creates a new instance initialised with the given codec registry. * * @param codecRegistry the {@code CodecRegistry} to use to look up the codecs for encoding and decoding to/from BSON */ public BsonDocumentCodec(final CodecRegistry codecRegistry) { if (codecRegistry == null) { throw new IllegalArgumentException("Codec registry can not be null"); } this.codecRegistry = codecRegistry; this.bsonTypeCodecMap = new BsonTypeCodecMap(getBsonTypeClassMap(), codecRegistry); }
ChangeStreamDocumentCodec(final Class<TResult> fullDocumentClass, final CodecRegistry codecRegistry) { ClassModelBuilder<ChangeStreamDocument> classModelBuilder = ClassModel.builder(ChangeStreamDocument.class); ((PropertyModelBuilder<TResult>) classModelBuilder.getProperty("fullDocument")).codec(codecRegistry.get(fullDocumentClass)); ((PropertyModelBuilder<OperationType>) classModelBuilder.getProperty("operationType")).codec(OPERATION_TYPE_CODEC); ClassModel<ChangeStreamDocument> changeStreamDocumentClassModel = classModelBuilder.build(); PojoCodecProvider provider = PojoCodecProvider.builder() .register(MongoNamespace.class) .register(UpdateDescription.class) .register(changeStreamDocumentClassModel) .build(); CodecRegistry registry = fromRegistries(fromProviders(provider, new BsonValueCodecProvider()), codecRegistry); this.codec = (Codec<ChangeStreamDocument<TResult>>) (Codec<? extends ChangeStreamDocument>) registry.get(ChangeStreamDocument.class); }
@Override public BsonValue decode(final BsonReader reader, final DecoderContext decoderContext) { return codecRegistry.get(BsonValueCodecProvider.getClassForBsonType(reader.getCurrentBsonType())).decode(reader, decoderContext); }
final String JSON_DATA = "[{\"objA\":{\"foo\":1}}," + "{\"objB\":{\"bar\":2}}]"; final CodecRegistry codecRegistry = CodecRegistries.fromProviders(asList(new ValueCodecProvider(), new BsonValueCodecProvider(), new DocumentCodecProvider())); JsonReader reader = new JsonReader(JSON_DATA); BsonArrayCodec arrayReader = new BsonArrayCodec(codecRegistry); BsonArray docArray = arrayReader.decode(reader, DecoderContext.builder().build()); for (BsonValue doc : docArray.getValues()) { System.out.println(doc); }
private BsonValue deserializeBsonValue(final BsonReader bsonReader) { return REGISTRY.get(getClassForBsonType(bsonReader.getCurrentBsonType())).decode(bsonReader, DecoderContext.builder().build()); }
Arrays.asList( new ValueCodecProvider(), new BsonValueCodecProvider(), new DocumentCodecProvider())); JsonReader reader = new JsonReader(fongoData);
private static BsonValue getField(final BsonReader bsonReader, final String fieldName) { bsonReader.readStartDocument(); while (bsonReader.readBsonType() != BsonType.END_OF_DOCUMENT) { if (bsonReader.readName().equals(fieldName)) { return REGISTRY.get(getClassForBsonType(bsonReader.getCurrentBsonType())).decode(bsonReader, DecoderContext.builder().build()); } bsonReader.skipValue(); } bsonReader.readEndDocument(); return null; }
ChangeStreamDocumentCodec(final Class<TResult> fullDocumentClass, final CodecRegistry codecRegistry) { ClassModelBuilder<ChangeStreamDocument> classModelBuilder = ClassModel.builder(ChangeStreamDocument.class); ((PropertyModelBuilder<TResult>) classModelBuilder.getProperty("fullDocument")).codec(codecRegistry.get(fullDocumentClass)); ((PropertyModelBuilder<OperationType>) classModelBuilder.getProperty("operationType")).codec(OPERATION_TYPE_CODEC); ClassModel<ChangeStreamDocument> changeStreamDocumentClassModel = classModelBuilder.build(); PojoCodecProvider provider = PojoCodecProvider.builder() .register(MongoNamespace.class) .register(UpdateDescription.class) .register(changeStreamDocumentClassModel) .build(); CodecRegistry registry = fromRegistries(fromProviders(provider, new BsonValueCodecProvider()), codecRegistry); this.codec = (Codec<ChangeStreamDocument<TResult>>) (Codec<? extends ChangeStreamDocument>) registry.get(ChangeStreamDocument.class); }
static BsonValue decode(final byte[] bytes, final BsonBinaryReader bsonReader) { if (bsonReader.getCurrentBsonType() == BsonType.DOCUMENT || bsonReader.getCurrentBsonType() == BsonType.ARRAY) { int position = bsonReader.getBsonInput().getPosition(); BsonInputMark mark = bsonReader.getBsonInput().getMark(4); int size = bsonReader.getBsonInput().readInt32(); mark.reset(); bsonReader.skipValue(); if (bsonReader.getCurrentBsonType() == BsonType.DOCUMENT) { return new RawBsonDocument(bytes, position, size); } else { return new RawBsonArray(bytes, position, size); } } else { return REGISTRY.get(getClassForBsonType(bsonReader.getCurrentBsonType())).decode(bsonReader, DecoderContext.builder().build()); } }
private BsonValue deserializeBsonValue(final BsonReader bsonReader) { return REGISTRY.get(getClassForBsonType(bsonReader.getCurrentBsonType())).decode(bsonReader, DecoderContext.builder().build()); }
private static BsonValue getField(final BsonReader bsonReader, final String fieldName) { bsonReader.readStartDocument(); while (bsonReader.readBsonType() != BsonType.END_OF_DOCUMENT) { if (bsonReader.readName().equals(fieldName)) { return REGISTRY.get(getClassForBsonType(bsonReader.getCurrentBsonType())).decode(bsonReader, DecoderContext.builder().build()); } bsonReader.skipValue(); } bsonReader.readEndDocument(); return null; }