содержимое не допускается в исключении пролога - PullRequest
4 голосов
/ 16 марта 2009

Я пытаюсь отправить XML в веб-службу на основе Java, предоставленную мне третьей стороной через приложение c # .NET, и я получаю ошибку org.xml.sax.SAXParseException: Content is not allowed in prolog.

Я проверил xml по схеме и передал поток памяти, который я использую для хранения xml, в файл .xml, затем открыл файл с помощью шестнадцатеричного редактора, чтобы убедиться, что в прологе нет ненужных символов и их нет. При открытии первые символы в файле

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

Класс, который мне дали использовать для отправки данных XML в веб-сервис, принимает байтовый массив. Я полагаю, что создание xml с использованием XmlTextWriter в кодированном потоке памяти utf-8, а затем отправка содержимого потока в байтовый массив - самый прямой метод.

Я провел много исследований и перепробовал все возможные варианты решения этой проблемы, которые смог найти, но ничего не помогло. Может ли кто-нибудь помочь, пожалуйста? Заранее спасибо.

Кстати, вот часть того, что веб-сервис возвращает мне. В полезной нагрузке сообщения 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>

Ответы [ 6 ]

4 голосов
/ 29 мая 2009

Мне удалось избавиться от проблемы, удалив кодировку UTF. Похоже, что в обоих наших случаях текст не был в кодировке UTF-8.

3 голосов
/ 16 марта 2009

Есть ли у вас Порядок следования байтов в верхней части файла, который вызывает эту путаницу? Создайте дамп или отредактируйте файл с помощью шестнадцатеричного дампа или шестнадцатеричного редактора, проверьте первые два или три байта и убедитесь, что файл начинается с

0 голосов
/ 25 марта 2009

Правильно ли работает веб-служба с другими (java) клиентами? Я получал эту ошибку довольно много раз, и источником ошибки были проблемы с зависимостями библиотеки - если я правильно помню, что-то с JAXB2 в связи с Java5.

0 голосов
/ 16 марта 2009

У меня не было проблем с совместимостью C # / Java XML и обработкой Java метки порядка байтов (2 или 3 байта, предшествующих объявлению XML и определяющих порядок байтов кодирования). Java не очень хорошо работает с действительной спецификацией, поэтому вам придется ее удалить. Проверьте это путем получения байтового массива и использования:

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

Это проверяет 3-байтовый вариант, который вызывает горе: - (

0 голосов
/ 16 марта 2009

Просто откройте ваш XML-файл с помощью шестнадцатеричного редактора, например hexplorer , и тогда вы сможете увидеть и удалить эти странные символы, сохранить свой файл и открыть в предпочитаемом вами редакторе (лично я использую Notepad ++ ) и убедитесь, что ваш файл использует кодировку UTF-8: -)

Надеюсь, это поможет вам

0 голосов
/ 16 марта 2009

Я только что получил ваше сообщение, с отступом, и оно подтверждает:

<?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.

...