Flex HttpService: добавление в пункт назначения

Я использую Flex для подключения к сервису Rest. Например, чтобы получить доступ к заказу № 32, я могу вызвать URL-адрес http: // [service] / orders / 32 < / а>. URL-адрес должен быть настроен как место назначения, поскольку клиент будет подключаться к разным экземплярам службы. Все это использует прокси-сервер Blaze, поскольку он включает вызовы GET, PUT, DELETE и POST. Проблема в следующем: - как добавить «32» в конец пункта назначения при использовании HttpService? Все, что я делаю, это устанавливаю пункт назначения, который в какой-то момент преобразуется в URL-адрес. Я отследил код, но не знаю, где это делается, поэтому не могу его заменить.

Возможны следующие варианты: 1. Разрешить в качестве места назначения URL-адрес в клиенте Flex, а затем установить URL-адрес (с добавленными данными) в качестве URL-адреса. 2. Напишите свой собственный адаптер java Flex, который переопределяет стандартный прокси-сервер, и сопоставьте параметры с URL-адресом, как показано ниже: http://[service]/order/ {id}? id = 32 в http://[service]/order/32

Кто-нибудь сталкивался с этой проблемой раньше, и есть ли простые способы ее решения?


person Verdant    schedule 25.09.2008    source источник


Ответы (2)


Чтобы все знали, вот как я решил эту проблему:

Я создал собственный HTTPProxyAdapter на сервере

public MyHTTPProxyAdapter extends flex.messaging.services.http.HTTPProxyAdapter {

public Object invoke(Message message) {
    // modify the message - if required
    process(message);
    return super.invoke(message);
}

private void process(Message message) {
        HTTPMessage http = (HTTPMessage)message;
        if(http != null) {
            String url = http.getUrl();
            ASObject o = (ASObject)http.getBody();
            if(o != null) {
                Set keys = o.keySet();
                Iterator it = keys.iterator();
                while(it.hasNext()) {
                    String key = (String)it.next();
                    String token = "[" + key +"]";
                    if(url.contains(token)) {
                        url = url.replace(token, o.get(key).toString());
                        o.remove(key);
                    }

                }
                http.setUrl(url);
            }
        }
    }
}

Затем заменил целевой адаптер на мой адаптер. Теперь я могу использовать следующий URL-адрес в config.xml, и все, что указано в квадратных скобках, будет заменено строкой запроса:

<destination id="user-getbytoken">
        <properties>
            <url>http://localhost:8080/myapp/public/client/users/token/[id]</url>
        </properties>
</destination>

В этом примере установка назначения на user-getbytoken и параметры {id: 123} приведет к URL-адресу http://localhost:8080/myapp/public/client/users/token/123

person Verdant    schedule 26.09.2008

Вот простой способ разрешить URL-адрес службы HTTPService в Flex с помощью обработчика события щелчка.

вот услуга:

<mx:HTTPService
    id="UCService"
    result="UCServiceHandler(event)" 
    showBusyCursor="true"
    resultFormat="e4x"
    />

Тогда вот обработчик:

        private function UCmainHandler(UCurl:String) {

            UCService.url = UCurl;
            UCService.send();

        }

А вот пример события клика:

<mx:Button label="add to cart" click="UCmainHandler('http://sampleurl.com/cart/add/p18_q1?destination=cart')" />

Конечно, вы можете передать другие значения обработчику кликов или даже заставить обработчик добавлять элементы в URL-адрес на основе других текущих настроек и т. Д.

Надеюсь, это поможет!

person defmeta    schedule 25.09.2008
comment
Я хочу иметь возможность изменять URL-адрес, настроенный в качестве пункта назначения в proxy-config.xml. К сожалению, URL-адрес недоступен для приложения, если я не проработаю фактическую конфигурацию и не изменю ее. - person Verdant; 26.09.2008