使用JAXB 2.0忽略XML中的一些包装器标签

时间:2015-11-12 16:17:21

标签: java xml jaxb

SO上有两个类似的问题:

How to ignore some tags in XML in Jaxb

JAXB ignoring xml tag attribute

但不幸的是,他们没有解决我的问题。我正在寻找方法如何使用纯JAXB注释而不使用moxy 跳过XML中的某些标记。

@XmlElementWrapper注释仅适用于collecitons。就我而言,有类似的东西:

<A>
   <skipThisWrapper>
     <someInternalComplexStructure>
       <B>...</B>
       <C>...</C>
     </someInternalComplexStructure>
   </skipThisWrapper>
</A>

它应该映射到类结构:

class A {

   // @XmlElementWrapper(name="skipThisWrapper") - it doesn't work for non-collection fields!

   @XmlElement(name='someInternalComplexStructure')
   ComplexStructure complexStructure;
}

是的,我无法将complexStructure转换为集合,因为这个结构是从一些遗留的基本类继承的。

1 个答案:

答案 0 :(得分:0)

您需要编写一个XmlAdapter,它将包含skipThisWrapper元素的A类对象转换为包含someInternalComplexStructure的B类对象。这只需要你通过重用someInternalComplexStructure类和一个双向非常简单转换的适配器来编写B类。

如果你有手写的Java类,那很简单,但我不会发明任何代码。您可以在最新的SO Q&amp; As标记的jaxb(Avoid Empty Sub-Tags in XML if everything is blank in an objectJAXB can not handle XML element containing white space to java.net.URI mapping)中找到适配器的示例。如果您需要帮助,请在您的Q上添加一些Java代码,然后可以安装适配器。