Bishnu
Bishnu

Reputation: 101

XStream: UnknownFieldException - No such field

I am getting following exception, when I try to de-serialize xml to java object.

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field xmlserializer.EntityFields.EntityFields.

I saw your solution at the following link, but it doesn't work for me: 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;
    }       
}

main class:

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

xml contents:

                             <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>

Please help.

Thanks

Upvotes: 1

Views: 8176

Answers (2)

manuelvigarcia
manuelvigarcia

Reputation: 2094

Missing EntityFields.entityFields in .XML

Your code was correct. It was the XML file that was not corresponding to the code: it was missing the level 'entityFields' field of EntityFields.

EntityFields has only one field, but it was not listed in the XML. Adding the <entityFields></entityFields> pair makes the code work.

        <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>

To get this answer, I first generated the corresponding XML file with XStream itself.

Upvotes: 0

Bishnu
Bishnu

Reputation: 101

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

Upvotes: 4

Related Questions