MismatchedInputException при разборе XML с использованием Джексона - PullRequest
1 голос
/ 26 апреля 2019

Может кто-нибудь помочь мне найти то, что я делаю не так здесь.Я должен проанализировать приведенную ниже XML-строку

<?xml version="1.0" encoding="UTF-8"?>
<Person>
   <isActive>true</isActive>
   <id>A01222262</id>
   <name>Bob</name>
   <addresses>
      <address>
         <attributeName>NEWYORK_ADDRESS</attributeName>
         <attributeValue>NY 10003</attributeValue>
      </address>
      <address>
         <attributeName>CALIFORNIA_ADDRESS</attributeName>
         <attributeValue>CA 92336</attributeValue>
      </address>
   </addresses>
</Person>

. Для этого у меня есть три bean-компонента, которые должны отображаться, как показано ниже

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
        name = "",
        propOrder = {"isActive", "id", "name", "addresses"}
)
@XmlRootElement(
        name = "Person"
)
public class Person {
    protected boolean isActive;
    @XmlElement(
            name = "Id"
    )
    protected String id;
    protected String name;
    protected Addresses addresses;
// All Setter and Getter
}

Класс адресов похож на ниже

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(
            name = "Addresses",
            propOrder = {"address"}
    )
    public class Addresses {
        @XmlElement(
                required = true
        )
        protected List<Address> address;
    //All Setter Getter 
}

И класс адресов выглядит следующим образом

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(
            name = "",
            propOrder = {"attributeName", "attributeValue"}
    )
    public class Address {
        @XmlElement(
                required = true
        )
        protected String attributeName;
        @XmlElement(
                required = true
        )
        protected String attributeValue;
    //All Setter Getter 
}

Вот исключение, которое я получаю при разборе

com.fasterxml.jackson.databind.exc.MismatchedInputException:Невозможно создать экземпляр console.interceptor.Address (хотя существует хотя бы один создатель): нет конструктора аргумента строки / фабричного метода для десериализации из значения строки ('NEWYORK_ADDRESS') в [Source: (StringReader);строка: 1, столбец: 173] (через цепочку ссылок: console.interceptor.Person ["address"] -> console.interceptor.Addresses ["address"] -> java.util.ArrayList [0])

Я пытаюсь выполнить синтаксический анализ, как показано ниже

XmlMapper xmlMapper=new XmlMapper();
xmlMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
Person p=xmlMapper.readValue(xmlString,Person.class);  // xmlSting 

Я использую версию Jackson-dataformat-xml 2.9.8.

1 Ответ

0 голосов
/ 26 апреля 2019

Я попробовал ваши классы и смог проанализировать их, как показано ниже. Я дважды проверил версию 2.9.8, чтобы подтвердить. Ура !!

public class StackOverFlowTest {
    public static void main(String[] args){
    JacksonXmlModule module = new JacksonXmlModule();
    module.setDefaultUseWrapper(false);
    XmlMapper xmlMapper = new XmlMapper(module);
    String xmlString="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Person><isActive>true</isActive><id>A01222262</id><name>Bob</name><addresses><address><attributeName>NEWYORK_ADDRESS</attributeName><attributeValue>NY 10003</attributeValue></address><address><attributeName>CALIFORNIA_ADDRESS</attributeName><attributeValue>CA 92336</attributeValue></address></addresses></Person>";
        try {
        Person p=xmlMapper.readValue(xmlString,Person.class);
        System.out.println(p.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...