我正在尝试使用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方法为好。生成代码时该怎么做?
getter
hashCode
equals
setter
在GitHub网站上,您将找到JAXB2 Basics项目,该项目提供了一组通用的JAXB实用程序插件,其中包括4个应解决您要实现的目标的插件:
JAXB
还有其他可用的插件,它们涵盖了Java域对象的相似常见方面。
Java
从XML Schema配置角度来看,您将添加引用,如下所示:
XML Schema
<?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()实现等时应忽略的对象属性。
equals( that )
toString()
从一个Java角度来看,插件通常使生成的类实现interface;例如,生成的包含equals( that )实现的类将实现[Equals] [6]接口。
interface
插件使用的设计方法通常会产生两种实现方式:
Equals Plugin
locator
strategy
equals( thisLocator, thatLocator, that, strategy)
从运行的角度来看,你必须包括JAXB2基本运行罐子,并提供选项参数,如:-Xequals,-XhashCode,或-XtoString。从Ant和提供了使用JAXB2 Basics的示例Maven,如果您使用这两个示例执行构建,并且《JAXB2 Basics用户指南》中提供了更多与构建相关的详细信息。
-Xequals
-XhashCode
-XtoString
Ant
Maven