提交 386fbd8c 编写于 作者: C chao.liuc

DUBBO-63 Serialization对final字段的处理出错 private内部类字段不序列化

例如 ConcurrentHashMap$Segement

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@352 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 d572251a
......@@ -417,7 +417,8 @@ public abstract class Builder<T> implements GenericDataFlags
int mod = tf.getModifiers();
if (Modifier.isStatic(mod)
|| (serializeIgnoreFinalModifier(c) && Modifier.isFinal(mod))
|| tf.getName().equals("this$0") ) // skip static or inner-class's 'this$0' field.
|| tf.getName().equals("this$0") // skip static or inner-class's 'this$0' field.
|| ! Modifier.isPublic(tf.getType().getModifiers()) ) //skip private inner-class field
continue;
if( Modifier.isTransient(mod) )
{
......@@ -863,12 +864,14 @@ public abstract class Builder<T> implements GenericDataFlags
private static boolean serializeIgnoreFinalModifier(Class cl)
{
if (cl.isAssignableFrom(BigInteger.class)) return false;
// if (cl.isAssignableFrom(BigInteger.class)) return false;
// for performance
if (cl.getName().startsWith("java")) return true;
if (cl.getClass().getName().startsWith("javax")) return true;
// if (cl.getName().startsWith("java")) return true;
// if (cl.getName().startsWith("javax")) return true;
return false;
}
@SuppressWarnings("unused")
private static boolean isPrimitiveOrPrimitiveArray1(Class<?> cl)
{
......
......@@ -20,6 +20,7 @@ import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import java.io.Serializable;
import java.lang.reflect.Modifier;
import java.sql.Time;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -350,7 +351,9 @@ public class BuilderTest
assertEquals(node0, node0.next.prev);
assertEquals(node0.value, "0");
}
public static void main(String[] args) {
System.out.println(Modifier.isPublic(String.class.getModifiers()));
}
@Test
public void testWithFC() throws Exception
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册