Thanks Ben & Franck for your help. Like you Franck
I couldn't see why
it would work to cast one completely unrelated thing to another but
this is the way it appeared to be being done in the samples.
Of course, what I hadn't got to grips with is that the two samples
that I was studying are both using RemoteObject rather than WebService
calls and consequently are returning something that can be cast...
Thanks...
Graham
--- In [EMAIL PROTECTED]ups.com,
"ben.clinkinbeard"
<ben.clinkinbeard@...> wrote:
>
> Nothing definitive here but I do have a couple of suggestions. Any
> time I see ObjectProxy mentioned in an error description, I
> immediately wonder if makeObjectsBindable is at fault. Try setting it
> to false on your WS and see what happens.
>
> Personally, I always use e4x as my resultFormat (for various reasons),
> so I don't have experience casting to a custom object but if you do
> end up needing to use Franck's suggested methodology I would certainly
> recommend creating a factory that will accept the SOAP return values
> and return an instance of your custom object.
>
> HTH,
> Ben
>
>
> --- In [EMAIL PROTECTED]ups.com,
"grahampengelly" <graham@> wrote:
> >
> > I am just getting up to speed with the Cairngorm architecture and
have
> > been struggling with this problem for a while. I have got to the
point
> > where I am getting a response from my web service call that has
the data
> > in that I expect but I cannot seem to get it to deserialize into the
> > object that I need.
> >
> > The code (I have used IResponder rather than the cairngorm Responder
> > here as suggested during an earlier post here
> > <http://groups.yahoo.com/group/flexcoders/message/47366>
)
> >
> > public function result( data:Object ):void
> > {
> > var event:ResultEvent = data as ResultEvent;
> >
> > var testString:String = "";
> > for each(var thing:Object in event.result)
> > {
> > testString += " " + thing + " ";
> > }
> > //test alert 1
> > Alert.show(testString);
> > //test alert 2
> > Alert.show("event.result.Id = " + event.result.Id
+ ",
> > event.result.Name = " + event.result.Name);
> >
> > var tObj:TestObj = event.result as TestObj;
> > Alert.show("TestObj.Id = " + tObj.Id);
> >
> > }
> > The test alerts print out:
> > test 1: Graham 1
> > test 2: "event.result.Id = 1, event.result.Name =
Graham
> >
> > The subsequent line throws an exception:
> >
> > TypeError: Error #1034: Type Coercion failed: cannot convert
> > mx.utils::ObjectPro[EMAIL PROTECTED] to HASAW.ClientApp.Model.TestObj.
> >
> > The object that I am trying to create from the results looks like
this:
> >
> > public class TestObj implements ValueObject
> > {
> >
> > public var Id:int;
> > public var Name:String;
> > public function TestObj()
> > {
> > Id = 0;
> > Name = "";
> > }
> > }
> >
> >
> > I have tried various implementations and can't get the web service
> > response to cast to TestObj. To be honest, I wouldn't have thought
that
> > it should cast to TestObj but I have followed all of the code samples
> > for Cairngorm and they all do it like this.
> >
> > I am using .NET for the web service which may be an issue as the
samples
> > don't. It is returning the following SOAP in event.result.body
> >
> > <?xml version="1.0" encoding="utf-8"
?> - <#>
<soap:Envelope
> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> > <soap:Body> - <#> <GetTesterResponse
xmlns=""> - <#>
> > <GetTesterResult> <Id>1</Id>
> > <Name>Graham</Name> </GetTesterResult>
> > </GetTesterResponse> </soap:Body>
</soap:Envelope>
> > I know I could manually populate the object with the values but the
> > objects I will be deserializing in the application are much more
complex
> > than this which would make a manual approach a pain.
> >
> > Thanks in advance...
> >
> > Graham
> >
>