如何从文件加载WSDL
我想节省一些带宽,并在我的flex/air应用程序中包含wsdl文件。我应该使用哪种url格式来加载该文件而不是远程文件。如何从文件加载WSDL
我正在使用loadWSDL()方法。编辑: wsdl文件需要成为应用程序的一部分。我知道我可以使用file:// some/path作为本地文件,但不知道如何加载应用程序本身内部的文件。
如果该文件是本地的,只要使用the file URI scheme:
file://host/path/file.wsdl
如果不工作,检查是否the security sandbox功能阻止它。
在AIR应用程序,以访问应用程序的temporary storage directory或application's own directory文件,你需要使用特殊的app:
或app-storage:
URL方案,虽然。
就像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());
WSDL文件需要应用程序的一部分。
您是否试图将其作为资源嵌入到Flex/AIR项目中?阅读this。例如,您可以通过指定source
负载随您的应用程序的静态图像:
source="@Embed(source='relativeOrAbsolutePath')"
UF,这是丑陋的,所以我回答的参考。感谢hasseg和dirkgently的见解
这是代码。
首先,声明变量:
[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');
我用下面Flash Builder中的空气移动应用程序代码和它的作品,可以帮助一些人。我使用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);
,并在事件侦听
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或应用程序了或您选择的目录根据自己的需要,请记住,某些路径都只是出于安全读取。如果你想写回这些文件,你将无法做到,但仅仅为了阅读目的,将文件放在那里是个好主意。
你能解释一下你脑海中的选择吗? – dirkgently 2009-02-26 12:40:37