我如何编组一个对象层次结构,使得组件对象不成为嵌套的 XML 元素,而是它们的属性成为根元素的直接子元素,它们的名称以它们的类型为前缀。
例如,给定:
(A)
public class Customer {
protected String firstName;
protected String lastName;
protected Address address;
}
public class Address {
protected String street;
protected String city;
}
使用通常的 JAXB 注释会导致
(B)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address>
<street>123 Rizal Avenue</street>
<city>Manila</city>
</address>
</customer>
但是,相反,我需要编组相同的
(C)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address_street>123 Rizal Avenue</address_street>
<address_city>Manila</address_city>
</customer>
如果有一些 JAXB 咒语来解决我的需求,那就太好了,因为我已经在使用 JAXB 来解决这个问题的大部分问题。事实上,这些对我的具体情况提出了一些限制:
- (A)中的 Java 类由 JAXB 从与(B)中的 XML 结构对应的现有模式生成。我不希望维护生成的类的修改版本。
- 我不拥有或维护上述架构。实际的模式非常大,并且经常会进行细微的修改。想出和维护一个等效的模式是很乏味的。此外,为了跟上模式修改,我依赖 JAXB 自动生成类。
- 如果它使事情变得更容易,嵌套最多只有一层。在示例中,
Address
不会包含任何其他复杂类型。
我正在查看@XmlPath
MOXy 的注释,但我不知道如何获取前缀为(C)的节点名称。
我梦想有一个解决方案,其中提供正确的 JAXB 注释的一些 xjc 定制让我继续前进,但到目前为止,从我的搜索来看,这看起来不太可能。任何非 JAXB 解决方案就足够了。