当前位置: 首页 > 知识库问答 >
问题:

JAXB手动类注释vs生成

谭京
2023-03-14

手工编写类和从scheme生成JAXB类的优缺点是什么。我开始新的项目,并希望了解如何选择避免陷阱。

我有复杂的XML结构(基本上是FreeSwitch配置定义),包括不同XML级别上的可重复类型。

共有3个答案

濮阳旺
2023-03-14

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

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

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

花和宜
2023-03-14

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

由于模式将在接口实体之间共享,因此双方都必须有符合模式的代码。

朱兴运
2023-03-14
  1. 更容易创建可与其他映射技术(如JPA或JSON绑定)一起使用的模型。
  2. 可以利用集合属性上的@XmlElementWrapper,而不是为该层生成单独的类(参见:如何使用xjc和自定义绑定生成XMLElementWrapper注释)。
  3. 可以在域模型上添加自己的业务逻辑。
  4. 指定XmlAdapter更干净(与http://blog.bdoughan.com/2011/08/xml-schema-to-java-generating.html比较)。
  5. 更容易创建符合您确切命名约定的模型。
  6. 易于利用JAXB提供程序扩展(如MOXy的@XmlPath映射)。
  1. 很容易将大型XML模式映射到Java类

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

实例

  • JAXB编译器将xs:boolean绑定到Java布尔包装类,而不是布尔基元类型

使现代化

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

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

  • http://blog.bdoughan.com/2010/12/jaxb-and-immutable-objects.html
 类似资料:
  • MOXy BeanValide使我能够将验证添加到我的JAXB类中。 使用MOXy的“Bean Validation Plugin”,我可以根据预先存在的模式中的限制/方面在生成的JAXB类中进行Bean验证。 但是,有没有任何方法可以基于JAXB注释的java类的Bean验证注释生成带有限制/facetsb的模式? 在“模式优先”生成java时,XJC有一个方便的插件体系结构,但是是否有任何等效

  • 问题内容: 我已经使用JAXB编写了许多类进行序列化,并且我想知道是否存在一种基于注释为每个对象生成XSD文件的方法。有这个工具吗? 喜欢的东西是 真棒 。有什么可以做的吗? 问题答案: 是的,您可以在JAXBContext上使用该方法: 您可以利用实现控制输出的位置:

  • 我一直在使用 annox 在我的 jaxb 生成的类上添加注释(通过绑定文件),但我找不到直接在包上添加注释的方法(包信息.java)。 我一直在尝试在bindings.xml中这样做: 但是jaxb抱怨说< code>annox:annotate不应该在那里。 还有别的方法吗?

  • 我正在尝试使用Spring 4实现REST服务。 该应用程序使用Java 7构建,并在Tomcat 7上运行。 REST方法将返回JSON格式的customer对象。应用程序是注释驱动的。 Customer类有JAXB注释。Jackson罐子出现在课堂路径中。据我所知,Jackson将使用JAXB注释生成JSON。 客户类别: 我已经将REST服务类注释为@RestController(根据Spr

  • JAXB为每个属性生成@XmlAttribute注释。例如,属性 转换为带注释的java对象属性 但是,如果属性在名称中没有下划线,则@Xml属性中的名称字段丢失(因此##默认)。我想自定义JAXB绑定,以便也生成没有下划线的名称的注释。有什么建议吗? 谢谢!Johannes

  • 在JavaConfig中定义一个bean与仅仅注释一个类有什么不同? JavaConfig: 带注释的类