Надеюсь все знают что такое WebService, а для тех, кто не в курсе google->WevService+WSDL для начала надо сделать простой webService, например на java ) Нам понадобится tomcat, axis и xerces. Как настроить webService на java - ищем в FAQ, повторятся не буду ) Исходный код сервиса ) | Код | public class TestService { public String getName() { return "This is test service! YO ))))"; }
public String getSumm(int a, int b) { return String.valueOf(a + b); } }
|
Зы. Ещё нужно скачать либу для flex - cairngorm И соответственно добавить к прожекту ) Переходим к Flex ) Описание нашего сервиса service.mxml | Код | <?xml version="1.0" encoding="utf-8"?> <cairngorm:ServiceLocator xmlns:cairngorm="com.adobe.cairngorm.business.*" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.controls.Alert; ]]> </mx:Script> <!-- result="event.token.resultHandler(event);" fault="event.token.faultHandler(event);" --> <mx:WebService id="Service" useProxy="false" makeObjectsBindable="false" showBusyCursor="true" fault="mx.controls.Alert.show('Error loading WSDL', 'Webservice Error!!');" > <mx:operation name="getName" resultFormat="object" result="event.token.resultHandler(event);" fault="event.token.faultHandler(event);"> </mx:operation> <mx:operation name="getSumm" resultFormat="object" result="event.token.resultHandler(event);" fault="event.token.faultHandler(event);"> <mx:request> <a></a> <b></b> </mx:request> </mx:operation> </mx:WebService> </cairngorm:ServiceLocator>
|
Создаём делегат нашего метода, допустим SummDelegate.as | Код | import mx.controls.Alert; // Чтобы вызвать Alert import mx.rpc.Fault; import mx.rpc.AbstractOperation; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.soap.mxml.WebService; import mx.rpc.AsyncToken; import com.adobe.cairngorm.business.ServiceLocator; import com.adobe.cairngorm.business.Responder; public class SummDelegate {
private var responder:Responder; private var service:WebService;
public SummDelegate(r:Responder) { // Получение инстанса веб сервиса service = ServiceLocator.getInstance().getService("Service") as WebService; // Тут у нас Responder responder = r; }
public function getSumm(int a, int b):void { var o:AbstractOperation = service.getOperation("getSumm"); o.arguments.a = a; o.arguments.b = b; var token:AsyncToken = service.getSumm(); token.resultHandler = responder.onResult; token.faultHandler = responder.onFault; }
public function getSumm_onResult(event:ResultEvent):void { responder.onResult(new ResultEvent(ResultEvent.RESULT, false, true)); } public function getSumm_onFault(event:FaultEvent):void { // } }
|
SummEvent.as | Код | import com.adobe.cairngorm.control.CairngormEvent;
public class SummEvent extends CairngormEvent { public var a:int; public var b:int; public static var SUMM:String = "SUMM"; public function SummEvent(av, bv) { super(SUMM); a = av; b = bv; } }
|
Модель ) ModelLocator.as | Код | import com.adobe.cairngorm.model.ModelLocator; import mx.controls.Label;
[Bindable] public class ModelLocator implements com.adobe.cairngorm.model.ModelLocator { private static var modelLocator:ModelLocator; public var resultComponent:Label; public static function getInstance():ModelLocator { if (modelLocator == null) modelLocator = new ModelLocator(); return modelLocator; } public function ModelLocator() { if ( com.flexsqladmin.sqladmin.model.ModelLocator.modelLocator != null ) throw new Error( "Only one ModelLocator instance should be instantiated" ); } }
|
Определим контроллер ) | Код | import com.adobe.cairngorm.control.FrontController; public class Controller extends FrontController { public function Controller() { addCommand(SummEvent.SUMM, SummCommand); } }
|
SummCommander.as | Код | import com.adobe.cairngorm.business.Responder; import com.adobe.cairngorm.commands.Command; import com.adobe.cairngorm.control.CairngormEvent; import flash.events.Event; import mx.controls.Alert;
public class SummCommand implements Command, Responder { private var model:ModelLocator = ModelLocator.getInstance(); public function execute(event:CairngormEvent):void { var delegate:SummDelegate = new SummDelegate(this); delegate.getSumm(SummEvent(event).a, SummEvent(event).b); }
public function onResult(event:*=null):void { var r:String = event.result as String; trace(r); model.resultComponent.text = "Результат: " + r; } public function onFault(event:*=null):void { trace("Fuck!!!"); model.resultComponent.text = "ОШИБКА"; } }
|
теперь используем что получилось ) тестим на валидность ) | Код | <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:business="*" xmlns:control="*" creationComplete="init();"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.soap.mxml.WebService; import com.adobe.cairngorm.business.ServiceLocator; import com.adobe.cairngorm.control.CairngormEventDispatcher; [Bindable] private var model:ModelLocator = ModelLocator.getInstance(); public function init():void{ model.resultComponent = result;
var wsdl:String = "path/to/service?wsdl"; try{ var s:WebService = ServiceLocator.getInstance().getService("Service") as WebService; s.loadWSDL(wsdl); } catch (e:Error){ mx.controls.Alert.show("Error Loading WSDL", "WSDL Error"); } } private function btnClick():void { var smEvent:SummEvent = new SummEvent(aText.text as int, bText.text as int); CairngormEventDispatcher.getInstance().dispatchEvent(smEvent); }
]]> </mx:Script> <!-- the ServiceLocator where we specify the remote services --> <business:Services id="Services" /> <!-- the FrontController, containing Commands specific to this appliation --> <control:Controller id="controller" />
<mx:Panel x="29" y="25" width="385" height="167" layout="absolute" title="Тестируем веб сервис"> <mx:Label x="10" y="10" text="Введите первое число"/> <mx:TextInput x="148" y="8" width="207" id="aText"/> <mx:Label x="10" y="38" text="Введите второе число"/> <mx:TextInput x="148" y="36" width="207" id="bText"/> <mx:Label x="10" y="64" text="Результат:" width="345" id="result"/> <mx:Button x="10" y="90" label="Тест" width="345" click="btnClick();"/> </mx:Panel> </mx:Application>
|
Это сообщение отредактировал(а) AntonioBanderaz - 21.1.2007, 17:57
--------------------
ГЫ...
|