2009-02-26 60 views
1

我有一個的Flex應用程序需要抓住從JasperReports的服務器報告數據,通過的JasperReports Server Web服務APIFlex Builder 3在生成Web服務消耗代碼方面做得不錯,只有一個例外。如果你問一個目錄列表或報表參數的會計,JR服務器SOAP包裝和的Flex解析它就好了返回純XML 。但是,如果你問一個報告本身,無論是在XMLPDF格式,它回來作爲多MIME消息,一些描述XML作爲第一部分和報告 - 即使報告本身是XML - 作爲第二部分。 Flex不知道如何處理多部分消息,只是抱怨無效XML解析Flex中的多部分SOAP響應?

下面是響應的示例。我目前的策略是做一些字符串解析並單獨管理位。但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並繼續爲PDF添加新的MIME類型!

希望通過Flex 4和HTTPMultiService可以讓生活變得簡單。