Unmarshalle xml файл с использованием JAXB

Этот вопрос может быть задан раньше, но я попробовал почти все решения, опубликованные ранее. Я совершенно новичок в этом, и я не могу понять, где проблема:

Ниже приведен мой XML файл:

<?xml version="1.0" encoding="UTF-8"?>
<TaxAddressFileDeliveryConfirmation>
    <ReturnInfo>
    <ErrorCode>FAILURE</ErrorCode>
    <ErrorMessage>abc.
    </ErrorMessage>
</ReturnInfo>
<TaxAddressFileDeliveryNotification>
    <FileNameInput>abc
    </FileNameInput>
    <FileNameOutput>abc
    </FileNameOutput>
    <MessageCount>20000</MessageCount>
    <ReplyMessageSubject>abc
    </ReplyMessageSubject>
    <ProcessingOption NAME="TAR">Y</ProcessingOption>
</TaxAddressFileDeliveryNotification>
</TaxAddressFileDeliveryConfirmation>

Ниже приведен код Java:

public class CheckSampleXMLUnmarshall {
    public static void main(String[] args) {
        try {

            File file = new File(
                    "Sample.xml");
            JAXBContext jaxbContext = JAXBContext
                    .newInstance(TaxAddressFileDeliveryConfirmation.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            Object resposeObj = JAXBIntrospector.getValue(jaxbUnmarshaller
                    .unmarshal(file));
            System.out.println(resposeObj);

        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Я получаю следующую ошибку:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TaxAddressFileDeliveryConfirmation"). Expected elements are <{http://www.example.org/TaxAddressFileDeliveryNotification}TaxAddressDeliveryNotification>,<{http://www.example.org/TaxAddressFileDeliveryConfirmation}TaxAddressFileDeliveryConfirmation>
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3065)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189)
    at CheckSampleXMLUnmarshall.main(CheckSampleXMLUnmarshall.java:20)

Что именно мне нужно проверить?

0
20 июля '16 в 16:30
источник поделиться
1 ответ

Ваш XML не соответствует вашей схеме (XSD) или, по крайней мере, не соответствует классам JAXB, которые были сгенерированы из XSD (или которые вы создали каким-либо другим способом для соответствия XSD).

XSD ожидает элемент в пространстве имен http://www.example.org/TaxAddressFileDeliveryConfirmation: {http://www.example.org/TaxAddressFileDeliveryConfirmation}TaxAddressFileDeliveryConfirmation но ваш XML-документ показывает неквалифицированное (без пространства имен) TaxAddressFileDeliveryConfirmation

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

<?xml version="1.0" encoding="UTF-8"?>
<tns:TaxAddressFileDeliveryConfirmation xmlns:tns="http://www.example.org/TaxAddressFileDeliveryConfirmation">
 ...

Но полный ответ будет зависеть от вашего XSD.

Это довольно простой вопрос, поэтому вы должны найти много похожих вопросов/ответов, уже существующих в StackOverflow.

1
20 июля '16 в 16:43
источник

Посмотрите другие вопросы по меткам или Задайте вопрос