【问题标题】:JAXB manual class annotation vs generationJAXB 手动类注释与生成
【发布时间】:2014-01-14 05:25:26
【问题描述】:

从方案中手动编写类和生成 JAXB 类的优点/缺点是什么。我正在开始新项目,想了解选择哪种方式来避免陷入困境。

我有复杂的 XML 结构(基本上是FreeSwitch configuration definition),在不同的 XML 级别上包含可重复的类型。

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    从 POJO 开始的优势

    1. 更容易创建可与其他映射一起使用的模型 技术(例如 JPA 或 JSON 绑定)。
    2. 可以在集合属性上利用@XmlElementWrapper,而不是为该层生成单独的类(请参阅:How generate XMLElementWrapper annotation with xjc and customized binding)。
    3. 可以在域模型上添加您自己的业务逻辑。
    4. 指定XmlAdapter 更简洁(与http://blog.bdoughan.com/2011/08/xml-schema-to-java-generating.html 相比)。
    5. 更容易创建与您的确切命名约定相对应的模型。
    6. 易于利用 JAXB 提供程序扩展(例如 MOXy 的 @XmlPath 映射)。

    从 XML Schema 生成模型的优点

    1. 很容易将大型 XML 模式映射到 Java 类。
    2. 您可以更加确信您的 Java 模型与您的 XML 模式完全对应。

    混合两者

    对于 JAXB,它不需要是一种或另一种类型的选择。您可以使用外部绑定文件,以便在 clas 生成期间 JAXB 将使用您为某些复杂类型编写的类,然后让生成的模型的其余部分指向这些。

    示例


    更新

    在 JAXB 中使用构造函数怎么样?据我所知,这是不允许的 没有公共构造函数的类。这意味着我不能做一些 必填字段。是否有适当的方法来处理必填字段?

    JAXB 需要一个可以是私有的无参数构造函数。如果你的类没有无参数构造函数,那么你可以使用XmlAdapter

    【讨论】:

    • 在 JAXB 中使用构造函数怎么样?据我所知,没有公共构造函数的类是不允许的。这意味着我不能做一些必填字段。是否有适当的方法来处理必填字段?
    • @AndriiLiubimov - 我已经更新了我的答案以解决您的评论。
    【解决方案2】:

    应该使用从模式生成的 IMPO 类来避免模式和 java 类之间的任何差异。

    由于架构将在接口实体之间共享,因此双方必须让代码确认架构。

    【讨论】:

      【解决方案3】:

      JAXB 生成的类是值类,它们没有任何功能。为了添加任何功能,您应该使用生成的 bean 创建自己的类。您还可以扩展或修改我不推荐的生成的 bean。我认为这是主要问题之一。

      另一方面,从手动注释的 bean 生成的模式可能不包括所有需要的约束。

      这就是为什么我认为没有最好的。您可以根据需要选择两者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        相关资源
        最近更新 更多