JAXB Unmarshaller - Неожиданное исключение элемента

Я использую синтаксический анализатор JAXB для преобразования XML, отправленного с помощью http-запроса, в объект Java, в то же время проверяя его по моей схеме XSD. Проблема в том, что при вызове метода unmarshal() он вызывает следующее исключение:

javax.xml.bind.UnmarshalException: непредвиденный элемент (uri: " http://www.somedomain.com/", local: "assign"). Ожидаемые элементы (нет)

Если я удаляю пространство имен из моего корневого XML-элемента, оно вызывает то же исключение с пустой частью uri:

javax.xml.bind.UnmarshalException: непредвиденный элемент (uri: "", local: "assign"). Ожидаемые элементы (нет)

Код демаршаллинга:

            ServletInputStream xmlFile = request.getInputStream();

            SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = sf.newSchema(new File("PatientAssignment.xsd"));

            JAXBContext jc = JAXBContext.newInstance(AssignType.class);

            Unmarshaller unmarshaller = jc.createUnmarshaller();
            unmarshaller.setSchema(schema);
            unmarshaller.setEventHandler(new AssignValidationEventHandler(patientResponses));
            assignments = (AssignType) unmarshaller.unmarshal(xmlFile);

Мой класс Java и package-info.java:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AssignType", namespace = "http://www.somedomain.com/", propOrder = {
    "patient"
})
public class AssignType {
    @XmlElement(namespace = "http://www.somedomain.com/", required = true)
    protected List<PatientAssignType> patient;

    /* Getters and setters ommitted */
}

// package-info.java
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.somedomain.com/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

XML я пытаюсь разобрать:

<?xml version="1.0" encoding="UTF-8"?>
<assign xmlns="http://www.somedomain.com/">
    <patientAssign xmlns="http://www.somedomain.com/">
        <firstName>Buddy</firstName>
        <lastName>Holly</lastName>
        <email></email>
        <dob></dob>
        <phone></phone>
                ...
    </patientAssign>
</assign>

Если бы кто-нибудь мог сказать мне, где я иду не так, это было бы очень ценно!

1 ответ

Решение

Вам понадобится @XmlRootElement аннотации на вашем AssignType учебный класс. Вы, вероятно, также хотите добавить name=patientAssign переменной вашего пациента.

Другие вопросы по тегам