2009-02-26 2 views
1

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

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

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

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

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

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

Надеюсь, жизнь будет легкой с Flex 4 и HTTPMultiService.

Смежные вопросы