private BsonDocument marshallDocument(Object pojo) { try { return marshaller.marshall(pojo); } catch (Exception e) { String message = String.format("Unable to save object %s due to a marshalling error", pojo); throw new IllegalArgumentException(message, e); } }
private Object marshallDocument(Object parameter) { if (parameter instanceof Enum) { return marshallParameterAsPrimitive(parameter); } else { BsonDocument document = marshaller.marshall(parameter); if (hasBeenSerializedAsPrimitive(document)) { return marshallParameterAsPrimitive(parameter); } else { return document.toDBObject(); } } }
/** * The object may have been serialized to a primitive type with a custom serializer, so try again * after wrapping as an object property. We do this trick only as a falllback since it causes * Jackson to consider the parameter as "Object" and thus ignore any annotations that may exist on * its actual class. */ private Object marshallParameterAsPrimitive(Object parameter) { Map<String, Object> primitiveWrapper = Collections.singletonMap("wrapped", parameter); BsonDocument document = marshaller.marshall(primitiveWrapper); return document.toDBObject().get("wrapped"); }