Специально для этого случая я написал плагин 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
И получил класс как (геттеры, сеттеры и любые аннотации для простоты опущены):
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-класс с плагином в run classpath и просто добавьте опцию -XPluginDescriptionAnnotation
. F.e.:
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 проекта.