4

サードパーティから ac#.NET アプリケーション経由で提供された Java ベースの Web サービスに xml を送信しようとすると、org.xml.sax.SAXParseException: Content is not allowed in prologエラーが発生します。

スキーマに対して xml を検証し、xml を保持するために使用しているメモリストリームを .xml ファイルに渡し、16 進エディターでファイルを開いて、プロローグに不要な文字がないことを確認しました。なしです。ファイルを開くと、ファイルの最初の文字は

<?xml version="1.0" encoding="utf-8"?>

xml データを Web サービスに送信するために使用するように指定されたクラスは、バイト配列を受け入れます。XmlTextWriterを使用して utf-8 でエンコードされたメモリストリームに xml を作成し、ストリームの内容をバイト配列に送信することが最も直接的な方法であると考えています。

私は多くの調査を行い、この問題に関して見つけたすべての可能性を試しましたが、何も機能しません。誰か助けてくれませんか?前もって感謝します。

ところで、これは Web サービスが私に返すものの一部です。SOAP メッセージのペイロードで、要素はそのように見えますか、それともその前のコンテンツのように xml を読み取ることができますか?

Messages:
Message:

Payload: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http:/
/schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema
-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><postSubmissi
on xmlns="http://service.arm.hud.gov/"><submissionHeader><agcHcsId>1</agcHcsId><
agcName>test</agcName><systemName>123</systemName><cmsSubId>123456</cmsSubId><su
bFlag>0</subFlag></submissionHeader><agcType>test</agcType><submissionData>PD94b
WwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dG5zOlN1Ym1pc3Npb25EYXRhIHhzaTpzY
2hlbWFMb2NhdGlvbj0iaHR0cDovL2dvdi5odWQuYXJtL2FybV9kYXRhYmFnXzNfMS54c2QiIHhtbG5zO
nhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT......etc............................
</submissionData></postSubmission></soap:Body></soap:Envelope>

読みやすくするための xml データは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http:/
    /schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema
    -instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <postSubmissi on xmlns="http://service.arm.hud.gov/">
            <submissionHeader>
                <agcHcsId>1</agcHcsId>
                <agcName>test</agcName>
                <systemName>123</systemName>
                <cmsSubId>123456</cmsSubId>
                <subFlag>0</subFlag>
            </submissionHeader>
            <agcType>test</agcType>
            <submissionData>PD94b
                WwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dG5zOlN1Ym1pc3Npb25EYXRhIHhzaTpzY
                2hlbWFMb2NhdGlvbj0iaHR0cDovL2dvdi5odWQuYXJtL2FybV9kYXRhYmFnXzNfMS54c2QiIHhtbG5zO
                nhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT......etc............................
            </submissionData>
        </postSubmission>
    </soap:Body>
</soap:Envelope>
4

6 に答える 6

4

UTFエンコーディングを削除することで問題を取り除くことができました。どちらの場合も、テキストは実際には UTF-8 でエンコードされていませんでした。

于 2009-05-28T23:13:21.397 に答える
3

この混乱を引き起こしているファイルの上部にバイト順マークがありますか?16進ダンプまたは16進エディターを使用してファイルをダンプまたは編集し、最初の2バイトまたは3バイトをチェックして、ファイルがで始まることを確認します。

于 2009-03-16T04:19:58.387 に答える
0

私はあなたのメッセージを受け取り、それをインデントしました、そしてそれは検証します:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <postSubmission xmlns="http://service.arm.hud.gov/">
            <submissionHeader>
                <agcHcsId>1</agcHcsId>
                <agcName>test</agcName>
                <systemName>123</systemName>
                <cmsSubId>123456</cmsSubId>
                <subFlag>0</subFlag>
            </submissionHeader>
            <agcType>test</agcType>
            <submissionData>
            PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmL *abbreviated data to fit*
            </submissionData>
        </postSubmission>
    </soap:Body>
</soap:Envelope>

このメッセージの直前の何かがどういうわけか同期していないと思います-エラーメッセージは、XMLパーサーが行を見る前にコメントを見ていると思っていることを示しているように見え<?xmlます。

于 2009-03-16T04:11:31.107 に答える
0

C#/ Java XMLの相互運用性とJavaのバイト順序マークの処理(XML宣言の前の2バイトまたは3バイト、およびエンコードのバイト順序の識別)に問題はありませんでした。Javaは有効なBOMとうまく連携しないため、削除する必要があります。バイト配列を導出し、以下を使用して確認してください。

arr[0] == (byte) 0xEF && arr[1] == (byte) 0xBB && arr[2] == (byte) 0xBF

これは、悲しみの原因となる3バイトのバリアントをチェックします:-(

于 2009-03-16T10:03:14.163 に答える
0

hexplorerなどの16進エディターでXMLファイルを開くだけで、この奇妙な文字を表示および削除し、ファイルを保存して、好みのエディター(個人的にはNotepad ++を使用)で開き、ファイルがUTF-8を使用していることを確認できます。エンコーディング:-)

これがお役に立てば幸いです

于 2009-03-16T08:47:36.700 に答える
0

Web サービスは他の (Java) クライアントで正しく動作しますか? 私はこのエラーを何度も受け取りました。エラーの原因は、ライブラリの依存関係の問題でした。私の記憶が正しければ、Java5 に関連する JAXB2 に何か問題がありました。

于 2009-03-25T09:19:05.177 に答える