我有一个 Flex 应用程序需要通过 JasperReports服务器Web服务API 从 JasperReports服务器获取报告数据。 Flex Builder 3 可以很好地生成Web服务使用代码,但有一个例外。如果您要求目录列表或报告参数的记帐, JR服务器将在 SOAP 包装中返回纯 XML 并且 Flex < / em>解析它就好了。但是,如果您要求报告本身,无论是 XML 还是 PDF 格式,它都会以多部分 MIME 消息的形式返回,并带有一些描述性< em> 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"><?xml version="1.0" encoding="UTF-8"?>\n<operationResult version="2.0.1">\n\t<returnCode><![CDATA[0]]></returnCode>\n</operationResult>\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äâ
答案 0 :(得分:1)
我要说的只是我所相信的:我可能是错的,因为我没有尝试过。
我认为你没有太多选择。 Flex HTTPService(或您正在使用的任何内容)只能提供这么多(/或很少)的数据格式。见here。对于任何自定义流,您必须将其作为object
检索并通过您自己的解码器传递。似乎Flex不对MIME消息进行任何解析,而是依赖于(通常也是浏览器的行为方式)服务器来识别正在传输的内容。如果服务器只发送文本文件但将内容类型更改为audio/mpeg
,我认为您将遇到同样的问题。即使Flex确实知道热处理文本。
如果你可以开始做这个实验(将文本文件作为MIME类型视频或任何你的想法),请告诉我们。
与此同时,您可以查看SerializationFilter并继续为PDF添加新的MIME类型!
希望使用Flex 4和HTTPMultiService生活有点轻松。