XStream: UnknownFieldException - Нет такого поля

1

Я получаю следующее исключение, когда пытаюсь де-сериализовать 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>

Пожалуйста помоги.

благодаря

Теги:
xml-serialization
xstream

2 ответа

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

Отсутствует 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню