Ошибка при разборе XML с помощью JDOM - содержимое не разрешено в прологе - PullRequest
1 голос
/ 01 февраля 2011


Я получаю эту ошибку при разборе XML-файла с использованием JDOM.
Что происходит, я получаю поток данных, который представляет собой XML в сочетании с PDF в качестве вложения в него. Поэтому, когда я пытаюсь создать документ об этом, эта ошибка выдается.
Я попытался напечатать этот поток, и на консоли я получаю следующее: Это с большим количеством ненужных символов (содержимое PDF), но в Wordpad это выглядит так -

------=_Part_2_23286828.1296553488632
Content-Type: text/xml; charset=utf-8

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
....
....
....
    <Attachment>
        <URI>Filename.pdf</URI>
    </Attachment>
</SOAP-ENV:Envelope>
------=_Part_2_23286828.1296553488632
Content-Type: application/pdf; name="Filename.pdf"
Content-Transfer-Encoding: binary
Content-ID: </Attachment[1]/URI[1]>
Content-Disposition: attachment; filename="Filename.pdf"

%PDF-1.4
%âãÏÓ
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 579/Length 52722/Height 480/Filter/DCTDecode>>stream
ÿØÿà 

Обратите внимание, что xml между <SOAP-ENV:Envelope> и </SOAP-ENV:Envelope> правильно сформирован.
Как я мог пойти и создать документ JDOM из этого? Я полагаю, удалив содержимое до и после тегов xml start / end, но как это сделать?
Я прочитал, что BOMInputStream от Apache IO Commons полезен, но я верю, что он в версии 2. * и я использую версию 1.3.1

Надеюсь, это объясняет мою проблему, если не, пожалуйста, дайте мне знать.
Спасибо.

UPDATE
Сначала я не осознавал, что это будет так громоздко.
На самом деле, я делаю вызов от одного сервлета к другому (doPost), используя HttpURLConnection. Возврат в виде этого потока.
Теперь я также пытаюсь выяснить, могу ли я каким-либо образом извлечь часть XML, используя некоторые методы, предоставляемые Http / URLConnection.
Цените, если кто-нибудь может пролить немного света на это.

1 Ответ

1 голос
/ 01 февраля 2011

Это сообщение соответствует спецификации SOAP с вложением (http://www.w3.org/TR/SOAP-attachments).. В java способ синтаксического анализа этих сообщений заключается в использовании реализации SAAJ (API-интерфейс Soap with Attachments для Java: http://download.oracle.com/javaee/5/tutorial/doc/bnbhf.html.)). различных реализаций SAAJ. Мой личный фаворит - реализация Spring-WS, другой вариант - Apache Axiom.

Я бы предложил вам использовать Spring-WS или Apache Axis для обработки этого сообщения, а не пытаться сделать это вручную из входного потока. Вы пытаетесь сделать это на стороне сервера или на стороне клиента?

...