JAXB schemagen 如何为两个字段生成选择?

标签 jaxb schemagen

我有java类:

public class ActivityAddress {

    @XmlElement(name = "Elem1", required = false)
    private String elem1;

    @XmlElement(name = "Elem2", required = false)
    private String elem2;

    @XmlElement(name = "PostIndex", required = true)
    private String postIndex;
}   

我想获得这样的架构:

<xs:complexType name="ActivityAddress">
<xs:sequence>
  <xs:choice minOccurs="0">
    <xs:element name="Elem1" type="xs:string"/>
    <xs:element name="Elem2" type="xs:string"/>
  </xs:choice>
  <xs:element name="PostIndex" type="xs:string"/>
</xs:sequence>



所以必须选择两个字段“Elem1”和“Elem2”。

像这样的决定:
@XmlElements({
    @XmlElement(name = "Elem1", type = String.class, required = false),
    @XmlElement(name = "Elem2", type = String.class, required = false)
})
private String elem;

不适合我,因为在 java 类中我需要有两个字段。

Ноw 我能做到吗?任何人都可以帮忙吗?

最佳答案

生成 XML 模式

对于以下 Java 类:

public class ActivityAddress {

    @XmlElement(name = "Elem1", required = false)
    private String elem1;

    @XmlElement(name = "Elem2", required = false)
    private String elem2;

    @XmlElement(name = "PostIndex", required = true)
    private String postIndex;
}   

您将获得如下所示的 XML 模式,没有办法按照您希望的方式生成选择。

<xs:sequence>
    <xs:element name="Elem1" type="xs:string" mincOccurs="0"/>
    <xs:element name="Elem2" type="xs:string" minOccurs="0"/> 
    <xs:element name="PostIndex" type="xs:string"/>
</xs:sequence>

指向手工制作的 XML 模式

但是,您可以生成一个 XML 模式,然后自己修改它,然后告诉 JAXB 使用它。这是通过包级别 @XmlSchema 完成的注解。

包信息.java

@XmlSchema(location="http://www.example.com/foo/mySchema.xsd")
package com.example.foo;

关于JAXB schemagen 如何为两个字段生成选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26680029/

相关文章:

java - 解码 Dozer 映射文件以提供映射库

java - jaxb 和 jsr303

java - 如何在 Java 11 中调用 schemagen?

ant - schemagen ant 任务忽略 package-info.java

java - 是否有可能让 maven-jaxb-schemagen-plugin 与 Java 7 一起工作?

java - 从 build.xml 调用时,linux 中的 jaxb schemagen 问题。找不到源文件?

spring-boot - 通过 Spring Boot 调用 SOAP Web 服务失败并出现未经授权的 401 异常

java - 实例化网络服务

java - 在 JAXB 中注册所有对象创建事件

java - 阻止 schemagen 将父类(super class)添加到模式中?