XStream:UnknownFieldException - 没有这样的字段

时间:2014-04-22 11:54:21

标签: java xml-serialization xstream

当我尝试将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>

请帮忙。

由于

2 个答案:

答案 0 :(得分:4)

    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());

答案 1 :(得分:0)

.XML中缺少EntityFields.entityFields

您的代码是正确的。这是XML文件,它与代码不对应:它缺少EntityFields的level'entityFields'字段。

EntityFields仅具有一个字段,但未在XML中列出。添加<entityFields></entityFields>对可使代码正常工作。

        <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文件。