之前可能会问过这个问题,但我已经尝试了之前发布的几乎所有解决方案。我对此很陌生,我无法弄清楚问题出在哪里:
以下是我的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 :(得分:1)
您的XML不符合您的架构(XSD),或者至少它不符合从XSD生成的JAXB类(或者您以其他方式创建的JAXB类以匹配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上找到很多类似的问题/答案。