java - 如何使用通用类通过 maven 从 xsd 生成 JAXB

标签 java maven xsd xml-parsing jaxb

我正在尝试解析具有相同结构但具有不同名称的 .xml 文件。我正在使用 Maven 从 .xsd 文件自动生成 java 类来解析 xml 文件。我需要能够自动生成大多数类,但使用一些预先创建的类。这将使我能够提取一些业务逻辑并避免重复。考虑下面的两个 xml 示例:

<x>
    <y>
        <d attribute="value1"/>
    </y>
    <y>
        <d attribute="value2"/>
    </y>
</x>


<b>
    <c>
        <d attribute="value1"/>
    </c>
    <c>
       <d attribute="value2"/>
    </c>
</b>

节点“y”和“c”具有相同的结构但名称不同。我希望能够创建一个不同的类“W”,可用于解析这两个 xml 文件。然后,当 Maven 自动生成发生时,它将使用我的类“W”,而不是创建类“Y”和“C”,并将其应用到两个节点。这可以通过创建具有类似于以下结构的类来手动完成:

public class x {
    @XmlType("y")
    private List<W> w;
}

public class W {
    private D d;
}

public class B {
    @XmlType("c")
    private List<W> w;
}

大约有 10 个 .xsd 文件,每个文件有 10k-20k 行,因此在完整情况下扩展此示例是不可行的。有任何想法吗?如果此功能在其他地方存在,我愿意接受其他 xml 解析框架。

注意: 我尝试使用 .xjb 与 impl 类绑定(bind)。它期望 impl 类是生成类的子类型,这与我正在寻找的相反关系。

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
               xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
               xmlns:xs="http://www.w3.org/2001/XMLSchema" >

    <jaxb:bindings schemaLocation="example.xsd" node="/xs:schema">
         <jaxb:bindings node="//xs:element[@name='y']">
           <jaxb:class implClass="W"/>
         </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

最佳答案

  • 为您的 y 定义一个复杂类型和x元素。
  • 编写您自己的这种类型的实现(例如 com.acme.foo.W )
  • 使用<jaxb:class ref="com.acme.foo.W"/>绑定(bind)此类型以告诉 JAXB 使用 W类而不是生成一个新类。

另请参阅:

JAXB: Prevent classes from being regenerated

关于java - 如何使用通用类通过 maven 从 xsd 生成 JAXB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29435996/

相关文章:

xml - 从另一个 XSD 导入复杂类型

java - 错误 setContentView(R.layout.activity_main)

java - 如何调用 SOAP Web 服务使用带有 SSL 的 httpclient

maven - 如何用 Maven 属性替换 web.xml 中的值?

java - 新增 Maven 插件在 IntelliJ 中变红

.net - XmlDocument.Validate 不检查无效的命名空间

java - 如何使JTextField和JComboBox圆角无边框和背景图像?

java - 使用 @Resource 时处理 EJB 上的异常

java - 如何在同一个 pom.xml 中使用 selendroid 和 seleniumhq ?

jpa - HyperJaxb3 还在维护吗?