当前位置: 首页 > 面试题库 >

如何扩展JAXB,CXF或Hibernate工具生成的Java代码?

司空瑾瑜
2023-03-14
问题内容

使用生成的Java源代码,例如

  • 用Hibernate工具生成的代码
  • 用JAXB模式绑定(xjc)生成的代码
  • WDSL2Java(cxf)生成的代码

所有生成的类都是“值对象”类型,没有业务逻辑。而且,如果我将方法添加到生成的源代码中,那么如果我重复源代码的生成,则将丢失这些方法。

这些Java代码生成工具是否提供“扩展”所生成代码的方法?

例如,

  • 覆盖ToString方法(用于记录)
  • 实施访客模式(用于数据分析/验证)

问题答案:

对于JAXB,请参阅添加行为。

基本上,您将JAXB配置为返回通常期望的对象的自定义实例。在下面的示例中,您将创建一个新的对象PersonEx,该对象扩展了JAXB对象Person。这种机制之所以有效,是因为您是从生成的类派生的,而不是完全不更改JAXB类或模式。

package org.acme.foo.impl;

class PersonEx extends Person {
  @Override
  public void setName(String name) {
    if(name.length()<3) throw new IllegalArgumentException();
    super.setName(name);
  }
}

@XmlRegistry
class ObjectFactoryEx extends ObjectFactory {
  @Override
  Person createPerson() {
    return new PersonEx();
  }
}

请注意,@ Override指令在您的JAXB对象发生更改的情况下非常重要-它将防止您的自定义变得 孤立



 类似资料:
  •         扩展工具为外业精灵提供的额外使用工具,这些工具可以提供一些更加便捷的功能,在后续的版本中会更新更多的工具提供使用。 实验室        点击主界面中左上方菜单图标可打开用户信息侧边栏,点击侧边栏中的设置图标可跳转至设置页面:        设置页面内,点击实验室选项可跳转至实验室页面。        实验室页面主要包含:路径规划模式、绘制点位吸附、标注名显示、地图缩放、电子罗盘、

  • 问题内容: 我正在使用Selenium IDE(一个Firefox插件)进行测试。开始录制内容时,我看不到Java代码。我总是看到HTML。任何想法都是获取Java源代码的最佳方法。请任何人可以对此提供帮助。 非常感谢。 问题答案: 以下是步骤: 例如。junit / testng / isfw 转到。 要以特定格式导出测试用例,请使用 Selenium IDE的有用功能之一是,它提供了设置剪贴板

  • 我正在为mysql数据库创建一个REST api服务。我使用IntelliJ的持久化工具生成了类。它做得很好。 我正在使用的模式有一些古怪之处。用户希望endpoint可由“id”主键列以外的其他属性访问。 Ex:<代码>/对象/ 这里有一个问题。模式可以改变。name属性不会去任何地方,所以我可以安全地假设它将永远在对象上。 我了解到您可以使用超类强制这些生成的实体具有自定义属性而不会影响数据库

  • 我希望能够在我的应用程序中使用此颜色选择器: http://wpftoolkit.codeplex.com/wikipage?title=ColorPicker 我正在使用安装了. NET 4的Visual Studio 2010 Ultimate。我正在用C#和WPF(XAML)编码。 到目前为止我所做的: > 试图使用 谷歌搜索解决方案、教程或示例,但没有取得太大成功。 请解释扩展WPF工具包

  • 问题内容: 我正在忙于使用Maven将现有项目从Ant构建转换为Ant构建。该构建的一部分包括使用hibernate hbm2java工具将.hbm.xml文件的集合转换为Java。这是用于执行此操作的Ant脚本的片段: 我在互联网上四处张望,有些人(我认为)似乎在Maven中使用Ant,而另一些人使用Maven插件。我宁愿避免混合使用Ant和Maven。任何人都可以建议一种方法来执行此操作,以便

  • apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。 因此,要使用这个扩展机制,你的平台必须支持DSO特性,而且Apache httpd必须内建了mod_so模块。apxs工具能自动探测是否具备这样的条件,你也可以自己用这个命令手动探测: