特别是对于那种情况,我编写了 XJC 插件xjc-documentation-annotation-plugin。
它的作用:<annotation><documentation>
-> Java 类注解
说我们有这个对象描述XSD
:
<xs:complexType name="CadastralBlock">
<xs:annotation>
<xs:documentation>Cadastral quarter</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="number" type="xs:string">
<xs:annotation>
<xs:documentation>Cadastral number</xs:documentation>
</xs:annotation>
</xs:element>
</xs:complexType>
我们像这样运行 xjc:
xjc -npa -no-header -d src/main/generated-java/ -p xsd.generated scheme.xsd
并得到了类似的类(为简单起见,省略了getter、setter和任何注释):
public class CadastralBlock {
protected String number;
}
但就我而言,我想知道如何在源文件中命名类和字段!所以它就是这个插件的作用!
所以你得到:
@XsdInfo(name = "Cadastral quarter", xsdElementPart = "<complexType name=\"CadastralBlock\">\n <complexContent>\n <restriction base=\"{http://www.w3.org/2001/XMLSchema}anyType\">\n <sequence>\n <element name=\"number\" type=\"{http://www.w3.org/2001/XMLSchema}string\"/></sequence>\n </restriction>\n </complexContent></complexType>")
public class CadastralBlock {
@XsdInfo(name = "Cadastral number")
protected String number;
}
如何使用
在命令行中手动调用
如果要手动运行它,请确保运行类路径中带有插件的 jar 类,然后添加选项-XPluginDescriptionAnnotation
。铁:
xjc -npa -no-header -d src/main/generated-java/ -p xsd.generated -XPluginDescriptionAnnotation scheme.xsd
从 Java/Groovy 调用
Driver.run(
[
'-XPluginDescriptionAnnotation'
,'-d', generatedClassesDir.absolutePath
,'-p', 'info.hubbitus.generated.test'
,'CadastralBlock.xsd'
] as String[]
,new XJCListener() {...}
)
例如,请参阅测试 XJCPluginDescriptionAnnotationTest。
从 Gradle 使用
使用gradle-xjc-plugin:
plugins {
id 'java'
id 'org.unbroken-dome.xjc' version '1.4.1' // https://github.com/unbroken-dome/gradle-xjc-plugin
}
...
dependencies {
xjcClasspath 'info.hubbitus:xjc-documentation-annotation-plugin:1.0'
}
// Results by default in `build/xjc/generated-sources`
xjcGenerate {
source = fileTree('src/main/resources') { include '*.xsd' }
packageLevelAnnotations = false
targetPackage = 'info.hubbitus.xjc.plugin.example'
extraArgs = [ '-XPluginDescriptionAnnotation' ]
}
完整gradle
示例在项目的 example-project-gradle目录中。