2010-12-31 16 views
42

Webサービスを呼び出そうとしていますが、奇妙な動作に直面しています。私たちのサーバー上で実行されているWebサービスがありますが、コードは公開されていないため、壁の後ろに何が起こっているか見ることはできません サービスの所有者は、WebベースのテストクライアントUIを公開していますテストpurpose.This入力ボックスに対する応答は下記の形式で入力を取って示しPrologでコンテンツが許可されていませんSAXParserException

<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 

は以下

<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

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を生成するためのコードです何が間違っているのかを知ることができません。一つのことは、同じXMLのテストページUI上での作業として、入力XMLに問題があると確信しています

この点で任意のヘルプは非常には、このエラーは、おそらく前に実際のXMLコンテンツにバイトオーダーマーク(BOM)に関連している

+0

は、私は、エラーメッセージのこの種を取得します。 inputXMLオブジェクトをどこでどのように初期化しますか? – weltraumpirat

+8

これを最上部に追加してみてください。 '<?xml version =" 1.0 "encoding =" UTF-8 "?>' –

+1

@ Org.life.java:私はこのことを何もしなかった:( –

答えて

59

をappricatedています。返されたStringを解析してBOMを破棄する必要があるため、SAXParserは文書を正しく処理できます。

可能な解決策は、hereです。

+3

この「BOM」がHex Editorでファイルを表示していたかどうかを確認しました。最初の3バイトは –

+3

ですが、SAXパーサでこれを行う方法はありませんか?SAX(ハンドラ)に手を加える前にBOMを削除する必要がありますか? –

3

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

2

このエラーは、wsdlまたはxsdファイルに検証エラーがある場合に発生します。たとえば、wsdl2javaを実行してwsdlファイルを変換してクライアントを生成しているときにも、同じ問題が発生します。それは

のschemaLocationが空だった
<xs:import schemaLocation="" namespace="http://MultiChoice.PaymentService/DataContracts" /> 

以下のように定義された私のXSDの一つで 。 schemaLocationに適切なデータを提供することで、私の問題が解決されました。

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

私は同じ問題に直面しました。 4つのアプリケーションサーバー上で動作するアプリケーションと、WebサービスWSDLの1つで説明されているスキーマの場所が無効であるため、ハングしたスレッドがサーバー上に生成されます。申請は頻繁に降りました。スキーマの場所を修正した後、問題は解決しました。

2

XMLを確認します。これは有効なxmlではありません。

Prologはxmlバージョン情報の最初の行です。それは にあなたのXMLにそれを含めないでください。

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

UTF-8 BOMのようにXMLファイルを保存するとき

  1. ルート/> <文書>
  2. ルート<文書>
+0

Prologはプログラミング言語ではありませんか?完全に誤解されています。 Prologでは使用できません "というメッセージが表示されます。 – user2394284

関連する問題