java - 如何解码与 Java 的 JAXB 库的非层次关系?

标签 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 类和输入的 Message 属性。我将在 Adapter 类上保留所有实例化消息的静态集合。当适配器尝试从输入的消息属性中解码消息时,将收集并搜索从正确的 xml 元素“消息”实例化的消息。接近工作,但我无法让适配器为输入类触发。

有什么想法吗?

最佳答案

这种类型的关系通过 @XmlID(在唯一标识该对象的字段/属性上)和 XmlIDREF(在对该对象的引用上)进行映射。请注意,所引用的对象还必须通过您所称的层次结构关系由另一个对象引用。

关于java - 如何解码与 Java 的 JAXB 库的非层次关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676105/

相关文章:

java - 处理 selenium java 中的右键单击菜单项

java - 使用 join 的 Spring Data JPA 规范的不同结果

java - EclipseLink Moxy unmarshall 具有不同元素名称的集合

c# - 使用 LINQ 从 xml 中删除元素

java - 如何迭代不同对象的列表?

java - 使用 EclipseLink JAXB (MOXy) 解码 XML 时出现 DescriptorException "Missing class indicator field from database row"异常

java - 如何检查HttpServletRequest是否包含Java中的 key (使用spring boot)

java - SWT 中不同大小的 View

javax.xml.parsers.DocumentBuilder 对复杂类型的支持

namespaces - jaxb xmlElement 命名空间不起作用