У меня очень длинный XML как:
<Author>
<id></id>
<name></name>
<title></title>
<address></address>
....
</Author>
Я использую JAXB для синтаксического анализа XML раньше.
JAXBContext.newInstance(Author.class);
И мой Author.java
@XmlRootElement(name = "Author")
public class Author {
private String id;
private String name;
private String title;
private String address;
...
}
Это работает хорошо, но я не хочу каждый раз анализировать весь XML в большой Java-бин.
Итак, я хочу использовать следующий способ:
Создать Commentator.java
@XmlRootElement(name = "Author")
public class Commentator {
private String id;
private String name;
// setters, getters
}
Создать Analyst.java
@XmlRootElement(name = "Author")
public class Analyst {
private String title;
private String address;
// setters, getters
}
И я пишу ниже код для проверки.
JAXBContext context = JAXBContext.newInstance(Analyst.class, Commentator.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
String xml = "<Author> <id>1</id> <name>A</name> <title>B</title> <address>C</address></Author>";
Commentator obj = (Commentator) unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes()));
System.out.println(obj);
Будет напечатан правильный результат.
Если я хочу получить Аналитика.
Analyst a = (Analyst) unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes()));
Я получу исключение: java.lang.ClassCastException: com.xxx.Commentator cannot be cast to com.xxx.Analyst
Я не уверен, что этот способ верен парсеру. Но мне действительно нужен такой функционал.