Я новичок в flex и создаю класс-оболочку для объекта WebService, чтобы сделать мой основной код более чистым mxml. Я пытаюсь передать функцию в метод класса, чтобы установить в качестве обработчика события результата для вызова soap, и она не работает должным образом.
Вот класс:
package
{
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.WebService;
public class WebServiceObject
{
private var wsdl:String = "http://localhost:8080/WebApplication1/TestWs?wsdl";
private var testWs:WebService;
public function WebServiceObject()
{
try {
testWs = new WebService(wsdl);
testWs.loadWSDL();
} catch(errObject:Error) {
trace(errObject.toString());
}
}
public function getSomething(resultHandler:Function):void
{
testWs.getSomething.addEventListener(ResultEvent.RESULT, resultHandler);
testWs.getSomething.send();
}
}
}
Это mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
import WebServiceObject;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private function test():void
{
var test:WebServiceObject = new WebServiceObject();
test.getSomething(handler);
}
public function handler(event:ResultEvent):void
{
trace(event.result);
}
]]>
</mx:Script>
<mx:Button label="Test" click="test();"/>
</mx:Application>
Вызов веб-службы запущен, и вызов прекращается, но результат не возвращается слушателю события. Я попытался использовать метод класса в качестве обработчика и получил тот же результат. Все части работают, если они находятся в теге mxml code.
Это выполнимо? Я что-то упустил?
Спасибо.
EDIT:
ОК, видимо (это не сработало):
testWs = new WebService(wsdl);
testWs.loadWSDL();
- не то же самое, что (это сработало, обратите внимание, куда передается URL-адрес wsdl):
testWs = new WebService();
testWs.loadWSDL(wsdl);
и я был совершенно уверен, что пробовал оба пути ... в любом случае проблема решена.