2009-02-26 6 views
1

Ich versuche, etwas Bandbreite zu sparen und WSDL-Datei in meine Flex/Air-Anwendung aufzunehmen. Welches URL-Format sollte ich verwenden, um diese Datei anstelle der Remote-Datei zu laden?So laden Sie WSDL aus Datei

Ich verwende loadWSDL() Methode.

EDIT: WSDL-Datei muss Teil der Anwendung sein. Ich weiß, dass ich Datei: // einige/Pfad für lokale Dateien verwenden kann, aber nicht weiß, wie man Datei lädt, die in der Anwendung selbst ist.

+0

Können Sie ein wenig die Auswahl erklären, die Sie sich vorstellen? – dirkgently

Antwort

2

Wenn die Datei lokal ist, benutzen Sie einfach the file URI scheme:

file://host/path/file.wsdl

Wenn dies nicht funktioniert, überprüfen Sie, ob the security sandbox Features, die es blockieren.

In AIR-Anwendungen, um Dateien in der Anwendung für den Zugriff auf temporary storage directory oder application's own directory, müssen Sie allerdings spezielle app: oder app-storage: URL-Schemata verwenden.

Wie schon gesagt, können Sie die Datei immer in die Anwendung einbetten, aber soweit ich weiß, können Sie sie danach nicht mehr dauerhaft ändern, da es nicht nur eine Datei im Dateisystem ist. Wahrscheinlich ist die beste Option für Sie, diese Datei einzubetten, und wenn Sie sie später aktualisieren müssen, lassen Sie die App eine aktualisierte Version in der File.applicationStorageDirectory speichern (die Sie dann immer zuerst überprüfen würden, bevor Sie die Standard-Embedded-Version verwenden) Idee, wenn eingebettete XML-Dateien mit den WebService-Klassen verwendet werden, ist sogar möglich.

Weitere Informationen zum Einbetten externer XML-Dateien in Ihre App finden Sie unter this article. Dies ist, wie ich habe es getan:

// note: common sense says that the mimeType should be "text/xml" here but 
// it doesn't work -- this does, though. who knows why. 
[Embed(source="File.xml", mimeType="application/octet-stream")] 
private const _fileXMLClass:Class; 
private var _fileXML:XML = XML(new _fileXMLClass()); 
+0

Siehe Frage Kommentar bearbeiten. – Marko

+0

Ok, jetzt verstehe ich die Einbettung, aber ich weiß immer noch nicht, wie man Webservice damit erstellt. loadWSDL-Methode akzeptiert nur String-URLs. – Marko

+0

@hasseg: danke für so eine wunderbare Erklärung! Du hast mich einfach dazu geschlagen;) – dirkgently

1

WSDL-Datei muss Teil der Anwendung sein.

Haben Sie versucht, es in das Flex/AIR-Projekt als Ressource einzubetten? Lesen Sie this. Zum Beispiel können Sie statische Bilder mit Ihrer Anwendung ausgeliefert laden, indem Sie den source wie die Angabe:

source="@Embed(source='relativeOrAbsolutePath')" 
+0

Ich konnte nicht herausfinden wie man @Embed aus dem Code benutzt. – Marko

+0

Sie verwenden das [Embed] -Metadaten-Tag: http://livedocs.adobe.com/flex/3/html/help.html?content=embed_3.html – hasseg

0

Uf, das war hässlich, so dass ich die Beantwortung für den Hinweis. Danke für die Einblicke in hasseg und dirkently

Hier ist der Code.

Zuerst erklären die Variablen:

[Embed(source="/ws/wsdl/LoginService.wsdl", 
     mimeType="application/octet-stream")] 
private const _fileXMLClass:Class; 
private var _fileXML:XML = XML(new _fileXMLClass()); 

Dann Laden wsdl:

var file : File = dir.resolvePath(name + ".xml"); 
var stream : FileStream = new FileStream(); 
stream.open(file, FileMode.WRITE); 
stream.writeUTFBytes(getWsdl().toXMLString()); 
stream.close(); 
loadWSDL(file.url); 

Wenn jemand eine Idee, um diese weniger hässlich, lass es mich wissen.

EDIT: Ich habe gerade bearbeitete Antwort bemerkt, so dass anstelle dieser Code nur zu verwenden, war es genug:

loadWSDL('app:///path/to/my/file.wsdl'); 
0

ich Code unten verwenden in Flash Builder Luft mobile app und es funktioniert, einige sonst helfen können.Ich erhalte Dateiinhalte von einem Web-Service mit URL-Loader und wirte ihn in eine XML-Datei im Dokumentenverzeichnis meiner Air-App herunter.

var url:URLRequest = new URLRequest(Globals.deviceSettings.endpoint); 
       loader.load(url); 
       loader.addEventListener(Event.COMPLETE, loaderComplete); 

erhalten Sie den Status des Web-Service, wenn es dann 200 verfügbar und Kopf ist. loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, ldrStatus);

und in dem Eventlistener

function loaderComplete(e:Event):void 
      { 

        var f:File= File.documentsDirectory.resolvePath("source/category.xml"); 
        var _xml:XML = new XML(loader.data); 
        var fs:FileStream = new FileStream(); 
        fs.open(f, FileMode.WRITE); 
        fs.writeUTFBytes(_xml.toXMLString()); 
        fs.close(); 
        popup.close(true); 
        var popup:MyPopupComponent = new MyPopupComponent(); 
        popup.show("Successfully updated from the server",this); 
        popup.close(); 
      } 

Sie file.documentdirectory oder applicaiton oder Ihre Wahl Verzeichnis nach Ihrem Bedarf bitte beachten Sie, dass einige der Pfade nur für die Sicherheit gelesen werden können. Wenn Sie auf diese Dateien zurückschreiben möchten, können Sie die Dateien dort nur für Lesezwecke speichern.