这是一个演示问题的简单示例:
考虑两个 bean 类 Alpha 和 Beta:
public class Alpha {
private String name;
private Beta beta;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Beta getBeta() {
return beta;
}
public void setBeta(Beta beta) {
this.beta = beta;
}
}
public class Beta {
private Alpha alpha;
public Alpha getAlpha() {
return alpha;
}
public void setAlpha(Alpha alpha) {
this.alpha = alpha;
}
}
然后创建 Alpha 和 Beta 的实例,并将 Alpha 对象写入 XML:
Alpha alpha = new Alpha();
Beta beta = new Beta();
alpha.setBeta(beta);
alpha.setName("Rama");
beta.setAlpha(alpha);
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("file.xml")));
encoder.writeObject(alpha);
encoder.close();
在 java 6 中,这会产生以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_24" class="java.beans.XMLDecoder">
<object id="Alpha0" class="dk.kruger.Alpha">
<void property="beta">
<object class="dk.kruger.Beta">
<void property="alpha">
<object idref="Alpha0"/>
</void>
</object>
</void>
<void property="name">
<string>Rama</string>
</void>
</object>
</java>
但在 java 7 中,结果是:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_07" class="java.beans.XMLDecoder">
<object class="dk.kruger.Alpha" id="Alpha0">
<void property="beta">
<object class="dk.kruger.Beta">
<void property="alpha">
<object idref="Alpha0">
<void property="name">
<string>Rama</string>
</void>
</object>
</void>
</object>
</void>
</object>
</java>
java 7 生成的 XML 比 java 6 XML 的可读性要差得多(当然,对于更复杂的示例来说尤其如此)。在上面的示例中,java 7 编码器在“beta”的定义中定义了“alpha”的“name”属性,因为“beta”也有对“alpha”的引用。这种行为可能会导致深度嵌套和丑陋的 XML。
有没有办法让 java 7 中的 XML 编码器生成 java 6 风格的 XML?