gpt4 book ai didi

java - 使用 jaxb 从 xsd 中选择生成 java 类

转载 作者:行者123 更新时间:2023-11-29 07:01:02 26 4
gpt4 key购买 nike

我使用带有 jaxb 的 maven 从模式中创建类。该模式有以下选择:

<tns:choice minOccurs="1" maxOccurs="unbounded">
<tns:element name="video_track" type="tcore:TTrack" minOccurs="1" maxOccurs="1"/>
<tns:element name="audio_track" type="tcore:TTrack" minOccurs="1" maxOccurs="1"/>
</tns:choice>

重要的是,我们想要一个包含x audiotracks 和/或x videotracks 的列表。我们至少需要一个音频或视频轨道!

当我用这个选择生成类时,我得到以下代码:

@XmlElementRefs({
@XmlElementRef(name = "audio_track", type = JAXBElement.class),
@XmlElementRef(name = "video_track", type = JAXBElement.class)
})
protected List<JAXBElement<TTrack>> videoTrackOrAudioTrack;

这不是我们想要的。我想我丢失了信息,因为在 TTracks 列表中我不知道这是视频还是音频。

那么我做错了什么?

在 maven 中我使用 org.jvnet.jaxb2.maven2 版本 0.8.3

最佳答案

不,您不会丢失此信息。

您会得到 JAXBElement<TTrack> 的列表.所以你可以检查e.getName()找出它是音频还是视频轨道。

您可以使用我的 Simplify plugin在单独的属性中获取音频和视频轨道。这与您的架构中的模型不完全相同,但非常接近并且更易于使用。

此自定义:

<xs:complexType name="typeWithReferencesProperty">
<xs:choice maxOccurs="unbounded">
<xs:element name="a" type="someType">
<xs:annotation>
<xs:appinfo>
<simplify:as-element-property/>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="b" type="someType"/>
</xs:choice>
</xs:complexType>

产生:

@XmlElement(name = "a")
protected List<SomeType> a;
@XmlElement(name = "b")
protected List<SomeType> b;

你得到这个模型的原因是 maxOccurs在你的 choice .

也可以考虑使用 xs:xsd: XML 模式的前缀。

关于java - 使用 jaxb 从 xsd 中选择生成 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26138753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com