有没有办法跳过使用 JAXB XML 到 Java 生成类?

问题描述 投票:0回答:1

我有一个模式,我试图使用它(未修改)来使用 XJC 创建 Java 类/枚举。然而,对于几个已实现的类,我有不同的实现。

因此,我使用普通的 JAXB

<baseType name="..."/>
属性来映射到我现有的实现。映射效果很好(或者至少,它可以编译并且单元测试通过)。

但是,如果可能的话,我仍然会得到我不想拥有的生成类(由于 jar 大小和美观的原因)。

有没有办法让XJC不使用外部绑定文件生成特定的类?或者使用maven插件的一些配置?

如果有区别的话,那就是 Java 17 和 Jakarta 的 JAXB 4。

java jaxb code-generation
1个回答
0
投票

我们使用 XJC 从 xsd 和 dtd 生成 java 类。我们使用 maven-antrun-pluginantcontrib 在 Maven 构建中执行此操作。您可能会在 pom.xml 中找到一些有用的东西

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>generate-model</id>
            <configuration>
                <target>
                    <taskdef resource="net/sf/antcontrib/antlib.xml"/>
                    <delete dir="${project.basedir}/src/main/java/com/mycompany/myproject/model" />
                    <for param="dtd">
                        <path>
                            <fileset dir="${project.basedir}/src/main/resources/schema/path1">
                                <include name="Type1.dtd" />
                                <include name="Type2.dtd" />
                                <include name="Type3.dtd" />
                            </fileset>
                        </path>
                        <sequential>
                            <local name="fileName"/>
                            <basename property="fileName" file="@{dtd}" suffix=".dtd"/>
                            <java classname="com.sun.tools.xjc.Driver" fork="true">
                                <sysproperty key="enableExternalEntityProcessing" value="true"/>
                                <arg value="-p" />
                                <arg value="com.mycompany.myproject.model.path1.${fileName}" />
                                <arg value="-d" />
                                <arg value="${project.basedir}/src/main/java" />
                                <arg value="-dtd" />
                                <arg value="-XautoNameResolution" />
                                <arg value="@{dtd}" />
                                <classpath>
                                    <path refid="maven.plugin.classpath" />
                                </classpath>
                            </java>
                        </sequential>
                    </for>
                    <for param="xsd">
                        <path>
                            <fileset includes="*.xsd" dir="${project.basedir}/src/main/resources/schema/path2" />
                        </path>
                        <sequential>
                            <java classname="com.sun.tools.xjc.Driver" fork="true">
                                <sysproperty key="enableExternalEntityProcessing" value="true"/>
                                <arg value="-p" />
                                <arg value="com.mycompany.myproject.model.path2" />
                                <arg value="-d" />
                                <arg value="${project.basedir}/src/main/java" />
                                <arg value="-XautoNameResolution" />
                                <arg value="@{xsd}" />
                                <classpath>
                                    <path refid="maven.plugin.classpath" />
                                </classpath>
                            </java>
                        </sequential>
                    </for>
                    <replaceregexp match="\Q// Generated on:\E.*" replace="//" byline="true">
                        <fileset dir="${project.basedir}/src/main/java/com/mycompany/myproject/model" />
                    </replaceregexp>
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>ant-contrib</groupId>
            <artifactId>ant-contrib</artifactId>
            <version>1.0b3</version>
            <exclusions>
                <exclusion>
                    <groupId>ant</groupId>
                    <artifactId>ant</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.istack</groupId>
            <artifactId>istack-commons-runtime</artifactId>
            <version>3.0.8</version>
        </dependency>
    </dependencies>
</plugin>
© www.soinside.com 2019 - 2024. All rights reserved.