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

使用maven-jaxb2-plugin生成java类

马坚
2023-03-14

我对Jaxb和这个maven-jaxb2插件非常陌生

这是我的. xsd文件:

<xs:element name="user" type="user" />
<xs:element name="userList" type="userList" />

<xs:complexType name="user">
    <xs:all>
        <xs:element name="id" type="xs:long" minOccurs="0" />
        <xs:element name="name" type="xs:string" />
        <xs:element name="registrationDate" type="xs:dateTime" />
    </xs:all>
</xs:complexType>

<xs:complexType name="userList">
    <xs:sequence>
        <xs:element name="user" type="user" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

这是我的。xjb文件:

<!-- Annotate @XmlRootElement Annotation for all the classes, that matches 
        in the .xsd with complexType -->
    <jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
        <jaxb:bindings node="xs:complexType['1'='1']" multiple="true"
            required="false">
            <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                    name="user" />
            </annox:annotate>
        </jaxb:bindings>
    </jaxb:bindings>

当它生成时,它给出的java类有点像:

XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "user", propOrder = {

})
@Entity
@XmlRootElement(name = "${@name}")
@Table(schema = "schemaName", uniqueConstraints = {

}, name = "user_")
public class User
    implements Serializable, ToString
{

    private final static long serialVersionUID = 1L;
    protected Long id;

<jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
        <jaxb:bindings node="xs:complexType[@name='user']">
            <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="user" />
            </annox:annotate>
        </jaxb:bindings>
        <jaxb:bindings node="xs:complexType[@name='userList']">
            <annox:annotate>
                <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="userList" />
            </annox:annotate>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

但是我不想为用户和用户列表重复相同的代码,我可以通过注释或定义正则表达式来做什么。请建议一些方法。

我只是想知道这段代码要写什么

<annox:annotate>
    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                    name="user" />
</annox:annotate>

因此,当它创建用户类时,它会显示@xmlRootElement(name='user'),而其他类的@xmlRootElement(name='userList')和其他类的类似。

共有1个答案

袁英豪
2023-03-14

您应该使用

<jxb:bindings node="xs:complexType" multiple="true">
  <annox:annotate>
    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" />
  </annox:annotate>
</jxb:bindings>

i、 e.在annox:annotate元素中保留未指定的名称属性。

这会在为每个复杂类型生成的类上放置一个无属性的XmlRootElement注释,在这种情况下:

@XmlRootElement
public class User {
...
}

@XmlRootElement
public class UserList {
...
}

由于XmlRootElement的工作方式,这就是您所需要的。如果没有为name元素指定值,则默认情况下它是从类名派生的(请参见Oracle文档-示例1

换句话说,上述代码与此完全相同。

@XmlRootElement(name="user")
public class User {
...
}

@XmlRootElement(name="userList")
public class UserList {
...
}

这正是你想要的。

还有一点需要注意的是,xpath选择器没有必要使用,只需使用

 类似资料:
  • 问题内容: 我在配置时无法从WSDL和都存在于同一标准目录中的多个XSD文件生成Java类的问题。 如何在内联XSD中使用jaxb2 maven插件?仅在答案正确地建议使用插件配置中的参数这一点上相关,而该问题确实与内联XSD有关,而我的XSD是外部的。 插件目标参数在此处列出。 我的插件配置是: 我正在用进行测试,但插件忽略了调试输出中看到的 问题答案: 通过检查传递给JAXB XJC的参数的M

  • 对于所有给定的XSD,jaxb2 maven插件不会生成包信息。java文件。(它只生成类)。我们仍然使用Java1.8 我的pom看起来像这样: 有什么想法吗?

  • 我正在尝试使用pluggin从wsdl创建Java类。 在版本1.5中,这段代码来自WSDL中的Generate classes With jaxb2 maven plugin: 但当使用插件版本2.3.1时,我会出现以下错误: 有人知道如何在这个新的插件版本中使用WSDL文件吗?

  • 我试图通过使用WSDL URL生成一个模式,但失败了,得到了这个错误代码: 目标组织的执行默认值。jvnet。jaxb2。maven2:maven-jaxb2-plugin:0.12.3:generate failed:plugin org。jvnet。jaxb2。maven2:maven-jaxb2-plugin:0.12.3或其依赖项之一无法解析:无法解析以下工件:org。jvnet。jaxb

  • 问题内容: 我想将多个xsd模式解组到 同一 文件夹下的不同程序包中。我尝试了两个插件,并且似乎都可以在这两种配置下正常工作,但是在使用maven- jaxb2-plugin的情况下,eclipse插件会无限期地生成类(由于= true),但是如果我不指定forceRegenerate,它将不会生成运行时完全没有第二组和第三组类,我的配置是否有问题? jaxb2-maven-插件 maven-ja

  • 我的pom.xml, 当我在“Netbeans”中使用maven进行构建时,这很好用。 但如果我在EclipseLuna中使用,它会产生如下错误:; 目标组织的执行默认值。jvnet。jaxb2。maven2:maven-jaxb2-plugin:0.12.3:generate失败:执行org时缺少必需的类。jvnet。jaxb2。maven2:maven-jaxb2-plugin:0.12.3: