Skip to content

Commit e3ea044

Browse files
committed
Update BitSet problem
1 parent 469a257 commit e3ea044

4 files changed

Lines changed: 20 additions & 66 deletions

File tree

remoting/src/main/java/org/apache/rocketmq/remoting/protocol/BitSetCodec.java renamed to remoting/src/main/java/org/apache/rocketmq/remoting/protocol/BitSetSerializerDeserializer.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,37 @@
1616
*/
1717
package org.apache.rocketmq.remoting.protocol;
1818

19-
import com.alibaba.fastjson2.JSONFactory;
2019
import com.alibaba.fastjson2.JSONReader;
2120
import com.alibaba.fastjson2.JSONWriter;
2221
import com.alibaba.fastjson2.reader.ObjectReader;
2322
import com.alibaba.fastjson2.writer.ObjectWriter;
2423

2524
import java.lang.reflect.Type;
25+
import java.util.Base64;
2626
import java.util.BitSet;
2727

28-
public class BitSetCodec implements ObjectReader<BitSetWrapper>, ObjectWriter<BitSetWrapper> {
29-
30-
static {
31-
JSONFactory.getDefaultObjectWriterProvider().register(BitSetWrapper.class, new BitSetCodec());
32-
JSONFactory.getDefaultObjectReaderProvider().register(BitSetWrapper.class, new BitSetCodec());
33-
}
28+
public class BitSetSerializerDeserializer implements ObjectReader<BitSet>, ObjectWriter<BitSet> {
3429

3530
@Override
3631
public void write(JSONWriter writer, Object object, Object fieldName, Type fieldType, long features) {
3732
if (object == null) {
38-
writer.writeNull();
33+
writer.writeBase64(null);
3934
} else {
40-
writer.writeBinary(((BitSetWrapper) object).getValue().toByteArray());
35+
writer.writeBase64(((BitSet) object).toByteArray());
4136
}
4237
}
4338

4439
@Override
45-
public BitSetWrapper readObject(JSONReader reader, Type fieldType, Object fieldName, long features) {
46-
byte[] bytes = reader.readBinary();
47-
if (bytes != null) {
48-
return new BitSetWrapper(BitSet.valueOf(bytes));
40+
public BitSet readObject(JSONReader reader, Type fieldType, Object fieldName, long features) {
41+
if (reader.nextIfNull()) {
42+
return null;
43+
}
44+
String base64 = reader.readString();
45+
if (base64 == null || base64.isEmpty()) {
46+
return null;
4947
}
50-
return null;
48+
byte[] bytes = Base64.getDecoder().decode(base64);
49+
return BitSet.valueOf(bytes);
5150
}
5251

5352
@Override
@@ -56,7 +55,7 @@ public long getFeatures() {
5655
}
5756

5857
@Override
59-
public Class<BitSetWrapper> getObjectClass() {
58+
public Class<BitSet> getObjectClass() {
6059
return ObjectReader.super.getObjectClass();
6160
}
6261
}

remoting/src/main/java/org/apache/rocketmq/remoting/protocol/BitSetWrapper.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

remoting/src/main/java/org/apache/rocketmq/remoting/protocol/body/BatchAck.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.apache.rocketmq.remoting.protocol.body;
1818

1919
import com.alibaba.fastjson2.annotation.JSONField;
20-
import org.apache.rocketmq.remoting.protocol.BitSetWrapper;
20+
import org.apache.rocketmq.remoting.protocol.BitSetSerializerDeserializer;
2121

2222
import java.io.Serializable;
2323
import java.util.BitSet;
@@ -39,8 +39,8 @@ public class BatchAck implements Serializable {
3939
private long popTime;
4040
@JSONField(name = "it", alternateNames = {"invisibleTime"})
4141
private long invisibleTime;
42-
@JSONField(name = "b", alternateNames = {"bitSet"})
43-
private BitSetWrapper bitSet; // ack offsets bitSet
42+
@JSONField(name = "b", alternateNames = {"bitSet"}, serializeUsing = BitSetSerializerDeserializer.class, deserializeUsing = BitSetSerializerDeserializer.class)
43+
private BitSet bitSet; // ack offsets bitSet
4444

4545
public String getConsumerGroup() {
4646
return consumerGroup;
@@ -107,11 +107,11 @@ public void setInvisibleTime(long invisibleTime) {
107107
}
108108

109109
public BitSet getBitSet() {
110-
return bitSet != null ? bitSet.getValue() : null;
110+
return bitSet;
111111
}
112112

113113
public void setBitSet(BitSet bitSet) {
114-
this.bitSet = bitSet != null ? new BitSetWrapper(bitSet) : null;
114+
this.bitSet = bitSet;
115115
}
116116

117117
@Override

remoting/src/test/java/org/apache/rocketmq/remoting/protocol/RemotingSerializableCompatTest.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.lang.reflect.Field;
2727
import java.lang.reflect.Modifier;
2828
import java.util.ArrayList;
29-
import java.util.BitSet;
3029
import java.util.HashMap;
3130
import java.util.HashSet;
3231
import java.util.List;
@@ -49,7 +48,7 @@ public void testCompatibilityCheck() {
4948

5049
for (Class<? extends RemotingSerializable> clazz : subTypes) {
5150
if (clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers()) || clazz.getSimpleName().endsWith("Test")
52-
|| clazz.isAnonymousClass() || clazz.getName().contains("$") || clazz.getName().contains("BatchAckMessageRequestBody")) {
51+
|| clazz.isAnonymousClass() || clazz.getName().contains("$")) {
5352
continue;
5453
}
5554
try {
@@ -229,11 +228,6 @@ private Object getDefaultValue(final Class<?> type) {
229228
if (type == String.class) {
230229
return "test";
231230
}
232-
if (type == BitSetWrapper.class) {
233-
BitSet bitSet = new BitSet();
234-
bitSet.set(0);
235-
return new BitSetWrapper(bitSet);
236-
}
237231
return null;
238232
}
239233

0 commit comments

Comments
 (0)