微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 xsd 生成类并重命名,包括 getter/setter

如何解决从 xsd 生成类并重命名,包括 getter/setter

我正在尝试从 Java 11 中的 xsd 文件生成文件。使用的部分架构是:

  <xs:element name="OptionList">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Option" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Description" type="xs:string" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute name="Code" type="xs:string" use="required"/>
            <xs:attribute name="StatusCode" type="xs:string" use="optional"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

当我使用插件生成代码

<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>

它在一个文件中创建所有内容,如下所示:

@XmlAccessorType(XmlAccesstype.FIELD)
@XmlType(name = "",propOrder = {
    "option"
})
@XmlRootElement(name = "OptionList")
public class OptionList {

    @XmlElement(name = "Option",required = true)
    protected List<OptionList.Option> option;

    public List<OptionList.Option> getoption() {
        if (option == null) {
            option = new ArrayList<OptionList.Option>();
        }
        return this.option;
    }


    @XmlAccessorType(XmlAccesstype.FIELD)
    @XmlType(name = "",propOrder = {
        "description"
    })
    public static class Option {

        @XmlElement(name = "Description")
        protected String description;
        @XmlAttribute(name = "Code",namespace = "urn:schema:common:v1",required = true)
        protected String code;
        @XmlAttribute(name = "StatusCode",namespace = "urn:schema:common:v1")
        protected String statusCode;

        public String getDescription() {
            return description;
        }

        public void setDescription(String value) {
            this.description = value;
        }

        public String getCode() {
            return code;
        }

        public void setCode(String value) {
            this.code = value;
        }

        public String getStatusCode() {
            return statusCode;
        }
        public void setStatusCode(String value) {
            this.statusCode = value;
        }

    }

}

我需要将类拆分为多个文件。我尝试添加 localScopeing="toplevel" 如下:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="2.1"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
    <jxb:globalBindings localscoping="toplevel"/>
</jxb:bindings>

这会生成 Option 对象作为单独的类,但问题仍然是 OptionList 元素和 getter/setter 仍然引用 OptionList.Option 而不是新的 Option 对象。 有没有办法在生成时将它们完全分开并引用生成的类?生成的理想文件是这些:

@XmlAccessorType(XmlAccesstype.FIELD)
@XmlType(name = "",required = true)
    protected List<Option> option;

    public List<Option> getoption() {
        if (option == null) {
            option = new ArrayList<Option>();
        }
        return this.option;
    }
}
@XmlAccessorType(XmlAccesstype.FIELD)
@XmlType(name = "",propOrder = {
    "description"
})
public static class Option {

    @XmlElement(name = "Description")
    protected String description;
    @XmlAttribute(name = "Code",required = true)
    protected String code;
    @XmlAttribute(name = "StatusCode",namespace = "urn:schema:common:v1")
    protected String statusCode;

    public String getDescription() {
        return description;
    }

    public void setDescription(String value) {
        this.description = value;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String value) {
        this.code = value;
    }

    public String getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(String value) {
        this.statusCode = value;
    }

}

解决方法

我无法想出一种方法来按需要执行此操作。我最终修改了原始 xsd 以使其适合我的需要。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。