内容不允许在Prolog SAXParserException中

我试图调用一个Web服务,但面临一个奇怪的行为。 我们有一个在我的服务器上运行的Web服务,但是代码不对我们开放,所以不能看到墙上发生了什么服务的所有者已经公开了基于Web的testing客户端UI,其在文本框中input并将显示对testing目的的响应。该input框以下述格式input

<CONTENT> <CONTENTID></CONTENTID> <DOCUMENTID>DRI2</DOCUMENTID> <LOCALECODE>en_US</LOCALECODE> <LATEST_VERSION>false</LATEST_VERSION> <INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT> <ACTIVITY_TYPE></ACTIVITY_TYPE> </CONTENT> 

它在这个用户界面工作得很好,但是当我试图通过我的Java代码调用这个Web服务时,它获得连接,以及获得服务的授权,但是当我试图调用上述方法,它给了我下面的错误信息

 AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog. faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace: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 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) 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.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 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) at com.inquira.imwows.generated.ContentServicesSoapBindingStub.getContentRecord(ContentServicesSoapBindingStub.java:262) at com.inquira.prep.GetWebService.getcontentRecord(GetWebService.java:87) at com.inquira.prep.TestWs.main(TestWs.java:13) {http://xml.apache.org/axis/}hostname:umeshawasthi org.xml.sax.SAXParseException: Content is not allowed in prolog. at org.apache.axis.AxisFault.makeFault(AxisFault.java:101) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701) at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 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) at com.inquira.imwows.generated.ContentServicesSoapBindingStub.getContentRecord(ContentServicesSoapBindingStub.java:262) at com.inquira.prep.GetWebService.getcontentRecord(GetWebService.java:87) at com.inquira.prep.TestWs.main(TestWs.java:13) 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 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) ... 11 more 

下面是生成所需XML的代码

 inputXml.append("<CONTENT>"); inputXml.append("<CONTENTID>").append("</CONTENTID>"); inputXml.append("<DOCUMENTID>").append("DRI2").append("</DOCUMENTID>"); inputXml.append("<LOCALECODE>").append("en_US").append("</LOCALECODE>"); inputXml.append("<LATEST_VERSION>").append("false").append("</LATEST_VERSION>"); inputXml.append("<INCREASEVIEWCOUNT>").append("false").append("</INCREASEVIEWCOUNT>"); inputXml.append("<ACTIVITY_TYPE>").append("</ACTIVITY_TYPE>"); inputXml.append("</CONTENT>"); 

生成的XML如下所示

 <CONTENT><CONTENTID></CONTENTID><DOCUMENTID>DRI2</DOCUMENTID><LOCALECODE>en_US</LOCALECODE><LATEST_VERSION>false</LATEST_VERSION><INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT><ACTIVITY_TYPE></ACTIVITY_TYPE></CONTENT> 

我甚至做了生成的string的时间如下所示

 inputXml.toString().trim().replaceFirst("^([\\W]+)<","<"); 

但无法找出什么是错的,有一件事我确信在inputXML中有一些问题,因为它在testing页UI上的工作find相同的XML

这方面的任何帮助都是非常困难的

此错误可能与实际XML内容之前的字节顺序标记(BOM)有关。 您需要parsing返回的string并丢弃BOM,所以SAXParser可以正确处理文档。

你会在这里find一个可能的解决scheme

只需将其删除,将xml文件粘贴到记事本中,即可在第一个标签之前看到额外的字符。 删除它并粘贴回你的文件 – bof

检查XML。 这不是一个有效的XML。

Prolog是xml版本信息的第一行。 它确定不包含在你的XML。

parsing器在文档开始时读取无效标签时,会引发此错误。 通常在序言所在的地方。

例如

  1. 根/> <文档>
  2. 根<文档>

如果您的wsdl或xsd文件中存在validation错误,则可能会出现此错误。 例如,我也运行wsdl2java转换我的wsdl文件来生成客户端时也遇到同样的问题。 在我的一个xsd中定义如下

 <xs:import schemaLocation="" namespace="http://MultiChoice.PaymentService/DataContracts" /> 

schemaLocation是空的。 通过在schemaLocation中提供正确的数据解决了我的问题。

 <xs:import schemaLocation="multichoice.paymentservice.DataContracts.xsd" namespace="http://MultiChoice.PaymentService/DataContracts" /> 

我面临同样的问题。 我们的应用程序在四个应用程序服务器上运行,并且由于Web服务WSDL之一提到了无效的模式位置,挂起的线程在服务器上生成。 appliucations经常倒下。 更正架构位置后,问题得到解决。