Flex HttpService: добавление к месту назначения - PullRequest
0 голосов
/ 25 сентября 2008

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

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

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

Ответы [ 2 ]

1 голос
/ 26 сентября 2008

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

Я создал собственный 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

0 голосов
/ 25 сентября 2008

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

вот услуга:

<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, основываясь на других текущих настройках и т.д ...

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

...