diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index a09236c33..166321475 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -61,7 +61,10 @@ public class ObjectDecoder implements Decodeable { public void init(final ConvertFactory factory) { this.factory = factory; try { - if (type == Object.class) return; + if (type == Object.class) { + this.creatorConstructorMembers = null; + return; + } Class clazz = null; if (type instanceof ParameterizedType) { @@ -229,7 +232,7 @@ public class ObjectDecoder implements Decodeable { } } if (this.creatorConstructorMembers == null) { //空构造函数 - final T result = this.creator.create(); + final T result = this.creator == null ? null : this.creator.create(); boolean first = true; while (hasNext(in, first)) { DeMember member = in.readFieldName(members); @@ -270,6 +273,7 @@ public class ObjectDecoder implements Decodeable { first = false; } in.readObjectE(typeClass); + if (this.creator == null) return null; final T result = this.creator.create(constructorParams); for (int i = 0; i < oc; i++) { ((Attribute) otherParams[i][0]).set(result, otherParams[i][1]); diff --git a/src/org/redkale/convert/bson/BsonFactory.java b/src/org/redkale/convert/bson/BsonFactory.java index 4585f106f..f558686b9 100644 --- a/src/org/redkale/convert/bson/BsonFactory.java +++ b/src/org/redkale/convert/bson/BsonFactory.java @@ -36,6 +36,9 @@ public final class BsonFactory extends ConvertFactory { static final Decodeable collectionStringDecoder = instance.loadDecoder(new TypeToken>() { }.getType()); + static final Decodeable collectionObjectDecoder = instance.loadDecoder(new TypeToken>() { + }.getType()); + static final Decodeable mapStringIntegerDecoder = instance.loadDecoder(new TypeToken>() { }.getType()); @@ -45,6 +48,9 @@ public final class BsonFactory extends ConvertFactory { static final Decodeable mapStringStringDecoder = instance.loadDecoder(new TypeToken>() { }.getType()); + static final Decodeable mapStringObjectDecoder = instance.loadDecoder(new TypeToken>() { + }.getType()); + static { instance.register(Serializable.class, objectDecoder); instance.register(Serializable.class, objectEncoder); diff --git a/src/org/redkale/convert/bson/BsonReader.java b/src/org/redkale/convert/bson/BsonReader.java index df69fb74f..5cbcef63b 100644 --- a/src/org/redkale/convert/bson/BsonReader.java +++ b/src/org/redkale/convert/bson/BsonReader.java @@ -120,6 +120,9 @@ public class BsonReader extends Reader { case 29: BsonFactory.collectionStringDecoder.convertFrom(this); break; + case 30: + BsonFactory.collectionObjectDecoder.convertFrom(this); + break; case 45: BsonFactory.mapStringIntegerDecoder.convertFrom(this); break; @@ -129,6 +132,9 @@ public class BsonReader extends Reader { case 49: BsonFactory.mapStringStringDecoder.convertFrom(this); break; + case 50: + BsonFactory.mapStringObjectDecoder.convertFrom(this); + break; case 101: BoolArraySimpledCoder.instance.convertFrom(this); break; diff --git a/src/org/redkale/convert/bson/BsonWriter.java b/src/org/redkale/convert/bson/BsonWriter.java index 16633c7c1..5af414cb1 100644 --- a/src/org/redkale/convert/bson/BsonWriter.java +++ b/src/org/redkale/convert/bson/BsonWriter.java @@ -248,6 +248,8 @@ public class BsonWriter extends Writer { typeval = 26; } else if (comType == String.class) { typeval = 29; + } else if (!comType.toString().startsWith("java.lang")) { + typeval = 30; } } if (typeval == 127 && member.getEncoder() instanceof MapEncoder) { @@ -259,6 +261,8 @@ public class BsonWriter extends Writer { typeval = 46; } else if (keyType == String.class && valType == String.class) { typeval = 49; + } else if (keyType == String.class && !valType.toString().startsWith("java.lang")) { + typeval = 50; } } writeByte(typeval);