gpt4 book ai didi

java - 当从模式解码时,序列的顺序在 jaxb 中很重要

转载 作者:行者123 更新时间:2023-11-30 06:38:19 26 4
gpt4 key购买 nike

我有这个架构:

<xs:complexType name="foo">
<xs:sequence>
<xs:element name="oneBar" type="xs:string" minOccurs="0"/>
<xs:element name="twoBar" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>

当我尝试解码时

<foo>
<oneBar>1</oneBar>
<twoBar>2</twoBar>
</foo>

它有效但是当我尝试解码这个 xml 时:

<foo>
<twoBar>2</twoBar>
<oneBar>1</oneBar>
</foo>

我得到一个异常(exception),因为它关心顺序如果我尝试在不使用模式的情况下解码相同的 xml,则它在两种情况下都有效有什么想法吗?

正如 Strawberry 指出的,如果您将 xs:sequence 替换为 sc:any order 并不重要,你们中有人知道我需要在我的类中添加什么注释,以便它将生成 xs:any schmea

通过从 xs:any 架构创建类找到了解决方案您只需使用 XmlType 注释您的类并将 prop order 设置为无,请参阅:

@XmlRootElement
@XmlType(name="foo",propOrder={})
public class Foo {
@XmlElement
public String oneBar;
@XmlElement
public String twoBar;
}

最佳答案

序列要求元素按顺序排列,例如from w3schools页面:-

The indicator specifies that the child elements must appear in a specific order:

在没有模式的情况下解码时,您实际上没有验证 XML。

如果您希望架构不需要特定的顺序,那么应该执行以下操作:-

<xs:complexType name="foo">
<xs:all>
<xs:element name="oneBar" type="xs:string" minOccurs="0"/>
<xs:element name="twoBar" type="xs:string" minOccurs="0"/>
</xs:all>
</xs:complexType>

从 Java 注释的角度来探讨它。如果我有一个名为 Test 的类(class)有两个字符串字段 test1test2 ,注释将是:-

订购的案例,例如使用<sequence>

@XmlType(name="",propOrder={"test1","test2"})
@XmlRootElement(name="test")
public class Test
{
@XmlElement(required=true)
private String test1;
@XmlElement(required=true)
private String test2;
}

无序的情况,例如使用<all>

@XmlType(name="",propOrder={})
@XmlRootElement(name="test")
public class Test
{
@XmlElement(required=true)
private String test1;
@XmlElement(required=true)
private String test2;
}

关于java - 当从模式解码时,序列的顺序在 jaxb 中很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390019/

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