main()
метод является статическим, поэтому он может получить доступ только к статическим членам вашего класса. Это не проблема JAXB. Так работает язык.
Внутренний класс является своего рода членом. Нестатический внутренний класс может вызывать нестатические методы внешнего класса, т. Е. Может обращаться к экземпляру внешнего класса (напрямую, используя 'HighlevelClass.this' или напрямую, вызывая методы или получая доступ к полям).
Вот почему вы должны определить свой внутренний класс как статический. Если вы не хотите этого делать, вы можете либо сделать свой класс обычным классом верхнего уровня, либо переместить свой jaxb-код в метод экземпляра и создать экземпляр своего класса перед его использованием:
public static void main(String args[]) throws JAXBException {
new HighlevelClass().jaxbTest();
}
private void jaxbTest() throws JAXBException {
HighlevelClass HClass = new HighlevelClass();
Employee john = HClass.new Employee();
john.firstName = "John";
john.middleName = "Robert";
john.lastName = "Doe";
john.id = 1;
// write it out as XML
final JAXBContext jaxbContext = JAXBContext.newInstance(HighlevelClass.Employee.class);
}