Xjc生成代码。简化生成代码中的变量类型

时间:2019-09-17 09:37:17

标签: java maven xjc

我正在使用Xjc和Maven从架构(Xsd)中生成Java类。 输出的Java代码确实显示了复杂类型,这些复杂类型在Xsd中定义为变量类型。

是否可以通过任何参数化将生成的代码中的复杂类型替换为它们表示的简单类型(请参见下面的示例)?

预先感谢您的所有建议。 奥利弗

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>xxx.yyy</artifactId>
    <name>ABC</name>
    <parent>
        <groupId>de.xxx</groupId>
        <artifactId>www-xxx-yyy</artifactId>
        <version>1.2.3</version>
    </parent>
    <properties>
        <!--properties-->
    </properties>
    <dependencies>
        <!--dependencies-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <id>xjc</id>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <packageName>
                        my.package.name
                    </packageName>
                    <sources>
                        <source>${basedir}\src\main\resources\XMLSchema\example.xsd</source>
                    </sources>
                    <outputDirectory>${basedir}/target/gensrc</outputDirectory>
                    <clearOutputDir>false</clearOutputDir>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <!--profiles-->
    </profiles>
</project>

模式(缩短):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="T_Key_Not_Null">
        <xs:annotation>
            <xs:documentation>Primary or foreign key (max. 16 Chars)</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="16"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="T_Key_Nullable">
        <xs:annotation>
            <xs:documentation>Foreign key (max. 16 Chars), optional</xs:documentation>
        </xs:annotation>
        <xs:simpleContent>
            <xs:extension base="T_Key_Not_Null">
                <xs:attribute ref="null" use="optional"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="T_XXX_Row">
        <xs:sequence>
            <xs:element name="variable1" type="T_Key_Not_Null"/>
            <xs:element name="variable2" type="T_Key_Nullable"/>
        </xs:sequence>
        <xs:attribute name="num" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:NMTOKEN"/>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:schema>

生成的类(缩短):

public class T_XXX_Row {

    @XmlElement(name = "xxx1", required = true)
    protected TKeyNotNull variable1;
    @XmlElement(name = "xxx2", required = true)
    protected TKeyNullable variable2;

    @XmlAttribute(name = "num", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String num;

    //getters and setters
}

我想拥有的生成类:

public class T_XXX_Row (shortened) {

    @XmlElement(name = "xxx1", required = true)
    protected String variable1;
    @XmlElement(name = "xxx2", required = true)
    protected String variable2;

    @XmlAttribute(name = "num", required = true)
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String num;

    //getters and setters
}

0 个答案:

没有答案