当前位置: 首页 > 知识库问答 >
问题:

如何通过maven-jaxb从XSD生成仅必需的类

韩自怡
2023-03-14

我有两个XSD,其中一个包含另一个,让我们称它们为A和B。

B有很多xs:complexType定义,并且包含在a中,但是a只对其中的一些定义感兴趣。

现在发生的事情是为B中定义的所有类型生成类。我想要实现的是只为A直接引用的类型生成类。

我曾尝试修改XSD A以导入B,而不是包含,但对于maven jaxb插件来说,效果并不理想。

XSD A导入B:

<xs:import schemaLocation="B.xsd" />

生成源的插件设置:

        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-xsd</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <schemaDirectory>src/main/resources</schemaDirectory>
                        <schemaIncludes>
                            <include>xsd/*.xsd</include>
                        </schemaIncludes>
                        <strict>true</strict>
                        <extension>true</extension>
                        <args>
                            <arg>-XJsr303Annotations</arg>
                            <arg>-Xannotate</arg>
                        </args>
                        <plugins>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics-annotate</artifactId>
                                <version>0.6.3</version>
                            </plugin>
                            <plugin>
                                <groupId>com.github.krasa</groupId>
                                <artifactId>krasa-jaxb-tools</artifactId>
                                <version>1.1</version>
                            </plugin>
                        </plugins>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我知道有一种方法可以从命令行实现我对xjc的要求,但用于注释类以进行验证的插件不会触发。

我需要的是一种只生成所需类的方法,同时保留运行时注释,如下面的插件生成的NotNull。有人能帮忙吗?

共有1个答案

司徒兴德
2023-03-14

这里是maven-jaxb2-plugin的作者。

xjc的可能性可以通过maven-jaxb2-plugin实现。您可以单独使用arg进行所有配置。因此,如果您认为可以从命令行中获得所需内容,请发布此命令行,我们将了解如何相应地配置插件。

据我所知,包含模式使XJC能够编译整个集合。如果包含,则它是一个模式,仅在几个文件中声明。因此,您将获得生成的所有类型。

如果您将包含更改为导入,并从a中的某个顶级模式开始,那么XJC可能会在B中生成较少的类型。但不能保证,因为我不相信这种行为是XJC公共合同的一部分。不管您是通过命令行还是通过Maven插件使用XJC。下面是同一个XJC。

我有最好的经验,是模块化或单独的模式编译:

  • https://github.com/highsource/maven-jaxb2-plugin/wiki/Modular-Schema-Compilation

基本上,您首先编译B并在编译A时将其用作插曲。它与hut下的jaxb: class/@ref注释一起工作,以指向已经存在的类,而不是重新生成它们。

 类似资料:
  • 有没有什么方法可以从wsdl生成xsd。任何链接或工具也可以。最简单的方法是什么?

  • B/src/main/gen pom.xml 我想在B项目中从XSD生成类,它存在于一个项目中 在B项目的pom.xml中,我有:

  • myType也被定义为complexType。然后得到生成的类MyResponse.java和Reference.java。我可以通过以下方式分配“引用”的值: 而且奏效了。 现在我只是删除了maxOccurs=“unbounded”,它不再起作用了。响应不再是List类型,而是JaxBelement类型。我试着用: 谁能告诉我,当它不是一个列表时,什么是正确的做法?

  • 我有我的xml模式定义如下 我使用maven-jaxb2-plugin根据这个xsd生成Java类。 生成代码后,我发现所有元素都有@xmlement注释(required=true)。为什么?我有许多minOccurs=“0”元素。为什么元素上总是添加required=true。

  • 我们试图使用gradle、xsd和xjc生成JAXB类,JAXB类应该具有XmlRootElement注释,以便可以将其作为web服务响应公开。我们正在跟踪这个链接http://azagorneanu.blogspot.com/2011/09/configure-maven-to-generate-classes.html,这很有帮助,但我们无法找到一个只有gradle的特定示例。所以我们想出了一