我的代码应该解析 SOAP 响应并填充下拉列表。当我手动添加 xml 代码时,它可以工作,但是当我尝试解析 SOAP 响应时,它会遇到以下错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at ex1_02_starter/dropDownList_creationCompleteHandler()[C:\Users\jack\Adobe Flash Builder 4.5\Workspace\Starter 1_02\src\ex1_02_starter.mxml:26]
at ex1_02_starter/___ex1_02_starter_Operation1_result()[C:\Users\jack\Adobe Flash Builder 4.5\Workspace\Starter 1_02\src\ex1_02_starter.mxml:41]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:249]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:318]
at mx.rpc::Responder/result()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\Responder.as:56]
at mx.rpc::AsyncRequest/acknowledge()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:84]
at DirectHTTPMessageResponder/completeHandler()[E:\dev\4.5.1\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:451]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
我收到的 SOAP 响应
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<mycustomersResponse xmlns="http://Services.com">
<mycustomersReturn>
<age>28</age>
<name>Alex</name>
</mycustomersReturn>
<mycustomersReturn>
<age>29</age>
<name>Jack</name>
</mycustomersReturn>
<mycustomersReturn>
<age>30</age>
<name>Johny</name>
</mycustomersReturn>
</mycustomersResponse>
</soapenv:Body>
</soapenv:Envelope>
我的弹性代码
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="components.*"
xmlns:hellos="services.hellos.*"
height="957" creationComplete="initApp()" >
<fx:Style source="Styles.css"/>
<fx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.events.FlexEvent;
import mx.messaging.messages.SOAPMessage;
import mx.rpc.events.ResultEvent;
[Bindable]
var _result:*;
private function initApp():void
{
mywebservice.mycustomers();
}
protected function
dropDownList_creationCompleteHandler(event:ResultEvent):void
{
var xml:XML = event.result as XML;
var xmlString:String = xml.toXMLString();
var patt:RegExp = new RegExp("xmlns[^\"]*\"[^\"]*\"", "gi");
var newXmlString:String = xmlString.replace(patt, "");
xml = new XML(newXmlString);
_result = new XMLListCollection(xml.mycustomersResponse.mycustomersReturn);
}
]]>
</fx:Script>
<fx:Declarations>
<s:WebService id="mywebservice"
wsdl="http://localhost:8081/WebServiceTest/services/Hellos?wsdl">
<s:operation name="mycustomers"
resultFormat="object"
result="dropDownList_creationCompleteHandler(event);"
/>
</s:WebService>
</fx:Declarations>
<s:FormItem label="Label">
<s:DropDownList id="dropDownList"
labelField="name">
<s:AsyncListView list="{_result}"/>
</s:DropDownList>
</s:FormItem>
</s:Application>