Я пытаюсь сделать очень «абстрактный» метод для преобразования любого типа объекта в XML-String и наоборот, используя JAXB (javax.xml.bind.*
). Я получаю очень странную ошибку, о которой я не знаю смысла.JAXB UnmarshallException неожиданный элемент, но «Ожидаемые элементы (нет)»
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Incident"). Expected elements are (none)
Я искал множество решений в google и stackoverflow, но их решение, похоже, не помогает. Здесь я столкнулся с тупиком.
Мой метод конвертер
public Object convertXmlToObject(String string, Class c) throws ConversionException {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(c.getClass());
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
InputStream stream = new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8));
Object converted = jaxbUnmarshaller.unmarshal(stream);
return converted;
} catch (JAXBException e) {
e.printStackTrace();
throw new ConversionException("Could not convert the message to an Object", e);
}
}
где я вызываю метод
public void generateIncidentReport(Incident incident) throws RepositoryException, ConversionException {
ConversionTool conversionTool = new Converter();
String xmlMessage = conversionTool.convertObjectToXml(incident);
//...
}
Мой Incident класс (который имеет ал необходимые аннотаций)
@XmlRootElement(name = "Incident")
@XmlAccessorType(XmlAccessType.FIELD)
public class Incident {
@XmlElement(name = "shipId")
private int shipID;
@XmlElement(name = "incidentType")
private String type;
@XmlElement(name = "action")
private String action;
@XmlElement(name = "centraleID")
private String centraleID;
@XmlElement(name = "Ship")
private Ship ship;
public Incident() {
}
//getters and setters
}
и последний XML-строка
<Incident><incidentType>Medisch noodgeval</incidentType><shipId>1234567</shipId></Incident>
Черт возьми, как я мог быть настолько слепым, это, очевидно, сработало. Вот почему программирование более 18 часов прямо не является хорошей идеей. Урок хорошо изучен, собираюсь схватить кофе. – Edward