web-dev-qa-db-ja.com

Prolog SAXParseExceptionではコンテンツは許可されません

Webサービスを呼び出そうとしていますが、奇妙な動作に直面しています。サーバーでWebサービスが実行されていますが、コードが開かれていないため、壁の向こう側で何が起こっているのかわかりません。サービスの所有者は、テキストボックスに入力して表示されるWebベースのテストクライアントUIを公開していますテスト目的への応答。この入力ボックスは、以下の形式で入力を取得しています。

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

このUIでは正常に動作しますが、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>

生成された文字列のタイミングを以下のようにした

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

しかし、何が間違っているのかを見つけることができません、同じXMLのテストページのUIで動作する検索として、入力XMLに何らかの問題があると確信しています

この点での助けは非常にappricatedです

43
Umesh Awasthi

このエラーは、おそらく実際のXMLコンテンツの前のバイトオーダーマーク(BOM)に関連しています。 SAXParserがドキュメントを正しく処理できるように、返された文字列を解析してBOMを破棄する必要があります。

あなたは可能な解決策を見つけるでしょう こちら

60
weltraumpirat

単純に削除するには、xmlファイルをメモ帳に貼り付けます。最初のタグの前に余分な文字が表示されます。削除してファイルに貼り付けます-bof

3
phill

このエラーは、wsdlまたはxsdファイルに検証エラーがある場合に発生する可能性があります。たとえば、wsdl2Javaを実行してwsdlファイルを変換してクライアントを生成しているときにも同じ問題が発生しました。私のxsdの1つでは、次のように定義されていました

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

SchemaLocationが空だった場所。 schemaLocationに適切なデータを提供することで問題が解決しました。

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

XMLを確認してください。有効なxmlではありません。

プロローグは、xmlバージョン情報を含む最初の行です。 xmlに含めなくてもかまいません。

このエラーは、ドキュメントの先頭でパーサーが無効なタグを読み取るとスローされます。通常、プロローグが存在する場所。

例えば.

  1. Root /> <ドキュメント>
  2. ルート<ドキュメント>
2
Sorter

私は同じ問題に直面しました。 4つのアプリケーションサーバーで実行されているアプリケーションで、WebサービスWSDLの1つに無効なスキーマの場所が記載されているため、ハングしたスレッドがサーバーで生成されます。 appliucationsは頻繁にダウンしました。スキーマLocationを修正した後、問題は解決しました。

0
Swapnil Galgate