По ссылке: Почему AnnotationReader был удален из эталонной реализации JAXB? , вам просто нужно использовать ниже зависимости maven:
com.sun.xml.bind
jaxb-impl
2.2.11
com.sun.xml.bind
jaxb-core
2.2.11
Вам нужно немного реорганизовать код. Также выглядит так, как будто вы не создали одинаковые поля имен в классе модели, это должно быть примерно так: Person.java
@XmlRootElement(name="Person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlElement
private String first;
@XmlElement
private String last;
@XmlElement
private String age;
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Person [first=" + first + ", last=" + last + ", age=" + age + "]";
}
}
Book.java
@XmlRootElement(name="book")
@XmlAccessorType(XmlAccessType.FIELD)
public class Book {
private List person = new ArrayList();
public List getPerson() {
return person;
}
public void setPerson(List person) {
this.person = person;
}
}
ReadXMLFileJaxb.java
public class ReadXMLFileJaxb {
public static void main(String[] args) {
File file = new File(ReadXMLFileDOM.class.getClassLoader().getResource("book.xml").getFile());
try {
JAXBContext context = JAXBContext.newInstance(Book.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Book book = (Book) unmarshaller.unmarshal(file);
System.out.println(book.getPerson().size());
for (int i = 0; i < book.getPerson().size(); i++) {
System.out.println("------------");
System.out.println(book.getPerson().get(i).getFirst());
System.out.println(book.getPerson().get(i).getLast());
System.out.println(book.getPerson().get(i).getAge());
}
} catch (JAXBException e) {
System.out.println(e.getMessage());
}
}
}
Ниже приведен вывод:
3
------------
Kiran
Pai
22
------------
Bill
Gates
46
------------
Steve
Jobs
40
Я только что наткнулся на
<layout type="log4net.Layout.PatternLayout" value="${COMPUTERNAME}"/>
, и, похоже, это работает - интересно, в чем разница между этим и другими предложенными вариантами. например % property {log4net: HostName}
Ознакомьтесь с API PatternString , похоже, вам понадобится использовать свойство% в вашем шаблоне. Также ознакомьтесь с этой статьей , вам может потребоваться ввести имя компьютера в глобальный контекст при запуске приложения.
Интересно, я думаю, что это «Компактный синтаксис параметров», посмотрите последний раздел здесь http://logging.apache.org/log4net/release/manual/configuration. html