2016-12-29 91 views
1

任何人都可以帮助我找出造成此问题的根本原因。JAXB:.UnmarshalException - 带有链接的异常:[javax.xml.stream.XMLStreamException

XML:

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="https://*******/odata/**/"> 

代码:

 jaxbContext = JAXBContext.newInstance(Entry.class); 
     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 

     XMLInputFactory xif = XMLInputFactory.newFactory(); 

     xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); 
     XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(metaData)); 

     Entry entry = (Entry) jaxbUnmarshaller.unmarshal(xsr); 

类别:

@XmlRootElement(name = "entry") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Entry { 

例ception:

javax.xml.bind.UnmarshalException 
- with linked exception: 
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] 
Message: Content is not allowed in prolog.] 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(Unknown Source) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source) 
+0

确保你的XML没有[在开始一个BOM(HTTP:/ /stackoverflow.com/questions/2599919/java-parsing-xml-document-gives-content-not-allowed-in-prolog-error)。您的XML也缺少一个结束根标签。 – approxiblue

+0

检查了xml文件并且没有垃圾字符。 @approxiblue – thanga

回答

1

转换下面的字符串:

byte[] metaBytes = metaData.getBytes(); 
String input = new String(metaBytes, "UTF-8"); 

使用SAX解析器

 SAXParserFactory parserFactory; 
     parserFactory = SAXParserFactory.newInstance(); 
     parserFactory.setNamespaceAware(false); 
     XMLReader reader = parserFactory.newSAXParser().getXMLReader(); 
     Source er = new SAXSource(reader, new InputSource(new StringReader(input)));