首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >org.xml.sax.SAXParseException: prolog中不允许包含内容

org.xml.sax.SAXParseException: prolog中不允许包含内容
EN

Stack Overflow用户
提问于 2011-02-28 13:54:53
回答 21查看 636.6K关注 0票数 186

我有一个基于Java的web服务客户端连接到Java web服务(在Axis1框架上实现)。

我的日志文件中出现以下异常:

代码语言:javascript
复制
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)
EN

回答 21

Stack Overflow用户

发布于 2011-11-12 22:39:40

实际上除了尤里·祖巴列夫的帖子

当您将不存在的xml文件传递给解析器时。例如,你通过了

代码语言:javascript
复制
new File("C:/temp/abc")

当文件系统上只存在C:/temp/abc.xml文件时

在任何一种情况下

代码语言:javascript
复制
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
document = builder.parse(new File("C:/temp/abc"));

代码语言:javascript
复制
DOMParser parser = new DOMParser();
parser.parse("file:C:/temp/abc");

所有这些都给出了相同的错误消息。

非常令人失望的bug,因为下面的跟踪

代码语言:javascript
复制
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天的时间来确定真正的问题。

票数 35
EN

Stack Overflow用户

发布于 2011-02-28 14:06:07

这意味着XML格式不正确,或者响应主体根本不是XML文档。

票数 11
EN

Stack Overflow用户

发布于 2012-11-08 22:08:17

刚刚花了4个小时跟踪WSDL中的类似问题。事实证明,WSDL使用了XSD,它导入了另一个名称空间XSD。此导入的XSD包含以下内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.xyz.com/Services/CommonTypes" elementFormDefault="qualified"
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:CommonTypes="http://www.xyz.com/Services/CommonTypes">

 <include schemaLocation=""></include>  
    <complexType name="RequestType">
        <....

注意空的include元素!这就是我痛苦的根源。我猜这是上面找不到问题的Egor文件的一个变体。

+1到令人失望的错误报告。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5138696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档