Reputation: 101
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
Reputation: 2094
EntityFields.entityFields
in .XMLYour 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
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