嘗試使用XStream的JavaBeanConverter並遇到問題。很可能我錯過了一些簡單的事情,或者不瞭解XStream的轉換器處理得不夠好。XStream JavaBeanConverter未序列化屬性
@XStreamAlias("test")
public class TestObject
{
private String foo;
public String getFoo()
{
//return foo; -- Adjusted for EDIT#2
return foo.toLowerCase();
}
public void setFoo(String foo)
{
this.foo = foo;
}
}
public void test() throws Exception
{
XStream x = new XStream(new XppDriver());
x.autodetectAnnotations(true);
x.processAnnotations(TestObject.class);
x.registerConverter(new JavaBeanConverter(x.getMapper()));
TestObject o = new TestObject();
//o.setFoo("bar"); -- Adjusted for EDIT#2
o.setFoo("BAR");
String xml = x.toXML(o);
System.out.println(xml);
/*
Expecting...
<test>
<foo>bar</foo>
</test>
But instead getting...
<test>
<foo/>
</test>
*/
}
我嘗試添加在TestObject.getFoo()
方法的跟蹤,它似乎它是由稱爲XStream的,但數據沒有被寫入到輸出流中。
在查看JavaBeanConverter的源代碼後,它看起來像我的實現應該工作,這導致我相信我在XStream安裝期間沒有正確配置某些內容。
我只是想念一些簡單的東西嗎?
謝謝!
編輯1
另外,如果有幫助,我使用以下Maven DEPS此...
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.xstream</artifactId>
<version>1.3_3</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.xpp3</artifactId>
<version>1.1.4c_3</version>
</dependency>
編輯2
我修改了TestObject.getFoo()
方法以更好地解釋我的目標。
我想使用getters/setters來做內部對象數據的「衛生」。 特別是,我試圖清理傳入的反序列化數據,同時試圖避免必須實現Serializable的readResolve()方法。
如果我實現了readResolve的方法,我將不得不在setter方法(對於任何其他非反序列化的傳入數據集)以及readResolve(對於反序列化的XML數據)中執行清理。
這就是爲什麼我使用JavaBeanConverter而不是基於XStream的常規實踐的原因...通過getters/setters強制數據。
希望這解釋得更好一點。
謝謝。
+1對於一個優秀的代碼示例(連同maven pom片段) – 2010-03-16 17:53:39