当前位置: 首页 > 知识库问答 >
问题:

Java解析XML文档时出现“Prolog中不允许内容”错误

范鸿
2023-03-14

我试图在Java运行一个程序,它接受一个自定义的XML文件并对其进行解析。我正在使用XML文件进行存储。我在错误日志中得到以下错误。

 WARN - OtherFault:
javax.xml.bind.UnmarshalException: Content is not allowed in prolog.
 - with linked exception:
[org.xml.sax.SAXParseException: Content is not allowed in prolog.]
        at com.wsc.cca.ns20100530.fault.xml.impl.runtime.SAXUnmarshallerHandlerImpl.handleEvent(Unknown Source)
        at com.wsc.cca.ns20100530.fault.xml.impl.runtime.ErrorHandlerAdaptor.propagateEvent(Unknown Source)
        at com.wsc.cca.ns20100530.fault.xml.impl.runtime.ErrorHandlerAdaptor.fatalError(Unknown Source)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
     at com.wsc.cca.ns20100530.fault.xml.impl.runtime.ErrorHandlerAdaptor.fatalError(Unknown Source)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
        at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1039)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at com.wsc.cca.ns20100530.fault.xml.impl.runtime.UnmarshallerImpl.unmarshal(Unknown Source)
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
        at com.cts.util.CCARetrieveThread.run(CCARetrieveThread.java:325)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)

XML文件的开头包括:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<retrieveResponse xmlns="urn:wsc.com/cca/2010/05/30">
    <Number>1234</Number>
    <Info>
        <ID>12</ID>
        <Status>ACTIVE</Status>
        <ClosedDate xsi:nil="true"/>
        <Info>
            <To>1</To>
            <From>2</From>
            <Date>2011-05-16-04:00</Date>
        </Info>
        <Multi>true</Multi>
        <CardExpiryDate>2012-12-03-05:00</CardExpiryDate>
    </Info>
    <PInfo>
        <PID>000005471</PID>
        <Title xsi:nil="true"/>
        <FName>TAYLOR</FName>
        <LName>NGWHIP</LName>
        <Language>en</Language>
        <PRelationship>PRIMARY</PRelationship>
        <Number>1234</Number>
        <TravelVIP xsi:nil="true"/>
        <DesignatedUser1 xsi:nil="true"/>
            <DesignatedUser2 xsi:nil="true"/>
        </PInfo>
</retrieveResponse>
</soapenv:Body></soapenv:Envelope>

程序能够读入XML文件。我得到了上面的错误。下面是一段代码片段:

if (pAWSType == Constants.AWS_CASHBACK) {
    sLogger.info("Setting stub parameter for Cashback");
    File lStubFile = new File(lConfig.getString("com.CCAWS.STUB.FilePath")+"CCBResponse-"+pAcctNum+".xml");
    if (!lStubFile.exists()) {
        mRetrieveThread = new CCARetrieveThread(new File(lConfig.getString("com.CCAWS.STUB.FilePath")+"CCBResponse.xml"));      
    } else {
        mRetrieveThread = new CCARetrieveThread(lStubFile);
    }
} else {
    sLogger.info("Setting stub parameter for Travel Points");
    File lStubFile = new File(lConfig.getString("com.CCAWS.STUB.FilePath")+"CCAResponse-"+pAcctNum+".xml");
    if (!lStubFile.exists()) {
        mRetrieveThread = new CCARetrieveThread(new File(lConfig.getString("com.CCAWS.STUB.FilePath")+"CCAResponse.xml"));      
    } else {
        mRetrieveThread = new CCARetrieveThread(lStubFile);
    }
}

在我看来,我的XML文件的prolog中没有无效的内容。我想不出有什么问题。请帮帮忙。多谢了。

共有1个答案

钦良弼
2023-03-14

这通常意味着在xml文件的开头有一些隐藏字符。

尝试用编辑器打开它,查看所有字符,并确保没有隐藏字符。

 类似资料:
  • 这是一个XML文档(XML声明和XSLT处理指令之前的句子和空格是输入的一部分): 我正在解析XML并使用XPath。在大多数XML文件中,第一行包含一些文本或空格(参考上面的XML) 如果没有前导文本,则会成功解析,但如果出现任何文本,则会产生以下错误: [致命错误]:1:1:Prolog中不允许有内容。 我怎么能绕过这件事? 我正在使用的代码: 我可以手动删除文本并执行,但我需要在我的代码中解

  • 问题内容: 我正在尝试调用Web服务,但是遇到了奇怪的行为。我们的服务器上正在运行一个Web服务,但是该代码未向我们开放,因此无法看到墙后发生了什么。该服务的所有者公开了基于Web的测试客户端UI,该UI在文本框中输入内容,并显示对测试目的的响应。此输入框采用以下提到的格式输入 它在此UI上工作正常,但是当我尝试通过Java代码调用此Web服务时,它也将获得连接以及被该服务授权,但是当我尝试调用上

  • 我有一个包含XML(包括主体和元数据)的字符串对象。当我试图解析它时,我得到以下错误: 组织。xml。萨克斯。SAXParseException;行号:1;列数:1;prolog中不允许包含内容 我尝试使用函数,但它没有帮助。我需要一些关于如何编辑我的XML的帮助,以便允许它。

  • 我有一个用UTF-16 LE编码的超级简单的XML文档。 我这样加载它(使用): 我通过保存文件并用十六进制编辑器检查它,检查了没有额外的BOM/垃圾符号(前导或任何地方)。XML格式正确。 但是,我仍然得到以下错误: 我上下搜索了这个错误,但他们都说这是BOM的错误,我(据我所知)已经证实不是这样。还有什么不对劲?

  • 我正在使用IntelliJ Idea 2017.2。而我的项目是Gradle构建的多模块项目。我已经给出了我的项目的一个版本。然后它就坠毁了。我重新启动了IntelliJ,得到了以下消息 文件->使缓存无效/重新启动 这次我又犯了一个错误。 我再次尝试项目。但总是得到相同的错误。我搜索了throguh互联网,得到了以下问题。

  • 首先,我已经详尽地检查了以下问题,这个问题似乎不是一回事: SAXParseException:Prolog中不允许内容 org.xml.sax.SAXParseException:Prolog中不允许内容 在GAE上解析完全有效的XML时“Prolog中不允许有内容” Prolog SAXParserException中不允许包含内容 这些似乎都归结为两件事: 在开始的标记之前有一个或多个(可能