2009-02-26 18 views
1

帯域幅を節約しようとしていて、flex/airアプリケーションにwsdlファイルを含めようとしています。リモートのファイルではなく、そのファイルをロードするために使用するURL形式はどれですか。ファイルからWSDLをロードする方法

私はloadWSDL()メソッドを使用しています。

EDIT: wsdlファイルはアプリケーションの一部である必要があります。私はfile:// some/pathをローカルファイルに使用できますが、アプリケーション自体の中にあるファイルをロードする方法はわかりません。

+0

あなたが気にしている選択肢をちょっと説明できますか? – dirkgently

答えて

2

ファイルだけthe file URI schemeを使用し、ローカルの場合:

file://host/path/file.wsdl

これがうまくいかない場合は、the security sandbox特徴はそれをブロックしているかどうかを確認します。 AIRアプリケーションで

は、アプリケーションのtemporary storage directoryapplication's own directory内のファイルにアクセスするために、あなたは、しかし、特別なapp:またはapp-storage: URLスキームを使用する必要があります。

あなたはいつでもファイルをアプリケーションに埋め込むことができますが、知っている限り、ファイルシステム内のファイルではないので、後で永続的に変更することはできません。おそらくあなたのための最良の選択肢は、このファイルを埋め込むことです。それを更新する必要がある場合は、File.applicationStorageDirectoryにアップデートされたバージョンを保存しておきます(既定の埋め込みバージョンを使用する前に常にチェックします)。 WebServiceクラスで埋め込みXMLファイルを使用することも可能です。

外部XMLファイルをアプリに埋め込む方法については、this articleをご覧ください。これは私がそれをやった方法です:

// 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

質問の編集コメントを見る – Marko

+0

今、私は(考えて)埋め込みを理解していますが、これを使ってWebサービスを作成する方法はまだ分かりません。 loadWSDLメソッドは、文字列URLのみを受け入れます。 – Marko

+0

@hasseg:このようなすばらしい説明をありがとう!あなたはちょうど私にそれを打つ;) – dirkgently

1

wsdlファイルは、アプリケーションの一部である必要があります。

リソースをFlex/AIRプロジェクト内に埋め込みましたか? thisを読んでください。これは醜いだった、

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

コードから@Embedを使用する方法を見つけることができませんでした。 – Marko

+0

[Embed]メタデータタグを使用します:http://livedocs.adobe.com/flex/3/html/help.html?content=embed_3.html – hasseg

0

UF、私は参考のために答えています:たとえば、あなたはsourceなどを指定することで、あなたのアプリに同梱されて静止画像を読み込むことができます。 hassegとdirkgentlyへの洞察をありがとう

ここにコードです。

まず、変数宣言:WSDLをロードし、その後

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

を:誰かが、これはあまり醜いにするアイデアを持っている場合は

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); 

、私に知らせてください。

編集:私はちょうど編集した答えに気づいたので、代わりにこのコードで、それだけで使用するのに十分だった。

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

私はフラッシュビルダー空気モバイルアプリ内のコードの下に使用し、それが動作する、いくつかの他のを助けるかもしれません。私はURLローダーを使用してWebサービスからファイルコンテンツを取得し、私の航空アプリのドキュメントディレクトリにあるXMLファイルに書き出します。

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

Webサービスのステータスを取得します(利用可能な場合は200)。 loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, ldrStatus);

とパスの一部が唯一のセキュリティのために読まれることを心に留めておいてくださいあなたの必要性につきとしての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(); 
      } 

にあなたはfile.documentdirectoryまたはapplicaitonまたはお好みのディレクトリを使用することができます。これらのファイルに書き戻したい場合は、読み込めるようにすることはできませんが、そこにファイルを配置することをお勧めします。

関連する問題