2009-02-26 11 views
1

J'ai un application Flex qui doit saisir les données de reporting à partir d'un serveur JasperReports , par l'JasperReports API Web Services serveur. Flex Builder 3 fait un bon travail de génération du code de consommation des services Web, à une exception près. Si vous demandez une liste de répertoire ou une enveloppe comptable des paramètres de rapport, JR serveur retourne simple XML dans le SOAP et Flex il parse très bien. Cependant, si vous demandez un rapport lui-même, que ce soit dans XML ou format PDF, il revient en tant que multipart message MIME avec une XML descriptive comme la première partie et le rapport - même si le rapport lui-même est XML - comme la deuxième partie. Flex ne sait pas quoi faire avec des messages en plusieurs parties et se plaint simplement d'invalide XML.Analyse d'une réponse SOAP multipart dans Flex?

Voici un exemple de réponse. Ma stratégie actuelle consiste à faire un peu d'analyse de chaîne et à gérer les bits individuellement. Mais est-ce que Flex a des méthodes intégrées pour gérer cela? (Je suis incapable de trouver.)

------=_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äâ 

Répondre

1

Ce que je vais dire est que ce que je crois: je peux me tromper car je ne l'ai pas essayé cela.

Je ne pense pas que vous ayez beaucoup de choix. Flex HTTPService (ou ce que vous utilisez) ne peut offrir que très peu (ou si peu) de formats de données. Voir here. Pour tout flux personnalisé, vous devrez le récupérer en tant que object et le transmettre via votre propre décodeur. Il semble que Flex n'effectue pas d'analyse du message MIME mais dépend de (ce qui est aussi le comportement habituel des navigateurs) pour identifier le contenu en cours de transmission. Si le serveur envoie seulement un fichier texte mais change le type de contenu pour dire audio/mpeg je pense que vous aurez le même problème. Même lorsque Flex sait très bien gérer du texte.

Si jamais vous pouvez vous déplacer pour faire cette expérience (avec des fichiers texte comme la vidéo de type MIME ou ce que vous voulez), faites le nous savoir.

En attendant, vous pouvez jeter un oeil à SerializationFilter et continuer et ajouter un nouveau type MIME pour PDF!

Espérons que la vie sera un peu facile avec Flex 4 et HTTPMultiService.