1

我有一个Flex应用程序,它需要通过JasperReports 服务器 Web 服务 API从JasperReports 服务器获取报告数据。Flex Builder 3在生成 Web 服务消费代码方面做得很好,但有一个例外。如果您要求提供目录列表或报告参数的记帐,JR Server会在SOAP包装器中返回纯XML ,而Flex会很好地解析它。但是,如果您要求报告本身,无论是XML还是PDF格式,它都会作为带有一些描述性XML的多部分MIME消息返回作为第一部分,报告——即使报告本身是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äâ
4

1 回答 1

1

我要说的只是我相信的:我可能错了,因为我还没有尝试过。

我认为你没有太多选择。Flex HTTPService(或您使用的任何东西)只能提供这么多(/或这么少)数据格式。见这里。对于任何自定义流,您必须将其作为 an 检索object并通过您自己的解码器传递。Flex 似乎不对 MIME 消息进行任何解析,而是依赖(这也是浏览器的典型行为方式)服务器来识别正在传输的内容。如果服务器只发送一个文本文件但将内容类型更改为说audio/mpeg我认为你会遇到同样的问题。即使 Flex 确实知道如何处理文本。

如果你有时间做这个实验(使用文本文件作为 MIME 类型的视频或任何你喜欢的东西)请告诉我们。

同时,您可以查看SerializationFilter并继续为 PDF 添加新的 MIME 类型!

希望 Flex 4 和HTTPMultiService让生活变得轻松一些。

于 2009-02-26T18:22:14.070 回答