2009-02-26 10 views
1

Ich habe eine Flex Anwendung, die Berichtsdaten von einem Jasper Server durch die Jasper Server Web Services API greifen muss. Flex Builder 3 macht eine gute Arbeit beim Generieren des Web-Service-Verbrauchscodes mit einer Ausnahme. Wenn Sie fragen, für eine Verzeichnisliste oder eine Bilanzierung von Berichtsparametern, JR Server Ebene XML gibt im SOAP Wrapper und Flex parst es einfach gut. Wenn Sie jedoch fragen Sie nach einem Bericht selbst, ob in XML oder PDF Format, es MIME Nachricht mit einigen beschreibenden XML als erster Teil zurück, als ein mehrteiliger kommt und der Bericht - auch wenn der Bericht selbst ist XML - wie der zweite Teil. Flex weiß nicht, was mit mehrteiligen Nachrichten zu tun ist, und klagt nur über ungültige XML.Parsen einer mehrteiligen SOAP-Antwort in Flex?

Hier ist ein Beispiel für die Antwort. Meine derzeitige Strategie besteht darin, einige Strings zu analysieren und die Bits einzeln zu verwalten. Aber hat Flex irgendwelche eingebauten Methoden, um damit umzugehen? (Ich habe nicht in der Lage gewesen, eine zu finden.)

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

Antwort

1

Was ich nur zu sagen, was ich glaube: Ich kann falsch sein, da ich dies aus nicht versucht habe.

Ich glaube nicht, dass Sie viel Auswahl haben. Flex HTTPService (oder was immer Sie verwenden) kann nur so viele (oder wenige) Datenformate anbieten. Siehe here. Für jeden benutzerdefinierten Stream müssen Sie ihn als object abrufen und über Ihren eigenen Decoder weitergeben. Es scheint, dass Flex die MIME-Nachricht nicht syntaktisch analysiert, sondern von dem Server abhängt, um den Inhalt zu identifizieren, der gerade übertragen wird. Wenn der Server nur eine Textdatei sendet, aber den Inhaltstyp auf audio/mpeg ändert, denke ich, dass Sie das gleiche Problem haben werden. Auch wenn Flex weiß, um mit Text umzugehen.

Wenn Sie jemals zu diesem Experiment (mit Textdateien als MIME-Typ Video oder was auch immer Sie Lust), lassen Sie es uns wissen.

In der Zwischenzeit können Sie einen Blick auf SerializationFilter werfen und gehen Sie weiter und fügen Sie einen neuen MIME-Typ für PDF!

Hoffentlich wird das Leben mit Flex 4 und der HTTPMultiService ein wenig einfach sein.