Я получаю следующее исключение, когда пытаюсь де-сериализовать xml для java-объекта.
com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter $ UnknownFieldException: Нет такого поля xmlserializer.EntityFields.EntityFields.
Я видел ваше решение по следующей ссылке, но для меня это не работает: UnknownFieldException - нет такого поля
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>
Пожалуйста помоги.
благодаря
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());
EntityFields.entityFields
в EntityFields.entityFields
Ваш код был верным. Это был XML файл, который не соответствовал коду: в нем отсутствовало поле уровня "EntityFields" объекта 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>
Чтобы получить этот ответ, я сначала сгенерировал соответствующий XML файл с самим XStream.