繁体   English   中英

使用JAXB的Unmarshalle xml文件

[英]Unmarshalle xml file using 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)

我到底需要检查什么?

您的XML不符合您的架构(XSD),或者至少不符合从XSD生成的JAXB类(或者您以其他某种方式创建的与XSD匹配的JAXB类)。

XSD期望在http://www.example.org/TaxAddressFileDeliveryConfirmation命名空间中使用一个元素: {http://www.example.org/TaxAddressFileDeliveryConfirmation}TaxAddressFileDeliveryConfirmation } TaxAddressFileDeliveryConfirmation但是您的XML文档显示了不合格(无命名空间)的TaxAddressFileDeliveryConfirmation元素

如果要手动创建此XML文件,则可能需要限定如下顶级元素:

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

但是完整的答案取决于您的XSD。

这是一个非常简单的问题,因此您应该在StackOverflow上找到很多类似的问题/答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM