【问题标题】:XStream: UnknownFieldException - No such fieldXStream: UnknownFieldException - 没有这样的字段
【发布时间】:2014-06-06 18:40:07
【问题描述】:

当我尝试将 xml 反序列化为 java 对象时,出现以下异常。

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException:没有这样的字段 xmlserializer.EntityFields.EntityFields。

我在以下链接中看到了您的解决方案,但它对我不起作用: UnknownFieldException - No such field


package xmlserializer;

public class EntityFields {

    private List<EntityField> entityFields = new ArrayList<EntityField>();
    public List<EntityField> getEntityFields() {
        return entityFields;
    }
    public void setEntityFields(List<EntityField> entityFields) {
        this.entityFields = entityFields;
    }
}

package xmlserializer;

public class EntityField {

    private String FieldName;
    private String FieldDisplayName;
    private String FieldType;
    private boolean IsMultivalued = false;

    public String getFieldName() {
        return FieldName;
    }
    public void setFieldName(String fieldName) {
        FieldName = fieldName;
    }
    public String getFieldDisplayName() {
        return FieldDisplayName;
    }
    public void setFieldDisplayName(String fieldDisplayName) {
        FieldDisplayName = fieldDisplayName;
    }
    public String getFieldType() {
        return FieldType;
    }
    public void setFieldType(String fieldType) {
        FieldType = fieldType;
    }
    public boolean getIsMultivalued() {
        return IsMultivalued;
    }
    public void setIsMultivalued(boolean isMultivalued) {
        IsMultivalued = isMultivalued;
    }       
}

主类:

    xstream.alias("EntityField", EntityField.class);        
xstream.alias("EntityFields", EntityFields.class);      
EntityFields entityFields = (EntityFields)xstream.fromXML(buff.toString());

xml内容:

                             <EntityFields> 
                    <EntityField>
                        <FieldName>Question 1</FieldName>
                        <FieldDisplayName>some question 1</FieldDisplayName>
                        <FieldType>character varying</FieldType>
                        <IsMultivalued>false</IsMultivalued>
                    </EntityField>              
                    <EntityField>
                        <FieldName>Question 2</FieldName>
                        <FieldDisplayName>some question 2</FieldDisplayName>
                        <FieldType>boolean</FieldType>
                        <IsMultivalued>false</IsMultivalued>
                    </EntityField>              
                    <EntityField>
                        <FieldName>Question 3</FieldName>
                        <FieldDisplayName>some question 3</FieldDisplayName>
                        <FieldType>character varying[]</FieldType>
                        <IsMultivalued>true</IsMultivalued>
                    </EntityField>          
                    </EntityFields>

请帮忙。

谢谢

【问题讨论】:

    标签: java xml-serialization xstream


    【解决方案1】:
        The following solution worked for me:
    
        XStream xstream = new XStream(new DomDriver());
    
        xstream.alias("EntityFields", EntityFields.class);      
        xstream.addImplicitCollection(EntityFields.class, "entityFlds");
        xstream.alias("EntityField", EntityField.class);
    
        EntityFields entityFields = (EntityFields)xstream.fromXML(buff.toString());
    

    【讨论】:

      【解决方案2】:

      .XML 中缺少 EntityFields.entityFields

      您的代码是正确的。这是与代码不对应的 XML 文件:它缺少 EntityFields 的级别“entityFields”字段。

      EntityFields 只有一个字段,但未在 XML 中列出。添加&lt;entityFields&gt;&lt;/entityFields&gt; 对使代码工作。

              <EntityFields> 
      
                  <entityFields>
      
                      <EntityField>
                          <FieldName>Question 1</FieldName>
                          <FieldDisplayName>some question 1</FieldDisplayName>
                          <FieldType>character varying</FieldType>
                          <IsMultivalued>false</IsMultivalued>
                      </EntityField>              
                      <EntityField>
                          <FieldName>Question 2</FieldName>
                          <FieldDisplayName>some question 2</FieldDisplayName>
                          <FieldType>boolean</FieldType>
                          <IsMultivalued>false</IsMultivalued>
                      </EntityField>              
                      <EntityField>
                          <FieldName>Question 3</FieldName>
                          <FieldDisplayName>some question 3</FieldDisplayName>
                          <FieldType>character varying[]</FieldType>
                          <IsMultivalued>true</IsMultivalued>
                      </EntityField>          
      
                  </entityFields>
      
              </EntityFields>
      

      为了得到这个答案,我首先用 XStream 本身生成了相应的 XML 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        相关资源
        最近更新 更多