尝试使用 XStream 的 JavaBeanConverter 并遇到问题。很可能我错过了一些简单的东西,或者对 XStream 的转换器处理不够了解。
@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 部门...
<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()
方法以更好地解释我的目标。
我正在尝试使用 getter/setter 对内部对象的数据进行“清理”。具体来说,我试图清理传入的反序列化数据,同时试图避免实现 Serializable 的 readResolve() 方法。
如果我实现了 readResolve 的方法,我将不得不在 setter 方法(对于其他任何非反序列化的传入数据集)和 readResolve(对于我反序列化的 XML 数据)中进行清理。
这就是为什么我使用 JavaBeanConverter 而不是 XStream 的基于字段的常规实践的原因......强制数据通过 getter/setter。
希望这能解释得更好一些。
谢谢。