protected final static int DEFAULT_GENERATOR_FEATURES = JsonGenerator.Feature.collectDefaults();
protected final static int DEFAULT_GENERATOR_FEATURES = JsonGenerator.Feature.collectDefaults();
private int writeObject(OutputBuffer buf, T object) { OutputBufferOutputStream stream = new OutputBufferOutputStream(buf); BsonGenerator generator = new DBEncoderBsonGenerator( JsonGenerator.Feature.collectDefaults(), stream); try { objectMapper.writerWithView(view).writeValue(generator, object); // The generator buffers everything so that it can write the // number of bytes to the stream generator.close(); } catch (JsonMappingException e) { throw new MongoJsonMappingException(e); } catch (IOException e) { throw new MongoException("Error writing object out", e); } return stream.getCount(); }
/** * Test the {@link BsonGenerator#writeBinary(byte[], int, int)} method * @throws Exception if something goes wrong */ @Test public void rawBytes() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BsonGenerator gen = new BsonGenerator( JsonGenerator.Feature.collectDefaults(), 0, baos); gen.writeStartObject(); gen.writeFieldName("Test"); gen.writeBinary(new byte[] { (byte)1, (byte)2 }); gen.writeEndObject(); gen.close(); byte[] r = baos.toByteArray(); ByteArrayInputStream bais = new ByteArrayInputStream(r); BSONDecoder decoder = new BasicBSONDecoder(); BSONObject obj = decoder.readObject(bais); byte[] o = (byte[])obj.get("Test"); assertEquals(2, o.length); assertEquals((byte)1, o[0]); assertEquals((byte)2, o[1]); }
@Override public int writeObject(OutputBuffer buf, BSONObject object) { if (object instanceof JacksonDBObject) { JacksonDBObject<?> jacksonDbObject = (JacksonDBObject<?>) object; OutputBufferOutputStream stream = new OutputBufferOutputStream(buf); BsonGenerator generator = new DBEncoderBsonGenerator( JsonGenerator.Feature.collectDefaults(), stream); try { objectMapper.writerWithView(jacksonDbObject.getView()) .writeValue(generator, jacksonDbObject.getObject()); // The generator buffers everything so that it can write the // number of bytes to the stream generator.close(); } catch (JsonMappingException e) { throw new MongoJsonMappingException(e); } catch (IOException e) { throw new MongoException("Error writing object out", e); } return stream.getCount(); } else { return defaultDBEncoder.writeObject(buf, object); } } }
/** * Test if strings containing UTF-8 characters can be serialized * @throws Exception if something goes wrong */ @Test public void utf8Strings() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BsonGenerator gen = new BsonGenerator( JsonGenerator.Feature.collectDefaults(), 0, baos); gen.writeStartObject(); gen.writeFieldName("a\u20AC\u00A2\u00A2bb"); gen.writeString("a\u20AC\u00A2\u00A2bb"); gen.writeEndObject(); gen.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); BSONDecoder decoder = new BasicBSONDecoder(); BSONObject obj = decoder.readObject(bais); String s = (String)obj.get("a\u20AC\u00A2\u00A2bb"); assertEquals("a\u20AC\u00A2\u00A2bb", s); }
/** * Test the {@link BsonGenerator#writeRaw(char[], int, int)} method * @throws Exception if something goes wrong */ @Test public void rawChar() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BsonGenerator gen = new BsonGenerator( JsonGenerator.Feature.collectDefaults(), 0, baos); gen.writeStartObject(); gen.writeFieldName("Test"); gen.writeRaw(new char[] { 'a', 'b' }, 0, 2); gen.writeEndObject(); gen.close(); assertRaw(baos.toByteArray()); }
/** * Test the {@link BsonGenerator#writeString(String)} method * @throws Exception if something goes wrong */ @Test public void rawString() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BsonGenerator gen = new BsonGenerator( JsonGenerator.Feature.collectDefaults(), 0, baos); gen.writeStartObject(); gen.writeFieldName("Test"); gen.writeRaw("ab"); gen.writeEndObject(); gen.close(); assertRaw(baos.toByteArray()); }
@Override public int getFeatureMask() { return JsonGenerator.Feature.collectDefaults(); }
@Override public int getFeatureMask() { return JsonGenerator.Feature.collectDefaults(); }