如何解组与Java的JAXB库的非层次关系?

时间:2013-09-07 17:41:02

标签: java xml jaxb

我正在尝试使用Java的JAXB库解组以下XML。

<message name="GetAllRoutesSoapIn">
  <part name="parameters" element="GetAllRoutes"/>
</message>

...

<operation name="GetAllRoutes">
  <input message="GetAllRoutesSoapIn"/>
</operation>

分层次解组此文件很容易:消息包含许多部分,操作具有输入。但是我在输入和消息之间建立关系时遇到了麻烦。

我希望解组的Input类有一个Message类型的字段,而不是String类型的字段。

输入类

@XmlType
public class Input extends AbstractElement {

// @XmlAttribute
// private String message; 

// Not sure how to implement this. XMLAdapter?
private Message message;

protected Input () {}

...

我最初的想法是创建一个自定义的Message XMLAdapter,并使用@XmlJavaTypeAdapter(MessageAdapter.class)注释Message类和Input的Message属性。我将在Adapter类上保留所有实例化消息的静态集合。将收集从正确的xml元素“message”实例化的Messages,并在适配器尝试从输入的message属性解组Message时进行搜索。接近工作但我无法为输入类启动适配器。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这种类型的关系映射为@XmlID(在唯一标识对象的字段/属性上)和XmlIDREF(在对该对象的引用上)。请注意,引用的对象也必须引用通过你所谓的等级关系的另一个对象。