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

在Java中生成JAXB类时添加toString、hashCode和equals

阚正真
2023-03-14

我试图使用Java以编程方式从XSD文件生成JAXB类。我使用以下代码片段来实现这一点:

....
import java.io.File;
import java.io.IOException;
import org.xml.sax.InputSource;
import com.sun.codemodel.JCodeModel;
import com.sun.tools.xjc.api.S2JJAXBModel;
import com.sun.tools.xjc.api.SchemaCompiler;
import com.sun.tools.xjc.api.XJC;
....
....
public static void generateJaxb(String schemaPath,
                                    String outputDirectory,
                                        String packageName) throws DataLoadingException
{
    try {
        // Setup schema compiler
        SchemaCompiler sc = XJC.createSchemaCompiler();
        sc.forcePackageName(packageName);

        // Setup SAX InputSource
        File schemaFile = new File(schemaPath);
        InputSource is = new InputSource(schemaFile.toURI().toString());

        // Parse & build
        sc.parseSchema(is);
        S2JJAXBModel model = sc.bind();

        JCodeModel jCodeModel = model.generateCode(null, null);
        jCodeModel.build(new File(outputDirectory));
    } catch (IOException exec) {
        LOGGER.error("Error while generating JAXB classes: " + exec);
    }
}

生成的类只包含字段的getter方法。但是,我还希望包括hashcodeequalssetter方法。如何在生成代码时做到这一点?

共有1个答案

糜鸿风
2023-03-14

在GitHub网站上,您将找到JAXB2 Basics项目,该项目提供了一组常见的JAXB实用插件,其中包括4个应该解决您试图实现的目标:

  1. 等于插件
  2. hashcode插件
  3. 设置插件
  4. toString插件

还有其他插件可以覆盖Java域对象的类似公共方面。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:basic="http://jaxb2-commons.dev.java.net/basic"
    xmlns:equals="http://jaxb2-commons.dev.java.net/basic/equals"
    xmlns:hashCode="http://jaxb2-commons.dev.java.net/basic/hashCode"
    xmlns:toString="http://jaxb2-commons.dev.java.net/basic/toString"
    jaxb:extensionBindingPrefixes="basic equals hashCode toString">
    <!-- ... -->
</xs:schema>

还有其他选项可用,例如定义在生成equals(that)实现、tostring()实现时应忽略的对象属性等。

Java的角度来看,插件通常让生成的类实现接口;例如,包含Equals(that)实现的生成类将实现[Equals][6]接口。

插件使用的设计方法通常产生两种实现方式:

    null
 类似资料:
  • 问题内容: 我正在尝试使用Java从XSD文件中以编程方式生成JAXB类。我使用以下代码片段实现了这一目的: 生成的类仅包含字段的方法。但是,我想包括,和方法为好。生成代码时该怎么做? 问题答案: 在GitHub网站上,您将找到JAXB2 Basics项目 ,该项目提供了一组通用的实用程序插件,其中包括4个应解决您要实现的目标的插件: 等于插件 HashCode插件 二传手插件 ToString插

  • 问题内容: 因此,我有一个带有一堆需要实现的方法的接口,这些方法的名称无关紧要。 实现此接口的对象通常放入集合中,并且具有我希望它们使用的特殊toString()格式。 因此,我认为将hashCode(),equals()和toString()放入接口将很方便,以确保我记得重写这些默认方法。但是,当我将这些方法添加到接口中时,即使没有明确实现这三个方法,IDE / Compiler也不会抱怨,即使

  • 我已经习惯了从命令行使用XJC工具。但是我意识到我不能使用它生成带有和方法的Java类。我用了这个: 1.可以用CXF XJC Maven插件从DTD文件生成和方法吗?

  • 问题内容: 我工作的代码使用从生成从XSD架构的Java类。我正在寻找一种方法来自动实现和这些类的方法,但似乎没有一种方式。我知道还有其他JAXB2 Maven插件可以做到这一点(例如,http://confluence.highsource.org/display/J2B/Home),但是我想知道你们中的任何人以前是否遇到过此问题,以及是否有办法修复它。我正在使用目标生成类。 问题答案: 您提到

  • 我正在使用JAXB xjc命令行工具将XML模式(.xsd文件)转换为Java对象。 以下是我的.xsd文件的内容: 我无法修改原始的。xsd文件,我需要修改它才能用于多个尚未看到的。xsd文件。