Pergunta

Eu tenho um Flex aplicativo que precisa agarrar relatando dados de um JasperReports Servidor , através do API JasperReports Servidor Web Serviços . Flex Builder 3 faz um bom trabalho de gerar o código consumo de serviços web, com uma exceção. Se você pedir uma lista de diretório ou uma contabilidade de parâmetros de relatório, JR Servidor retorna plain XML na SABÃO embalagem e Flex analisa-lo muito bem. No entanto, se você pedir um relatório em si, seja em XML ou PDF formato, ele volta como um multipart MIME mensagem com alguma descritivo < em> XML como a primeira parte e o relatório - mesmo se o relatório em si é XML - como a segunda parte. Flex não sabe o que fazer com mensagens de várias partes e apenas reclama inválido XML .

Aqui está um exemplo da resposta. Minha estratégia atual é fazer alguma análise de cadeia e gerenciar os bits individualmente. Mas será que Flex tem nenhum métodos internos para lidar com isso? (Eu fui incapaz de encontrar qualquer.)

------=_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äâ
Foi útil?

Solução

O que eu vou dizer é apenas o que eu acredito:. Posso estar errado desde que eu não tentei isso

Eu não acho que você tem muita escolha. Flex HTTPService (ou o que você está usando) só pode oferecer tantos (/ ou tão poucos) formatos de dados. Consulte aqui . Para qualquer fluxo de costume você terá que recuperá-la como um object e passá-lo através de seu próprio decodificador. Parece que Flex não faz qualquer análise da mensagem MIME mas depende (que é também a forma como os navegadores se comportar normalmente) o servidor para identificar o conteúdo que está sendo transmitido. Se o servidor só envia um arquivo de texto, mas muda o tipo de conteúdo a dizer audio/mpeg Eu acho que você terá o mesmo problema. Mesmo quando Flex faz saber quente para texto alça.

Se você nunca pode dar a volta a fazer esta experiência (com arquivos de texto como o tipo MIME de vídeo ou o que gosta de você) deixe-nos saber.

Enquanto isso, você pode dar uma olhada em SerializationFilter e vá em frente e adicionar um novo tipo MIME para PDF!

Felizmente, a vida será um pouco fácil com o Flex 4 e HTTPMultiService .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top