Java 如何使用XMLEncoder序列化wsimport生成的类?
我想用wsimport工具生成的XMLEncoder类进行序列化。 有许多ArrayOfxxxxx类具有以下结构:Java 如何使用XMLEncoder序列化wsimport生成的类?,java,serialization,wsimport,xmlencoder,Java,Serialization,Wsimport,Xmlencoder,我想用wsimport工具生成的XMLEncoder类进行序列化。 有许多ArrayOfxxxxx类具有以下结构: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ArrayOfSitejournal", propOrder = { "item" }) public class ArrayOfSitejournal implements Serializable { protected List<Jou
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfSitejournal", propOrder = {
"item"
})
public class ArrayOfSitejournal
implements Serializable
{
protected List<Journal> item;
public List<Journal> getItem() {
if (item == null) {
item = new ArrayList<Journal>();
}
return this.item;
}
}
你能帮我写一个这样的PersistenceDelegate吗?我自己找到了解决方案
encoder.setPersistenceDelegate(ArrayOfSitejournal.class, new DefaultPersistenceDelegate() {
protected void initialize(Class type, Object oldInstance, Object newInstance, Encoder out) {
super.initialize(type, oldInstance, newInstance, out);
ArrayOfSitejournal m = (ArrayOfSitejournal)oldInstance;
Expression expression = new Expression(oldInstance, "getItem", new Object[] {});
out.writeExpression(expression);
}
});
我不确定它是否正确,但它是有效的。它生成以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_45" class="java.beans.XMLDecoder">
<object class="ArrayOfSitejournal">
<void property="item">
<void method="add">
<object class="Journal">
<void property="changeType">
<string>start</string>
</void>
<void property="itemId">
<long>4239463180</long>
</void>
</object>
</void>
<void method="add">
<object class="Journal">
<void property="changeType">
<string>now</string>
</void>
<void property="itemId">
<long>4239463180</long>
</void>
</object>
</void>
</void>
</object>
</java>
并正确地反序列化
encoder.setPersistenceDelegate(ArrayOfSitejournal.class, new DefaultPersistenceDelegate() {
protected void initialize(Class type, Object oldInstance, Object newInstance, Encoder out) {
super.initialize(type, oldInstance, newInstance, out);
ArrayOfSitejournal m = (ArrayOfSitejournal)oldInstance;
Expression expression = new Expression(oldInstance, "getItem", new Object[] {});
out.writeExpression(expression);
}
});
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_45" class="java.beans.XMLDecoder">
<object class="ArrayOfSitejournal">
<void property="item">
<void method="add">
<object class="Journal">
<void property="changeType">
<string>start</string>
</void>
<void property="itemId">
<long>4239463180</long>
</void>
</object>
</void>
<void method="add">
<object class="Journal">
<void property="changeType">
<string>now</string>
</void>
<void property="itemId">
<long>4239463180</long>
</void>
</object>
</void>
</void>
</object>
</java>