org.xml.sax.SAXParseException:prolog中不允许使用内容
我有一个基于Java的Web服务客户端连接到Java Web服务(在Axis1框架中实现)。
我在我的日志文件中遇到以下异常:
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:114)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:198)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
这通常是由XML声明之前的空白引起的,但它可以是任何文本 ,如短划线或任何字符。 我经常说白色空间是因为人们认为空白总是可以忽略的,但在这里并不是这样。
另一件经常发生的事情是一个UTF-8 BOM (字节顺序标记),如果将XML文档作为字符流传递给XML解析器而不是作为字节流,则可以将XML声明视为空白。
如果使用模式文件(.xsd)来验证xml文件,并且其中一个模式文件具有UTF-8 BOM,则会发生同样的情况。
尝试在prolog中的encoding="UTF-8"
字符串和终止?>
之间添加一个空格。 在XML中,prolog在文档开始处指定了这个括号 - 问号分隔元素(而stackoverflow中的标记序言指的是编程语言)。
补充:是否在你的文档的序言部分之前? 那将会是错误,在prolog前面有数据-<?xml version="1.0" encoding="UTF-8"?>
。
其实除了Yuriy Zubarev的邮政
将不存在的xml文件传递给解析器时。 例如你通过
new File("C:/temp/abc")
当文件系统上只存在C:/temp/abc.xml文件时
在任一情况下
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
document = builder.parse(new File("C:/temp/abc"));
要么
DOMParser parser = new DOMParser();
parser.parse("file:C:/temp/abc");
所有给出相同的错误信息。
非常令人失望的错误,因为以下跟踪
javax.servlet.ServletException
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
...
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
... 40 more
没有说'文件名不正确'或'这样的文件不存在'的事实。 在我的情况下,我绝对正确的XML文件,并花了2天来确定真正的问题。
链接地址: http://www.djcxy.com/p/34923.html上一篇: org.xml.sax.SAXParseException: Content is not allowed in prolog
下一篇: org.jdom.input.JDOMParseException: Content is not allowed in trailing section