Анализ многокомпонентного SOAP-ответа во Flex? - PullRequest
1 голос
/ 26 февраля 2009

У меня есть Flex приложение, которое должно получать данные отчетов с JasperReports Server через API веб-служб JasperReports Server . Flex Builder 3 отлично справляется с генерацией кода потребления веб-служб, за одним исключением. Если вы запрашиваете список каталогов или учет параметров отчета, JR Server возвращает простой XML в оболочке SOAP и Flex это просто отлично. Однако, если вы запрашиваете сам отчет, будь то в формате XML или PDF , он возвращается как составное сообщение MIME с некоторым описательным XML в качестве первой части, а отчет - даже если сам отчет XML - в качестве второй части. Flex не знает, что делать с составными сообщениями, и просто жалуется на недействительный XML .

Вот пример ответа. Моя текущая стратегия заключается в том, чтобы выполнять синтаксический анализ строк и управлять битами индивидуально. Но есть ли у Flex встроенные методы для этого? (Я не смог их найти.)

------=_Part_2_27050467.1235668849951
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <0F082AF1DAF83B3077B1867B4FC8AAA6>

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
    <ns1:runReportResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://axis2.ws.jasperserver.jaspersoft.com">
        <runReportReturn xsi:type="xsd:string">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;operationResult version=&quot;2.0.1&quot;&gt;\n\t&lt;returnCode&gt;&lt;![CDATA[0]]&gt;&lt;/returnCode&gt;\n&lt;/operationResult&gt;\n
        </runReportReturn>
    </ns1:runReportResponse>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_2_27050467.1235668849951
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-Id: <report>

%PDF-1.4\n%âãÏÓ\n1 0 obj <</Filter/FlateDecode/Length 29>>stream\nx+är\ná26S°00S\bIár\rá\näâ

1 Ответ

1 голос
/ 26 февраля 2009

То, что я собираюсь сказать, - это только то, во что я верю: я могу ошибаться, поскольку я не пробовал это.

Не думаю, что у тебя есть большой выбор. Flex HTTPService (или что вы используете) может предложить только очень много (или очень мало) форматов данных. Смотрите здесь . Для любого пользовательского потока вам нужно будет извлечь его как object и передать через собственный декодер. Похоже, что Flex не выполняет синтаксический анализ сообщения MIME, но зависит от (а также от того, как ведут себя браузеры) сервера, чтобы идентифицировать передаваемый контент. Если сервер только отправляет текстовый файл, но изменяет тип содержимого на «audio/mpeg», я думаю, у вас возникнет та же проблема. Даже когда Flex знает, как правильно обрабатывать текст.

Если вы когда-нибудь сможете приступить к проведению этого эксперимента (с текстовыми файлами в виде видео MIME-типа или любыми другими, которые вам нравятся), сообщите нам.

Тем временем вы можете взглянуть на SerializationFilter , а затем добавить новый тип MIME для PDF!

Надеюсь, жизнь будет немного проще с Flex 4 и HTTPMultiService .

...