2017-03-03 70 views
0

下面的例子是我的XML enter link description here如何解决[org.xml.sax.SAXParseException; lineNumber:1; columnNumber:1;内容是不是在序言中不允许的。]

我的编码是

JAXBContext jaxbContext = JAXBContext.newInstance(NewsMLObj.class); 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     XMLReader xr = spf.newSAXParser().getXMLReader(); 

     // to bypass XML DocType and Entity as Jap did not provide proper XML 
     xr.setFeature("http://xml.org/sax/features/validation", false); 
     xr.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); 
     xr.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
     xr.setFeature("http://xml.org/sax/features/external-general-entities", false); 
     xr.setFeature("http://xml.org/sax/features/external-parameter-entities", false); 
     xr.setFeature("http://xml.org/sax/features/use-entity-resolver2", false); 

     InputSource is = new InputSource(new FileReader(factoryType.serverXML.getInputFile2() + filename)); 
     SAXSource source = new SAXSource(xr, is); 
     out.println("input source=" + is); 
     javax.xml.bind.Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
     out.println("jaxbUnmarshaller =" + jaxbUnmarshaller); 
     NewsMLObj nmo = (NewsMLObj) jaxbUnmarshaller.unmarshal(source); 

运行 “NMO” 时,有错误“javax.xml.bind.UnmarshalException - 与链接的异常: [org.xml.sax.SAXParseException; LINENUMBER:1;得到columnnumber:1;内容不会在序言不允许的。]”

javax.xml.bind.UnmarshalException 
- with linked exception: 
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.] 
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(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) 
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) 
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source) 
at com.n2n.NekkeiFlashNews.client.imp.PacketToObjectNewsHostServer.processRawNews(PacketToObjectNewsHostServer.java:83) 
at com.n2n.NekkeiFlashNews.client.imp.NewsRawFileReceiverThread.run(NewsRawFileReceiverThread.java:57) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) 
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
... 7 more 

它是我的编码有问题吗?如何解决我的问题?

感谢和问候 沙龙

+0

看起来你的XML无效。如果在开头有非打印字符,请使用十六进制编辑器查看 – Jens

+0

@Jens如何说XML无效? –

+0

请提供建议吗?我应该怎么做? –

回答

0

看来,你的XML文件序言以前写的一些数据。 应该有字符串之前什么都没有,看起来像这样的:

<?xml version="1.0" encoding="UTF-8"?> 
+0

我只是检查它之前<?xml有东西...但它是来自其他用户的输入文件,然后我需要解码它..我应该怎么做?我如何更改编码?因为我不能在xml文件中做任何事情 –

+0

在这种情况下,您可以尝试过滤掉不属于此处的东西。简单的方法是先读取字符串,清理并将其推送到SAXParser。如果文件太大 - 那么你可以编写自己的过滤流。 http://www.math.uni-hamburg.de/doc/java/tutorial/essential/io/filtered.html –

0

错误消息“的内容,不得在序言”可能会出现一个伟大的各种原因。它基本上意味着解析器在成功读取文档中第一个有意义的内容之前发现了错误。这可能是(正如消息所暗示的),因为文档以“<”以外的内容开始,但也可能在内容不可读或编码严重时发生。

我会通过检查

new FileReader(factoryType.serverXML.getInputFile2() + filename) 

返回一个Reader是用于阅读的内容,而无需提交的内容解析XML可用开始。

相关问题