Я абсолютно новичок в Flex.
Я работаю над старым (созданным кем-то другим) приложением, имеющим следующую архитектуру: внешний интерфейс Flex, получающий данные от внутреннего приложения Java.
Я отчаянно пытаюсь понять, как интерфейс подключен к интерфейсу (мне нужно развернуть это приложение, поэтому мне нужно изменить указатель серверной части на приложение внешнего интерфейса Flex).
В моем интерфейсе FLEX я обнаружил файл MyAppServices.mxml, содержащий тег , который должен представлять объект HTTPService в файле MXML.
Чтение официальной документации:
Этот тег дает вам доступ к методам объектов Java, использующим кодировку Action Message Format (AMF).
Значит, это должен быть указатель на мои серверные службы:
<?xml version="1.0" encoding="utf-8"?>
<rds:ServiceLocator
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:rds="com.adobe.cairngorm.business.*">
<mx:Script>
<![CDATA[
import org.myOrganization.myApp.util.ConfigServer;
]]>
</mx:Script>
<mx:RemoteObject
id="genericService"
destination="genericService"
endpoint= "messagebroker/amf"
showBusyCursor="true"
requestTimeout="100"
/>
<mx:RemoteObject
id="themeService"
destination="themeService"
endpoint= "messagebroker/amf"
showBusyCursor="true"
requestTimeout="100"
/>
<mx:RemoteObject
id="dataService"
destination="dataService"
endpoint= "messagebroker/amf"
showBusyCursor="true"
requestTimeout="100"
/>
<mx:RemoteObject
id="userService"
destination="userService"
endpoint= "messagebroker/amf"
showBusyCursor="true"
requestTimeout="100"
/>
</rds:ServiceLocator>
Итак, хорошо ... Я думаю, что нашел, где определена конечная точка серверной службы Java.
Но ... где определяется URL-адрес серверной части Java?!?!
Изучая код предыдущего файла MyAppServices.mxml, я вижу, что он содержит этот раздел:
<mx:Script>
<![CDATA[
import org.myOrganization.myApp.util.ConfigServer;
]]>
</mx:Script>
Это должно импортировать код ActionScript, содержащийся в файле org.myOrganization.myApp.util.ConfigServer.
Итак, в своем проекте я нашел этот файл: org.myOrganization.myApp.util.ConfigServer.as
Как видите, путь тот же, но файл, представленный в проекте, имеет расширение .as. Он добавляется автоматически?
Итак, код этого файла:
package org.myOrganization.myApp.util {
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import mx.collections.ArrayCollection;
import mx.core.Application;
import mx.managers.BrowserManager;
import mx.managers.IBrowserManager;
import mx.utils.URLUtil;
import org.osmf.utils.URL;
public class ConfigServer {
// settings
public static var BIRT_URL:String;
public static var GEOSERVER_URL:String;
public static var GEOSERVER_BASELAYER_URL:String;
public static var APP_CONTEXT:String;
public static var CAF_SERVER_URL:String;
public static var CAF_REGISTER_URL:String;
public static var CAF_FACEBOOK_LOGIN_URL:String;
public static var CAF_GOOGLE_LOGIN_URL:String;
public static var CAF_TWITTER_LOGIN_URL:String;
public static var CAF_FACEBOOK_REGISTER_URL:String;
public static var CAF_GOOGLE_REGISTER_URL:String;
public static var CAF_TWITTER_REGISTER_URL:String;
public static var CAF_FACEBOOK_LOGIN_ENABLED:Boolean;
public static var CAF_GOOGLE_LOGIN_ENABLED:Boolean;
public static var CAF_TWITTER_LOGIN_ENABLED:Boolean;
public static var CAF_FACEBOOK_REGISTER_ENABLED:Boolean;
public static var CAF_GOOGLE_REGISTER_ENABLED:Boolean;
public static var CAF_TWITTER_REGISTER_ENABLED:Boolean;
//operations
public static var LIST_BYID:String = "listById";
public static var RESOURCES_NUMBER = "resourceNumber";
public static var LIST_OPERATION:String = "list";
public static var GET_OBJECT:String = "getObject";
public static var ADD_OPERATION:String = "add";
public static var DELETE_OPERATION:String = "delete";
public static var UPDATE_OPERATION:String = "update";
public static var REPORT_OPERATION = "report";
public static var GET_BYID:String = "getById";
public static var LIST_UPDATE_OPERATION:String = "listUpdate";
public static var APP_SETTINGS = "appSettings";
[Bindable]
public static var VARIABLES_URL:String = "prop.properties";
[Bindable]
public static var arrColl:ArrayCollection;
[Bindable]
public static var paramColl:ArrayCollection;
public static var urlReq:URLRequest;
public static var urlLdr:URLLoader;
public static function init():void {
/* Initialize the two ArrayCollections objects with empty arrays. */
arrColl = new ArrayCollection();
paramColl = new ArrayCollection();
/* Initialize the URLRequest object with the URL to the file of name/value pairs. */
urlReq = new URLRequest(VARIABLES_URL);
/* Initialize the URLLoader object, assign the various event listeners, and load the specified URLRequest object. */
urlLdr = new URLLoader();
urlLdr.addEventListener(Event.COMPLETE, doEvent);
urlLdr.addEventListener(Event.OPEN, doEvent);
urlLdr.addEventListener(HTTPStatusEvent.HTTP_STATUS, doEvent);
urlLdr.addEventListener(IOErrorEvent.IO_ERROR, doEvent);
urlLdr.addEventListener(ProgressEvent.PROGRESS, doEvent);
urlLdr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, doEvent);
urlLdr.load(urlReq);
}
public static function doEvent(evt:Event):void {
arrColl.addItem({type:evt.type, idx:arrColl.length+1, eventString:evt.toString()});
switch (evt.type) {
case Event.COMPLETE:
/* If the load was successful, create a URLVariables object from the URLLoader.data property and populate the paramColl ArrayCollection object. */
var ldr:URLLoader = evt.currentTarget as URLLoader;
var vars:URLVariables = new URLVariables(ldr.data);
var key:String;
for (key in vars) {
paramColl.addItem({key:key, value:vars[key]});
}
//params.visible = true;
break;
}
}
// public static function getCurrentUrl():String {
// var browserManager:IBrowserManager = BrowserManager.getInstance();
//
// var url:String = browserManager.url;
// var result : String = url;
// if ( url && ( url.indexOf("file:/") == -1 ) )
// {
// //result = mx.utils.URLUtil.getFullURL(url, url);
// result = mx.utils.URLUtil.getProtocol(url)+ "://" +mx.utils.URLUtil.getServerNameWithPort(url);
//
// }
// return result;
// }
//
// [Bindable]
// public static var properties:Object = new Object();
// private static var loadedProps:Properties = new Properties();
// private function init():void {
// loadedProps.addEventListener(Event.COMPLETE, onLoaderComplete);
// loadedProps.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
// loadedProps.load("prop.properties");
// loadedProps.s
// }
//
// private function onLoaderComplete(event:Event):void {
// properties.host = loadedProps.getProperty("host");
// properties.port = loadedProps.getProperty("port");
// properties.webcontext = loadedProps.getProperty("context-root");
// }
}
}
Но также здесь я не могу найти определение своего сервера.
В этом коде есть:
[Bindable]
public static var VARIABLES_URL:String = "prop.properties";
Я думаю, что он экспортирует содержимое файла prop.properties в переменную VARIABLES_URL (я абсолютно не уверен в этом поведении), но у меня нет опоры .properties в мой проект.
У вас есть какое-то представление о том, где URL-адрес конечной конечной точки задан в этом проекте Flex? Или хоть какие-то подсказки, как его искать?