1
我重新編譯我的一些代碼的Java 7之下,開始測試後。很快我就注意到我用於將對象序列化到xml的機制停止工作。幸運的是,這個序列化是爲了臨時會話存儲的目的,所以我可以刪除所有舊的序列化的XML,並使用xstream而不是XMLEncoder從頭開始。變化XMLEncoder的行爲從Java 1.6.x版遷移到1.7.x
我很好奇,我做了什麼錯了還是什麼在隨Java7的XMLEncoder改變。
B.java:
import java.util.*;
public class B{
public String s;
public void setS(String s){
this.s = s;
}
public String getS(){
return this.s;
}
public HashSet<String> h = new HashSet<String>();
public void setH(HashSet<String> h){
this.h = h;
}
public HashSet<String> getH(){
return this.h;
}
}
A.java:下的Java 1.6.x的
import java.util.*;
import java.io.*;
import java.beans.*;
class A{
public A(){
B tmp = new B();
tmp.setS("abc");
HashSet<String>h = new HashSet<String>(Arrays.asList("a", "c"));
tmp.setH(h);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
XMLEncoder e = new XMLEncoder(new BufferedOutputStream(bos));
e.writeObject(tmp);
e.close();
System.out.println(bos.toString());
}
public static void main(String []arg){
new A();
}
}
磨合給我:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_25" class="java.beans.XMLDecoder">
<object class="B">
<void property="h">
<void method="add">
<string>b</string>
</void>
<void method="add">
<string>a</string>
</void>
</void>
<void property="s">
<string>abc</string>
</void>
</object>
</java>
一個運行Java的下1.7.0_01給我:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_01" class="java.beans.XMLDecoder">
<object class="B" id="B0">
<void class="B" method="getField">
<string>s</string>
<void method="set">
<object idref="B0"/>
<string>abc</string>
</void>
</void>
</object>
</java>
正如您所看到的,輸出不包含HashSet h字段的任何跟蹤。
我做了一些google搜索,但到目前爲止,我能找到的唯一類似的例子是this post,沒有別的。
在此先感謝您的提示。
非常感謝,確實做了一個技巧。 – pQd