2009-02-26 51 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可以让生活变得简单。