我正在尝试节省一些带宽并在我的flex / air应用程序中包含wsdl文件。我应该使用哪种url格式来加载该文件而不是远程文件。
我正在使用 loadWSDL ()方法。
编辑: wsdl文件需要成为应用程序的一部分。我知道我可以使用file:// some / path作为本地文件,但不知道如何加载应用程序内部的文件。
答案 0 :(得分:2)
如果文件是本地文件,请使用the file URI scheme:
file://host/path/file.wsdl
如果这不起作用,请检查the security sandbox功能是否阻止它。
在AIR应用中,为了访问应用程序temporary storage directory或application's own directory中的文件,您需要使用特殊的app:
或app-storage:
网址方案。< / p>
就像dirkgently说的那样,你总是可以将文件嵌入到应用程序中,但据我所知,之后你将无法以持久的方式修改它,因为它不仅仅是文件系统中的文件。对您来说,最好的选择可能就是嵌入此文件,如果您以后需要更新它,请让应用程序将更新后的版本保存到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());
答案 1 :(得分:1)
wsdl文件需要成为应用程序的一部分。
您是否尝试将其作为资源嵌入Flex / AIR项目中?阅读this。例如,您可以通过将source
指定为:
source="@Embed(source='relativeOrAbsolutePath')"
答案 2 :(得分:0)
这是代码。
首先,声明变量:
[Embed(source="/ws/wsdl/LoginService.wsdl",
mimeType="application/octet-stream")]
private const _fileXMLClass:Class;
private var _fileXML:XML = XML(new _fileXMLClass());
然后,加载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);
如果有人想让这件事变得不那么难看,请告诉我。
编辑:我刚刚注意到编辑过的答案,所以不用这个代码就足以使用:loadWSDL('app:///path/to/my/file.wsdl');
答案 3 :(得分:0)
我在flash builder air mobile app中使用以下代码并且它可以工作,可能会帮助其他人。我使用url loader从Web服务获取文件内容,并将其转换为我的air app的文档目录中的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或您的选择目录,请记住,某些路径仅为安全性而读取。如果你想回写那些你不能写的文件,但只是为了阅读目的,最好把文件放在那里。