Как загрузить WSDL из файла - PullRequest
       14

Как загрузить WSDL из файла

1 голос
/ 26 февраля 2009

Я пытаюсь сэкономить пропускную способность и включить файл wsdl в свое приложение flex / air. Какой формат URL я должен использовать для загрузки этого файла вместо удаленного.

Я использую loadWSDL ().

EDIT: Файл WSDL должен быть частью приложения. Я знаю, что могу использовать file: // some / path для локальных файлов, но не знаю, как загрузить файл, который находится внутри самого приложения.

Ответы [ 4 ]

2 голосов
/ 26 февраля 2009

Если файл локальный, просто используйте схему URI файла :

file://host/path/file.wsdl

Если это не работает, проверьте, не блокирует ли функция безопасности песочницы функции.

В приложениях AIR для доступа к файлам в каталоге временного хранилища приложения или в собственном каталоге приложения необходимо использовать специальные схемы URL app: или app-storage:. Впрочем.

Как сказал Диркгентли, вы всегда можете встроить файл в приложение, но, насколько я знаю, вы не сможете впоследствии его постоянно изменять, поскольку это не просто файл в файловой системе. Вероятно, лучшим вариантом для вас является встраивание этого файла, и если вам позже потребуется обновить его, пусть приложение сохранит обновленную версию в File.applicationStorageDirectory (которую вы всегда проверяете перед использованием встроенной версии по умолчанию.) понятия не имею, возможно ли даже использование встроенных XML-файлов с классами WebService.

См. в этой статье для получения информации о том, как встроить внешние XML-файлы в ваше приложение. Вот как я это сделал:

// 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 голос
/ 26 февраля 2009

Файл wsdl должен быть частью приложения.

Вы пытались встроить его в проект Flex / AIR как ресурс? Прочитайте это . Например, вы можете загрузить статические изображения, поставляемые с вашим приложением, указав source как:

source="@Embed(source='relativeOrAbsolutePath')"
0 голосов
/ 29 августа 2013

Я использую приведенный ниже код в мобильном приложении Flash Builder, и он работает, может помочь другим. Я получаю содержимое файла из веб-службы с помощью url loader и записываю его в файл xml в каталоге документов моего приложения air.

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

получить статус веб-сервиса, если он 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 или applicationaiton или каталог по вашему выбору в соответствии с вашими потребностями, имейте в виду, что некоторые пути читаются только для безопасности. если вы хотите записать обратно в те файлы, которые у вас не получатся, но просто для чтения, то стоит поместить файлы туда.

0 голосов
/ 26 февраля 2009

Уф, это было некрасиво, поэтому я отвечаю за ссылку. Спасибо за понимание Хассегу и 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');
...