SimpleXML名称'field'的重复注释

时间:2016-06-08 20:59:16

标签: java android xml simple-framework

我在android上使用simplexml框架来解析服务器上的xml。

示例xml就像

<auto>
    <field name="SubmitLocation" xsi:type="DataTypeLocation">
        <value>
            <country>United States</country>
            <state>CA</state>
        </value>
    </field>
    <field name="SubmitDateTime" xsi:type="DataTypeText">
        <value>2016-06-08T01:10:18Z</value>
    </field>
</auto>

架构文件如下

<xs:element name="auto">
 <xs:complexType>
    <xs:sequence>
        <xs:element type="DataBaseType" name="field" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
 </xs:complexType>
</xs:element>
<xs:complexType name="DataTypeLocation">
  <xs:complexContent>
      <xs:extension base="DataBaseType">
         <xs:sequence>
           <xs:element name="value">
              <xs:complexType>
                 <xs:sequence>
                    <xs:element type="xs:string" name="country" maxOccurs="1" minOccurs="0" />
                    <xs:element type="xs:string" name="state" maxOccurs="1" minOccurs="0" />
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:extension>
   </xs:complexContent>
</xs:complexType>
<xs:complexType name="DataTypeText">
     <xs:complexContent>
       <xs:extension base="DataBaseType">
         <xs:sequence>
           <xs:element type="xs:string" name="value" />
         </xs:sequence>
      </xs:extension>
    </xs:complexContent>
</xs:complexType>

我的模型类如下

@Root
@Order(elements = {"field"})
public class Auto {

    @ElementListUnion(
            {
                      @ElementList(type = CltDataTypeLocation.class),
                      @ElementList(type = CltDataTypeText.class)
            })
    protected List<CltDataBaseType> field;

    public List<CltDataBaseType> getField() {
        if (field == null) {
            field = new ArrayList<CltDataBaseType>();
        }
        return this.field;
    }

}
@Root(name = "DataTypeText")
@Order(elements = {"value"})
public class CltDataTypeText
extends CltDataBaseType
{

    @Element(required = true)
    protected String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

@Root(name = "DataTypeLocation")
@Order(elements = {"value"})
public class CltDataTypeLocation
    extends CltDataBaseType
{

    @Element(required = true)
    protected CltDataTypeLocation.Value value;

    public CltDataTypeLocation.Value getValue() {
        return value;
    }

    public void setValue(CltDataTypeLocation.Value value) {
        this.value = value;
    }


    @Root
    @Order(elements = {
        "country",
        "state"})
    public static class Value {

        @Element
        protected String country;
        @Element
        protected String state;


        public String getCountry() {
            return country;
        }

        public void setCountry(String value) {
            this.country = value;
        }
        public String getState() {
            return state;
        }

        public void setState(String value) {
            this.state = value;
        }
     }

    }

我遇到了异常。

org.simpleframework.xml.core.PersistenceException: Duplicate annotation of name 'field' on @org.simpleframework.xml.ElementListUnion(value=[@org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=class com.example.test.client.formdata.model.CltDataTypeLocation), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=class com.example.test.client.formdata.model.CltDataTypeUser), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=class com.example.test.client.formdata.model.CltDataTypeText)]) on field 'field' protected java.util.List com.example.test.client.formdata.model.Formroot$Auto.field
at org.simpleframework.xml.core.StructureBuilder.union(StructureBuilder.java:225)
at org.simpleframework.xml.core.StructureBuilder.process(StructureBuilder.java:179)
at org.simpleframework.xml.core.ObjectScanner.field(ObjectScanner.java:438)
at org.simpleframework.xml.core.ObjectScanner.scan(ObjectScanner.java:371)
at org.simpleframework.xml.core.ObjectScanner.<init>(ObjectScanner.java:82)
at org.simpleframework.xml.core.ScannerFactory.getInstance(ScannerFactory.java:81)
at org.simpleframework.xml.core.Support.getScanner(Support.java:357)
at org.simpleframework.xml.core.Source.getScanner(Source.java:271)
at org.simpleframework.xml.core.Source.getSchema(Source.java:317)
at org.simpleframework.xml.core.Composite.read(Composite.java:198)
at org.simpleframework.xml.core.Composite.read(Composite.java:148)

为什么抱怨重复字段。我有这些字段的数组,它们根据xsi:type属性

而有所不同

看起来如果你在xml中使用class属性它应该工作。但在我的情况下,我无法修改来自服务器的这个xml

0 个答案:

没有答案