Java 在XSD中声明不同类型的集合

Java 在XSD中声明不同类型的集合,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我有一个API,它返回一组XML对象,这些对象保证可由抽象类表示,但是它们不能作为列表直接访问,因为它们采用以下形式: <Response Timestamp="2019-02-06T13:16:32"> <TypeA [xml attributes]...> ... </TypeA> <TypeB ...> ... </TypeB> ... (Different

我有一个API,它返回一组XML对象,这些对象保证可由抽象类表示,但是它们不能作为列表直接访问,因为它们采用以下形式:

<Response Timestamp="2019-02-06T13:16:32">
    <TypeA [xml attributes]...>
        ...
    </TypeA>
    <TypeB ...>
        ...
    </TypeB>
    ... (Different repeating elements)
</Response>
如何在XSD中指定任何扩展AbstractType的TypeX对象从响应进入Types集合

很高兴提供任何必要的进一步信息,只要它不是我不允许分享的东西


Saw相关问题,但它接受任何元素,并且限制基于名称,而对于这一点,我理想地希望验证收集的元素是否是有效的TypeX对象。

假设您已将每个TypeX定义为XSD中的AbstractType扩展:


...
然后你可以做:

1) XSD选项,如果您确实希望为每个TypeX使用不同的XML元素名称(不推荐,因为在添加新的AbstractType子类型时需要修改响应类型):


2) XML多态性(接近您的建议),更通用,尽管更改了XML形式:


(根据AbstractType实际代表的内容,用有意义的名称替换“something”。)

xml将如下所示:


...
...
... (不同的重复元素)
在这两种情况下,我建议您使用(§3.1.6)或等效扩展,以简化生成的代码,并在必要时将生成的字段转换为复数形式

然后响应类中生成的代码(注意复数形式):
列出一些东西

<xs:complexType name="Response">
    <xs:sequence>
        <xs:element name="Types" type="model:AbstractType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>
public class TypeA extends AbstractType
{
    //Generated source
}