This commit is contained in:
redkale
2024-10-03 01:05:12 +08:00
parent 67aa3c0609
commit 8e981e1b7e
14 changed files with 220 additions and 204 deletions

View File

@@ -6,10 +6,12 @@
package org.redkale.convert.ext;
import java.net.*;
import java.util.Arrays;
import java.util.Objects;
import org.redkale.convert.*;
import org.redkale.convert.json.*;
import org.redkale.util.StringWrapper;
import org.redkale.util.Utility;
/**
* InetAddress 的SimpledCoder实现
@@ -35,7 +37,6 @@ public class InetAddressSimpledCoder<R extends Reader, W extends Writer> extends
this.bsSimpledCoder = Objects.requireNonNull(bSimpledCoder);
}
@Override
public void convertTo(W out, InetAddress value) {
if (value == null) {
@@ -70,25 +71,38 @@ public class InetAddressSimpledCoder<R extends Reader, W extends Writer> extends
public static final InetSocketAddressSimpledCoder instance = new InetSocketAddressSimpledCoder();
protected final SimpledCoder<R, W, byte[]> bsSimpledCoder;
protected InetSocketAddressSimpledCoder() {
this.bsSimpledCoder = ByteArraySimpledCoder.instance;
}
public InetSocketAddressSimpledCoder(SimpledCoder<R, W, byte[]> bSimpledCoder) {
this.bsSimpledCoder = Objects.requireNonNull(bSimpledCoder);
}
@Override
public void convertTo(W out, InetSocketAddress value) {
if (value == null) {
out.writeNull();
return;
}
ByteArraySimpledCoder.instance.convertTo(out, value.getAddress().getAddress());
out.writeInt(value.getPort());
int port = value.getPort();
byte[] bs = value.getAddress().getAddress();
bs = Utility.append(bs, (byte) ((port & 0xFF00) >> 8), (byte) (port & 0xFF));
bsSimpledCoder.convertTo(out, bs);
}
@Override
public InetSocketAddress convertFrom(R in) {
byte[] bytes = ByteArraySimpledCoder.instance.convertFrom(in);
byte[] bytes = bsSimpledCoder.convertFrom(in);
if (bytes == null) {
return null;
}
int port = in.readInt();
byte[] addr = Arrays.copyOf(bytes, bytes.length - 2);
int port = ((0xff00 & (bytes[bytes.length - 2] << 8)) | (0xff & bytes[bytes.length - 1]));
try {
return new InetSocketAddress(InetAddress.getByAddress(bytes), port);
return new InetSocketAddress(InetAddress.getByAddress(addr), port);
} catch (Exception ex) {
return null;
}

View File

@@ -27,24 +27,24 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T>
}
@Override
public void convertTo(ProtobufWriter out, @Nonnull EnMember member, T[] value) {
public void convertTo(final ProtobufWriter out, @Nonnull EnMember member, T[] value) {
this.checkInited();
if (value == null || value.length < 1) {
return;
}
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
out.writeArrayB(value.length, itemEncoder, value);
boolean first = true;
for (T item : value) {
out.writeField(member);
if (!first) {
out.writeField(member);
}
if (item == null) {
out.writeLength(0);
} else if (componentSimpled) {
itemEncoder.convertTo(out, member, item);
} else {
ProtobufWriter tmp = out.pollChild();
itemEncoder.convertTo(tmp, member, item);
out.offerChild(tmp);
itemEncoder.convertTo(out, member, item);
}
first = false;
}
out.writeArrayE();
}

View File

@@ -45,6 +45,7 @@ import org.redkale.convert.ext.Uint128SimpledCoder;
import org.redkale.util.*;
/**
* SimpledCoder子类convertTo方法中都不会执行writeField/writeTag
*
* @author zhangjx
*/
@@ -798,13 +799,17 @@ public abstract class ProtobufCoders {
public static final ProtobufInetSocketAddressSimpledCoder instance =
new ProtobufInetSocketAddressSimpledCoder();
public ProtobufInetSocketAddressSimpledCoder() {
super(ProtobufByteArraySimpledCoder.instance);
}
@Override
public int computeSize(ProtobufWriter out, int tagSize, InetSocketAddress value) {
if (value == null) {
return 0;
}
byte[] bs = value.getAddress().getAddress();
return ProtobufByteArraySimpledCoder.instance.computeSize(out, tagSize, bs);
return bs.length + 2; // port固定2字节
}
@Override

View File

@@ -27,24 +27,24 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWrit
}
@Override
public void convertTo(ProtobufWriter out, EnMember member, Collection<T> value) {
public void convertTo(final ProtobufWriter out, EnMember member, Collection<T> value) {
this.checkInited();
if (Utility.isEmpty(value)) {
return;
}
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
out.writeArrayB(value.size(), itemEncoder, value);
boolean first = true;
for (T item : value) {
out.writeField(member);
if (!first) {
out.writeField(member);
}
if (item == null) {
out.writeLength(0);
} else if (componentSimpled) {
itemEncoder.convertTo(out, member, item);
} else {
ProtobufWriter tmp = out.pollChild();
itemEncoder.convertTo(tmp, member, item);
out.offerChild(tmp);
itemEncoder.convertTo(out, member, item);
}
first = false;
}
out.writeArrayE();
}

View File

@@ -49,9 +49,9 @@ public abstract class ProtobufDynEncoder<T> extends ProtobufObjectEncoder<T> {
protected static ProtobufDynEncoder generateDyncEncoder(final ProtobufFactory factory, final Class clazz) {
final ObjectEncoder selfObjEncoder = factory.createObjectEncoder(clazz);
selfObjEncoder.init(factory); // 必须执行初始化EnMember内部信息
if (((ProtobufObjectEncoder) selfObjEncoder).requiredMemberSize()) { // 嵌套对象
return null;
}
// if (((ProtobufObjectEncoder) selfObjEncoder).requiredMemberSize()) { // 嵌套对象
// return null;
// }
final Map<String, SimpledCoder> simpledCoders = new HashMap<>();
final Map<String, EnMember> otherMembers = new HashMap<>();
StringBuilder elementb = new StringBuilder();
@@ -159,26 +159,15 @@ public abstract class ProtobufDynEncoder<T> extends ProtobufObjectEncoder<T> {
mv.visitLineNumber(33, ifLabel);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
// if (parentMember != null) out0.writeField(parentMember);
mv.visitVarInsn(ALOAD, 2); // parentMember
Label ifMemberLabel = new Label();
mv.visitJumpInsn(IFNULL, ifMemberLabel);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeField", "(" + enMemberDesc + ")V", false);
mv.visitLabel(ifMemberLabel);
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
// ProtobufWriter out = objectWriter(out0, parentMember, value);
// ProtobufWriter out = acceptWriter(out0, member);
mv.visitVarInsn(ALOAD, 0); // this
mv.visitVarInsn(ALOAD, 1); // out0
mv.visitVarInsn(ALOAD, 2); // member
mv.visitVarInsn(ALOAD, 3); // value
mv.visitMethodInsn(
INVOKEVIRTUAL,
newDynName,
"objectWriter",
"(" + pbwriterDesc + enMemberDesc + objectDesc + ")" + pbwriterDesc,
"acceptWriter",
"(" + pbwriterDesc + enMemberDesc + ")" + pbwriterDesc,
false);
mv.visitVarInsn(ASTORE, 4);

View File

@@ -19,6 +19,11 @@ import org.redkale.convert.Writer;
*/
public interface ProtobufEncodeable<W extends Writer, T> extends Encodeable<W, T> {
// 序列化
default void convertTo(W out, EnMember member, T value) {
convertTo(out, value);
}
// 计算内容长度
public int computeSize(ProtobufWriter out, int tagSize, T value);
@@ -27,11 +32,6 @@ public interface ProtobufEncodeable<W extends Writer, T> extends Encodeable<W, T
return false;
}
// 序列化
default void convertTo(W out, EnMember member, T value) {
convertTo(out, value);
}
// 获取数据类型枚举
public ProtobufTypeEnum typeEnum();

View File

@@ -7,7 +7,10 @@ package org.redkale.convert.pb;
import java.lang.reflect.Type;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiFunction;
import org.redkale.annotation.Nonnull;
import org.redkale.convert.*;
import org.redkale.util.Attribute;
import org.redkale.util.TypeToken;
@@ -24,6 +27,8 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
private final EnMember keyMember;
private final EnMember valueMember;
private final boolean keySimpled;
private final boolean valueSimpled;
public ProtobufMapEncoder(ConvertFactory factory, Type type) {
super(factory, type);
@@ -33,10 +38,12 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
setTag(valueMember, ProtobufFactory.getTag(2, ((ProtobufEncodeable) valueEncoder).typeEnum()));
setTagSize(keyMember, ProtobufFactory.computeSInt32SizeNoTag(keyMember.getTag()));
setTagSize(valueMember, ProtobufFactory.computeSInt32SizeNoTag(valueMember.getTag()));
this.keySimpled = keyEncoder instanceof SimpledCoder;
this.valueSimpled = valueEncoder instanceof SimpledCoder;
}
@Override
public void convertTo(ProtobufWriter out, EnMember member, Map<K, V> value) {
public void convertTo(final ProtobufWriter out, @Nonnull EnMember member, Map<K, V> value) {
this.checkInited();
final Map<K, V> values = value;
if (Utility.isEmpty(value)) {
@@ -47,40 +54,71 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V>
BiFunction<K, V, V> mapFieldFunc = out.mapFieldFunc();
ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder;
ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder;
boolean keySimpled = kencoder instanceof SimpledCoder;
boolean valSimpled = vencoder instanceof SimpledCoder;
out.writeMapB(values.size(), kencoder, vencoder, value);
AtomicBoolean first = new AtomicBoolean(true);
values.forEach((key, val0) -> {
if (ignoreColumns == null || !ignoreColumns.contains(key)) {
V val = mapFieldFunc == null ? val0 : mapFieldFunc.apply(key, val0);
if (val != null) {
if (!first.get()) {
out.writeField(member);
ProtobufWriter tmp = out.pollChild();
if (keySimpled) {
tmp.writeField(keyMember);
kencoder.convertTo(tmp, key);
} else {
kencoder.convertTo(tmp, keyMember, key);
}
if (valSimpled) {
tmp.writeField(valueMember);
vencoder.convertTo(tmp, val);
} else {
vencoder.convertTo(tmp, valueMember, val);
}
out.offerChild(tmp);
}
ProtobufWriter subout = out.pollChild();
subout.writeTag(keyMember.getTag());
if (key == null) {
subout.writeLength(0);
} else {
kencoder.convertTo(subout, keyMember, key);
}
subout.writeTag(valueMember.getTag());
if (val == null) {
subout.writeLength(0);
} else {
vencoder.convertTo(subout, valueMember, val);
}
out.offerChild(subout);
first.set(false);
}
});
out.writeMapE();
}
protected ProtobufWriter acceptWriter(ProtobufWriter out, EnMember member) {
return member != null ? out.pollChild() : out;
}
protected void offerWriter(ProtobufWriter parent, ProtobufWriter out) {
if (parent != out) {
parent.offerChild(out);
}
}
public int computeSize(ProtobufWriter out, K key, V val) {
ProtobufEncodeable kencoder = (ProtobufEncodeable) this.keyEncoder;
ProtobufEncodeable vencoder = (ProtobufEncodeable) this.valueEncoder;
int keySize = kencoder.computeSize(out, keyMember.getTagSize(), key);
int valSize = vencoder.computeSize(out, valueMember.getTagSize(), val);
return (keySimpled ? (keyMember.getTagSize() + keySize) : keySize)
+ (valueSimpled ? (valueMember.getTagSize() + valSize) : valSize);
}
@Override
public int computeSize(ProtobufWriter out, int tagLen, Map<K, V> value) {
public int computeSize(ProtobufWriter out, int tagSize, Map<K, V> value) {
if (Utility.isEmpty(value)) {
return 0;
}
return 0;
Set<String> ignoreColumns = this.ignoreMapColumns;
BiFunction<K, V, V> mapFieldFunc = out.mapFieldFunc();
AtomicInteger size = new AtomicInteger();
value.forEach((key, val0) -> {
if (ignoreColumns == null || !ignoreColumns.contains(key)) {
V val = mapFieldFunc == null ? val0 : mapFieldFunc.apply(key, val0);
if (val != null) {
size.addAndGet(tagSize);
size.addAndGet(computeSize(out, key, val));
}
}
});
return size.get();
}
@Override

View File

@@ -7,6 +7,7 @@ package org.redkale.convert.pb;
import java.lang.reflect.Type;
import org.redkale.annotation.ClassDepends;
import org.redkale.annotation.Nullable;
import org.redkale.convert.*;
import org.redkale.util.Attribute;
import org.redkale.util.Utility;
@@ -30,30 +31,28 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T>
}
@Override
public void convertTo(ProtobufWriter out, EnMember parentMember, T value) {
public void convertTo(ProtobufWriter out, @Nullable EnMember member, T value) {
this.checkInited();
if (value == null) {
out.writeObjectNull(null);
return;
}
if (parentMember != null) {
out.writeField(parentMember);
}
ProtobufWriter objout = objectWriter(out, parentMember, value);
objout.writeObjectB(value);
ProtobufWriter subout = acceptWriter(out, member);
subout.writeObjectB(value);
int maxPosition = 0;
for (EnMember member : members) {
maxPosition = member.getPosition();
objout.writeObjectField(member, value);
for (EnMember fieldMember : members) {
maxPosition = fieldMember.getPosition();
subout.writeObjectField(fieldMember, value);
}
if (objout.objExtFunc() != null) {
ConvertField[] extFields = objout.objExtFunc().apply(value);
if (subout.objExtFunc() != null) {
ConvertField[] extFields = subout.objExtFunc().apply(value);
if (extFields != null) {
Encodeable<ProtobufWriter, ?> anyEncoder = factory.getAnyEncoder();
for (ConvertField en : extFields) {
if (en != null) {
maxPosition++;
objout.writeObjectField(
subout.writeObjectField(
en.getName(),
en.getType(),
Math.max(en.getPosition(), maxPosition),
@@ -63,13 +62,13 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T>
}
}
}
objout.writeObjectE(value);
offerWriter(out, objout);
subout.writeObjectE(value);
offerWriter(out, subout);
}
@ClassDepends
protected ProtobufWriter objectWriter(ProtobufWriter out, EnMember parentMember, T value) {
return parentMember != null ? out.pollChild() : out;
protected ProtobufWriter acceptWriter(ProtobufWriter out, EnMember member) {
return member != null ? out.pollChild() : out;
}
@ClassDepends
@@ -87,7 +86,8 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T>
}
Attribute attr = member.getAttribute();
boolean enumtostring = ((ProtobufFactory) factory).enumtostring;
this.memberSizeRequired |= ((ProtobufEncodeable) member.getEncoder()).requireSize();
this.memberSizeRequired |= !(member.getEncoder() instanceof SimpledCoder)
&& ((ProtobufEncodeable) member.getEncoder()).requireSize();
setTag(member, ProtobufFactory.getTag(attr.field(), attr.genericType(), member.getPosition(), enumtostring));
setTagSize(member, ProtobufFactory.computeSInt32SizeNoTag(member.getTag()));
}
@@ -107,7 +107,7 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T>
}
public boolean requiredMemberSize() {
return memberSizeRequired;
return true||memberSizeRequired;
}
@Override

View File

@@ -7,6 +7,7 @@ package org.redkale.convert.pb;
import java.lang.reflect.Type;
import java.util.stream.Stream;
import org.redkale.annotation.Nonnull;
import org.redkale.convert.*;
/**
@@ -26,7 +27,7 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T>
}
@Override
public void convertTo(ProtobufWriter out, EnMember member, Stream<T> value) {
public void convertTo(final ProtobufWriter out, @Nonnull EnMember member, Stream<T> value) {
this.checkInited();
Object[] array = value == null ? null : value.toArray();
if (array == null || array.length < 1) {
@@ -34,17 +35,17 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T>
}
ProtobufEncodeable itemEncoder = (ProtobufEncodeable) this.componentEncoder;
out.writeArrayB(array.length, itemEncoder, array);
boolean first = true;
for (Object item : array) {
out.writeField(member);
if (!first) {
out.writeField(member);
}
if (item == null) {
out.writeLength(0);
} else if (componentSimpled) {
itemEncoder.convertTo(out, member, item);
} else {
ProtobufWriter tmp = out.pollChild();
itemEncoder.convertTo(tmp, member, item);
out.offerChild(tmp);
itemEncoder.convertTo(out, member, item);
}
first = false;
}
out.writeArrayE();
}

View File

@@ -437,7 +437,12 @@ public class ProtobufWriter extends Writer implements ByteTuple {
@Override
public final void writeString(String value) {
byte[] bs = Utility.isLatin1(value) ? Utility.latin1ByteArray(value) : value.getBytes(StandardCharsets.UTF_8);
byte[] bs;
if (Utility.isLatin1(value)) {
bs = Utility.latin1ByteArray(value);
} else {
bs = value.getBytes(StandardCharsets.UTF_8);
}
writeLength(bs.length);
writeTo(bs);
}
@@ -1186,12 +1191,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
return;
}
ProtobufEncodeable encoder = (ProtobufEncodeable) member.getEncoder();
if (encoder instanceof SimpledCoder) {
this.writeField(member);
encoder.convertTo(this, value);
} else {
encoder.convertTo(this, member, value);
}
this.writeField(member);
encoder.convertTo(this, member, value);
}
@ClassDepends

View File

@@ -4941,6 +4941,9 @@ public final class Utility {
if (value == null) {
return -1;
}
if (value.isEmpty()) {
return 0;
}
char c;
int size = 0;
final String str = value;

View File

@@ -26,7 +26,7 @@ public class RequiredBeanTest {
@Test
public void run() throws Exception {
RequiredBean bean = RequiredBean.create();
RequiredBean bean = createRequiredBean();
ProtobufConvert convert = ProtobufConvert.root();
byte[] bytes = convert.convertTo(bean);
System.out.println("序列化0: 26.[0x08,0x0c,0x12,0x03,0x61,0x61,0x61,0x12,0x03,0x62,0x62,0x62,"
@@ -52,83 +52,36 @@ public class RequiredBeanTest {
Assertions.assertEquals(jsons1, jsons2);
}
public static RequiredBean createRequiredBean() {
RequiredBean bean = new RequiredBean();
bean.id = 6;
bean.strs1 = new String[] {"aaa", "bbb"};
bean.strs2 = List.of("ccc", "ddd");
bean.zbig1 = List.of(new AtomicInteger(1), new AtomicInteger(2));
return bean;
}
public static class RequiredArray {
@ConvertColumn(index = 1)
private RequiredBean[] beans;
public RequiredBean[] beans;
@ConvertColumn(index = 2)
private int id;
public RequiredBean[] getBeans() {
return beans;
}
public void setBeans(RequiredBean[] beans) {
this.beans = beans;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int id;
}
public static class RequiredBean {
public static RequiredBean create() {
RequiredBean bean = new RequiredBean();
bean.id = 6;
bean.strs1 = new String[] {"aaa", "bbb"};
bean.strs2 = List.of("ccc", "ddd");
bean.zbig1 = List.of(new AtomicInteger(1), new AtomicInteger(2));
return bean;
}
@ConvertColumn(index = 1)
private int id;
public int id;
@ConvertColumn(index = 2)
private String[] strs1;
public String[] strs1;
@ConvertColumn(index = 3)
private List<String> strs2;
public List<String> strs2;
@ConvertColumn(index = 4)
private List<AtomicInteger> zbig1;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String[] getStrs1() {
return strs1;
}
public void setStrs1(String[] strs1) {
this.strs1 = strs1;
}
public List<String> getStrs2() {
return strs2;
}
public void setStrs2(List<String> strs2) {
this.strs2 = strs2;
}
public List<AtomicInteger> getZbig1() {
return zbig1;
}
public void setZbig1(List<AtomicInteger> zbig1) {
this.zbig1 = zbig1;
}
public List<AtomicInteger> zbig1;
}
}

View File

@@ -26,60 +26,60 @@ public class UserBeanProtoDynEncoder extends ProtobufDynEncoder<UserBean> {
}
@Override
public void convertTo(ProtobufWriter out0, EnMember parentMember, UserBean value) {
public void convertTo(ProtobufWriter out, EnMember parentMember, UserBean value) {
if (value == null) {
return;
}
ProtobufWriter out = objectWriter(out0, parentMember, value);
out.writeObjectB(value);
out.writeFieldValue(1, value.getSeqid());
out.writeFieldValue(2, value.getName());
out.writeFieldValue(3, value.getImg());
out.writeFieldValue(4, numberSimpledCoder, value.getNumber());
out.writeFieldValue(5, scaleSimpledCoder, value.getScale());
out.writeFieldValue(6, value.getBit());
ProtobufWriter subout = acceptWriter(out, parentMember);
subout.writeObjectB(value);
subout.writeFieldValue(1, value.getSeqid());
subout.writeFieldValue(2, value.getName());
subout.writeFieldValue(3, value.getImg());
subout.writeFieldValue(4, numberSimpledCoder, value.getNumber());
subout.writeFieldValue(5, scaleSimpledCoder, value.getScale());
subout.writeFieldValue(6, value.getBit());
out.writeFieldValue(7, value.isFlag());
out.writeFieldValue(8, value.getStatus());
out.writeFieldValue(9, value.getId());
out.writeFieldValue(10, value.getCreateTime());
out.writeFieldValue(11, value.getPoint());
out.writeFieldValue(12, value.getMoney());
subout.writeFieldValue(7, value.isFlag());
subout.writeFieldValue(8, value.getStatus());
subout.writeFieldValue(9, value.getId());
subout.writeFieldValue(10, value.getCreateTime());
subout.writeFieldValue(11, value.getPoint());
subout.writeFieldValue(12, value.getMoney());
out.writeFieldValue(13, value.getFlag2());
out.writeFieldValue(14, value.getStatus2());
out.writeFieldValue(15, value.getId2());
out.writeFieldValue(16, value.getCreateTime2());
out.writeFieldValue(17, value.getPoint2());
out.writeFieldValue(18, value.getMoney2());
subout.writeFieldValue(13, value.getFlag2());
subout.writeFieldValue(14, value.getStatus2());
subout.writeFieldValue(15, value.getId2());
subout.writeFieldValue(16, value.getCreateTime2());
subout.writeFieldValue(17, value.getPoint2());
subout.writeFieldValue(18, value.getMoney2());
out.writeFieldValue(19, value.id3);
out.writeFieldValue(20, value.createTime3);
out.writeFieldValue(21, value.point3);
out.writeFieldValue(22, value.money3);
out.writeFieldValue(23, value.bit3);
subout.writeFieldValue(19, value.id3);
subout.writeFieldValue(20, value.createTime3);
subout.writeFieldValue(21, value.point3);
subout.writeFieldValue(22, value.money3);
subout.writeFieldValue(23, value.bit3);
out.writeFieldValue(19, value.getId4());
out.writeFieldValue(20, value.getCreateTime4());
out.writeFieldValue(21, value.getPoint4());
out.writeFieldValue(22, value.getMoney4());
out.writeFieldValue(23, value.getBit4());
subout.writeFieldValue(19, value.getId4());
subout.writeFieldValue(20, value.getCreateTime4());
subout.writeFieldValue(21, value.getPoint4());
subout.writeFieldValue(22, value.getMoney4());
subout.writeFieldValue(23, value.getBit4());
out.writeFieldValue(19, value.getId5());
out.writeFieldValue(20, value.getCreateTime5());
out.writeFieldValue(21, value.getPoint5());
out.writeFieldValue(22, value.getMoney5());
out.writeFieldValue(23, value.getBit5());
subout.writeFieldValue(19, value.getId5());
subout.writeFieldValue(20, value.getCreateTime5());
subout.writeFieldValue(21, value.getPoint5());
subout.writeFieldValue(22, value.getMoney5());
subout.writeFieldValue(23, value.getBit5());
out.writeFieldIntsValue(19, value.getId6());
out.writeFieldLongsValue(20, value.getCreateTime6());
out.writeFieldFloatsValue(21, value.getPoint6());
out.writeFieldDoublesValue(22, value.getMoney6());
out.writeFieldBytesValue(23, value.getBit6());
out.writeFieldStringsValue(23, value.getStrs());
subout.writeFieldIntsValue(19, value.getId6());
subout.writeFieldLongsValue(20, value.getCreateTime6());
subout.writeFieldFloatsValue(21, value.getPoint6());
subout.writeFieldDoublesValue(22, value.getMoney6());
subout.writeFieldBytesValue(23, value.getBit6());
subout.writeFieldStringsValue(23, value.getStrs());
out.writeObjectField(mapEnMember, value);
out.writeObjectE(value);
offerWriter(out0, out);
subout.writeObjectField(mapEnMember, value);
subout.writeObjectE(value);
offerWriter(out, subout);
}
}

View File

@@ -4,6 +4,8 @@
*/
package org.redkale.test.convert.pb;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.redkale.convert.Encodeable;
@@ -19,10 +21,20 @@ public class UserDynTest {
public static void main(String[] args) throws Throwable {
UserDynTest test = new UserDynTest();
test.run1();
test.run2();
}
@Test
public void run1() throws Exception {
ProtobufFactory factory = ProtobufFactory.root();
Method method = ProtobufFactory.class.getDeclaredMethod("createObjectEncoder", Type.class);
method.setAccessible(true);
Encodeable encoder = (Encodeable) method.invoke(factory, UserBean.class);
Assertions.assertTrue(!ProtobufDynEncoder.class.isAssignableFrom(encoder.getClass()));
}
@Test
public void run2() throws Exception {
ProtobufFactory factory = ProtobufFactory.root();
Encodeable encoder = factory.loadEncoder(UserBean.class);
Assertions.assertTrue(ProtobufDynEncoder.class.isAssignableFrom(encoder.getClass()));