Java 在XSD中声明不同类型的集合
我有一个API,它返回一组XML对象,这些对象保证可由抽象类表示,但是它们不能作为列表直接访问,因为它们采用以下形式: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
<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
}