/** * Construct an instance. * * @param bsonOutput the output to write to * @param validator the field name validator to apply */ public BsonBinaryWriter(final BsonOutput bsonOutput, final FieldNameValidator validator) { this(new BsonWriterSettings(), new BsonBinaryWriterSettings(), bsonOutput, validator); }
@Override public void writeStartDocument() { checkPreconditions("writeStartDocument", State.INITIAL, State.VALUE, State.SCOPE_DOCUMENT, State.DONE); if (context != null && context.name != null) { fieldNameValidatorStack.push(fieldNameValidatorStack.peek().getValidatorForField(getName())); } serializationDepth++; if (serializationDepth > settings.getMaxSerializationDepth()) { throw new BsonSerializationException("Maximum serialization depth exceeded (does the object being " + "serialized have a circular reference?)."); } doWriteStartDocument(); setState(State.NAME); }
@Override public void writeStartArray() { checkPreconditions("writeStartArray", State.VALUE); if (context != null && context.name != null) { fieldNameValidatorStack.push(fieldNameValidatorStack.peek().getValidatorForField(getName())); } serializationDepth++; if (serializationDepth > settings.getMaxSerializationDepth()) { throw new BsonSerializationException("Maximum serialization depth exceeded (does the object being " + "serialized have a circular reference?)."); } doWriteStartArray(); setState(State.VALUE); }
/** * Construct an instance. * * @param bsonOutput the output to write to */ public BsonBinaryWriter(final BsonOutput bsonOutput) { this(new BsonWriterSettings(), new BsonBinaryWriterSettings(), bsonOutput); }
/** * Construct a new instance. * * @param document the document to write to */ public BsonDocumentWriter(final BsonDocument document) { super(new BsonWriterSettings()); this.document = document; setContext(new Context()); }
@SuppressWarnings("unchecked") private <T> void addDocument(final T obj, final Encoder<T> encoder, final EncoderContext encoderContext, final BsonOutput bsonOutput, final FieldNameValidator validator, final int maxDocumentSize, final List<BsonElement> extraElements) { BsonBinaryWriter bsonBinaryWriter = new BsonBinaryWriter(new BsonWriterSettings(), new BsonBinaryWriterSettings(maxDocumentSize), bsonOutput, validator); BsonWriter bsonWriter = extraElements == null ? bsonBinaryWriter : new ElementExtendingBsonWriter(bsonBinaryWriter, extraElements); encoder.encode(bsonWriter, obj, encoderContext); } }
@Override public int decode(final byte[] bytes, final BSONCallback callback) { BsonBinaryReader reader = new BsonBinaryReader(new ByteBufferBsonInput(new ByteBufNIO(ByteBuffer.wrap(bytes)))); try { BsonWriter writer = new BSONCallbackAdapter(new BsonWriterSettings(), callback); writer.pipe(reader); return reader.getBsonInput().getPosition(); //TODO check this. } finally { reader.close(); } }
@SuppressWarnings("unchecked") private <T> void addDocument(final T obj, final Encoder<T> encoder, final EncoderContext encoderContext, final BsonOutput bsonOutput, final FieldNameValidator validator, final int maxDocumentSize, final List<BsonElement> extraElements) { BsonBinaryWriter bsonBinaryWriter = new BsonBinaryWriter(new BsonWriterSettings(), new BsonBinaryWriterSettings(maxDocumentSize), bsonOutput, validator); BsonWriter bsonWriter = extraElements == null ? bsonBinaryWriter : new ElementExtendingBsonWriter(bsonBinaryWriter, extraElements); encoder.encode(bsonWriter, obj, encoderContext); } }