У меня есть файл xml, который уже содержит,
** <? xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<идентификатор клиента = "100">
<возраст> 22 </age>
<имя> naveen </name> </customer> **
для которого мой класс POJO
public class Customer {
String name;
int age;
int id;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getId() {
return id;
}
}
Я пытаюсь развязать это, используя JAXB,
File file = new File("sample.txt");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
System.out.println(customer);
Но я получаю исключение, поскольку
неожиданный элемент (uri: "", local: "customer"). Ожидаемые элементы (нет)
Пожалуйста, помогите мне.
В настоящее время в вашем классе недостаточно информации для JAXB, чтобы узнать, какой класс следует создавать на основе корневого элемента. Вы можете выполнить одно из следующих действий:
@XmlRootElement
в свой класс Customer
чтобы явно сопоставить класс Customer
с корневым элементом customer
. Используйте метод unmarshal
который принимает параметр Class
:
JAXBElement<Customer> je = unmarshaller.unmarshal(source, Customer.class);
Customer customer = je.getValue();
Чтобы получить больше информации
Может быть 2 вопроса
1 - Исправьте формат xml, я мог видеть пробелы в теге, например, вместо использования <use> лучше использовать ниже xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>22</age>
<name>naveen</name>
</customer>
2 - и аннотируйте свой класс Jaxb - используйте ниже
@XmlRootElement
public class Customer {
@XmlElement
String name;
@XmlElement
int age;
@XmlAttribute
int id;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getId() {
return id;
}
}