我试图使用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
方法。但是,我还希望包括hashcode
、equals
和setter
方法。如何在生成代码时做到这一点?
在GitHub网站上,您将找到JAXB2 Basics项目,该项目提供了一组常见的JAXB
实用插件,其中包括4个应该解决您试图实现的目标:
还有其他插件可以覆盖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]接口。
插件使用的设计方法通常产生两种实现方式:
问题内容: 我正在尝试使用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文件。