From 7c901731bce8f532d8f59748089996d825dddd7e Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Mon, 19 Nov 2018 15:32:24 +0800 Subject: [PATCH] =?UTF-8?q?Bson=E7=9A=84skipValue=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=83=A8=E5=88=86=E5=B8=B8=E8=A7=84Collectio?= =?UTF-8?q?n=E3=80=81Map=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/convert/ObjectDecoder.java | 8 ++++++-- src/org/redkale/convert/bson/BsonFactory.java | 6 ++++++ src/org/redkale/convert/bson/BsonReader.java | 6 ++++++ src/org/redkale/convert/bson/BsonWriter.java | 4 ++++ 4 files changed, 22 insertions(+), 2 deletions(-) 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);