Flash HTTPService: чтение данных соединения из файла свойств

у меня есть свой HTTPService, он выглядит так:

    <s:HTTPService 
        id="setCustomerInstalledPackageService" 
        url="http://localhost:8090/myapp/servletName" 
        useProxy="false" method="POST"
        resultFormat="text"
        result="onResult(event)"
        fault="fault(event)"> 
    </s:HTTPService>


Я хочу сделать этот код более универсальным, читая HOST и PORT из файла свойств. Таким образом, если я изменю хост (или порт) своего веб-сервиса, мне не придется перекомпилировать исходный код флэш-памяти.
Я искал в Интернете немного, но не смог найти ответ... кто-нибудь?

спасибо!


person OhadR    schedule 19.12.2011    source источник
comment
Вы явно плохо искали. Все, что вам нужно сделать, это: иметь xml или csv или любой другой файл с данными, которые вы хотите программно закодировать. Запустив программу, прочитайте этот файл и проанализируйте его, чтобы получить свои данные, которые вы затем присоедините и установите как setCustomerInstalledPackageService.url.   -  person Pranav Hosangadi    schedule 19.12.2011
comment
спасибо @PranavHosangadi; мне немного помогло. Однако я искал полное решение, то есть как именно мне читать из файла, устанавливать значение и т. Д. Я нашел решение и написал его здесь как ответ; не могли бы вы взглянуть и посмотреть, есть ли у вас комментарии или лучшие идеи?   -  person OhadR    schedule 20.12.2011


Ответы (1)


Не уверен, что это самое элегантное решение; если кто-то знает лучший способ, я был бы рад узнать. Основная идея состоит в том, чтобы объявить HTTPService некоторой уникальной строкой, которую впоследствии можно будет заменить. В моем случае я использовал __хост__ и __порт__. После прочтения файла конфигурации я заменяю эти строки значениями, полученными из файла.

Основной.mxml:

private function initApp():void
{
    var ldr:URLLoader = new URLLoader();
    ldr.addEventListener(Event.COMPLETE, onLoadPropsFile);
    ldr.load(new URLRequest("service-config.txt"));
}

private function onLoadPropsFile(e:Event):void
{
    var host:String;
    var port:String;

    var loadedText:String = URLLoader(e.target).data;
    var array:Array = loadedText.split('\r\n');
    for each(var entry:String in array)
    {
        var keyValuePair:Array = entry.split('=');
        var key:String = keyValuePair[0];
        var val:String = keyValuePair[1];
        if(key == 'host')
        {
            host = val;
        }
        if(key == 'port')
        {
            port = val;
        }
    }
    var value:Number = Number(loadedText);

    resolveServiceUrl(myService, host, port);
}

private function resolveServiceUrl(service:HTTPService, host:String, port:String):void
{
    service.url = service.url.replace('__host__', host);
    service.url = service.url.replace('__port__', port);
}

initApp() вызывается

<s:Application xmlns:... 
             ...
             initialize="initApp();" >

Служба объявила так:

<s:HTTPService 
    id="myService" 
    url="http://__host__:__port__/appName/..." 
    useProxy="false" method="POST" resultFormat="text" 
    result="onResult(event)"
    fault="fault(event)"> 
    <mx:request xmlns="">
        <method>search</method>
        <input>{input.text}</input> 
    </mx:request>         
</s:HTTPService>

и service-config.txt очень прост:

host=localhost
port=8090

Надеюсь, это когда-нибудь поможет кому-то...

person OhadR    schedule 20.12.2011
comment
+1 Хорошая работа!! Вот видишь, немного поиска и всегда получишь то, что хотел :) - person Pranav Hosangadi; 20.12.2011