XSD实用总结

类生成插件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!-- 将XSD文件自动生成POJO对象,每次变更用Maven重新编译一下 -->
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<configuration>
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
<generateDirectory>src/main/java/</generateDirectory>
<packageLevelAnnotations>false</packageLevelAnnotations>
<noFileHeader>true</noFileHeader>
<episode>false</episode>
<readOnly>true</readOnly>
<!-- 如果不加生成的类注释会中文乱码 -->
<encoding>UTF-8</encoding>
<!-- 设置生成的类的注解语言en为英文 -->
<locale>en</locale>
</configuration>
<executions>
<execution>
<id>xsd1-generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<args>
<!-- 使用XJC给生成Java类添加注解 -->
<arg>-Xannotate</arg>
<!-- 使用XJC给生成Java类添加父类 -->
<arg>-Xinheritance</arg>
<!-- 给生成Java类添加equals方法 -->
<arg>-Xequals</arg>
<!-- 给生成Java类添加hashCode方法 -->
<arg>-XhashCode</arg>
<arg>-Xvalue-constructor</arg>
<arg>-nv</arg>
</args>
<extension>true</extension>
<schemaIncludes>
<include>test.xsd</include>
</schemaIncludes>
<bindingIncludes>
<include>test.xjb</include>
</bindingIncludes>
<generatePackage>com.test.support.xml</generatePackage>
<plugins>
<!-- 基础插件依赖 -->
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>1.11.1</version>
</plugin>
<!-- -Xequals和-XhashCode参数用于生成equals和hashcode方法使用 -->
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-value-constructor</artifactId>
<version>3.0</version>
</plugin>
<!-- 使用XJC给生成Java类添加注解 -->
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>1.0.2</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
</dependencies>
</plugin>

用于生成equals和hashcode方法的依赖

1
2
3
4
5
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>1.11.1</version>
</dependency>

用于实现生成的类中加注解和实现继承等关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:annox="http://annox.dev.java.net"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:extensionBindingPrefixes="xjc annox inheritance"
version="2.1">

<jaxb:bindings schemaLocation="test.xsd" node="/xs:schema">
<!-- 给生成的类添加serialVersionUID -->
<jaxb:globalBindings>
<jaxb:serializable uid="3710395777932380425"/>
</jaxb:globalBindings>
<!-- 给匹配的类添加注解 -->
<jaxb:bindings node="//xs:complexType" multiple="true">
<annox:annotateClass>@lombok.Data</annox:annotateClass>
<annox:annotateClass>@lombok.EqualsAndHashCode</annox:annotateClass>
</jaxb:bindings>
<jaxb:bindings node="//xs:element" multiple="true">
<annox:annotateClass>@lombok.Data</annox:annotateClass>
<annox:annotateClass>@lombok.EqualsAndHashCode</annox:annotateClass>
</jaxb:bindings>
<!-- 给匹配的类添加父类 -->
<jaxb:bindings node="//xs:element[@name='BaselineModel']/xs:complexType">
<inheritance:extends>com.test.support.AbstractModel</inheritance:extends>
</jaxb:bindings>
<jaxb:bindings node="//xs:element[@name='RuleModel']/xs:complexType">
<inheritance:extends>com.test.support.AbstractModel</inheritance:extends>
</jaxb:bindings>
</jaxb:bindings>

</jaxb:bindings>

如果schema文件和binding文件有变动只需要通过maven编译一下