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

eke*_*ren 2 java xsd jaxb

我有这个架构:

<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>
Run Code Online (Sandbox Code Playgroud)

当我试图解散这个

<foo>
  <oneBar>1</oneBar>
  <twoBar>2</twoBar>
</foo>
Run Code Online (Sandbox Code Playgroud)

它工作,但当我尝试解组这个xml:

<foo>
   <twoBar>2</twoBar>
   <oneBar>1</oneBar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我得到一个excelption因为它关心顺序如果我试图解析相同的xml而不使用模式它在两种情况下都适用任何想法?

正如Strawberry指出的那样,如果用sc替换xs:sequence:任何顺序都不重要,你们中的任何人都知道我需要在我的课程中添加什么注释,这样才能生成xs:任何schmea

通过从xs创建类来找到解决方案:任何模式您只需要使用XmlType注释您的类并将prop命令设置为空,请参阅:

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

Mar*_*tin 5

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

指标指定子元素必须以特定顺序出现:

在没有模式的情况下进行解组时,您实际上无法验证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>
Run Code Online (Sandbox Code Playgroud)

从Java注释的角度来看它.如果我有一个名为类Test有两个字符串字段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;
}
Run Code Online (Sandbox Code Playgroud)

无序的案例,例如使用 <all>

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