Expand my Community achievements bar.

TypeError: Error #1034: Type Coercion failed

Avatar

Former Community Member

Hello experts...

I have looked around the forums and seen many occurrences of this coercion error, but the solution I have seen do not fix my problem, which has somewhat complex, yet predictable, behavior.

I have an application that displays some web service results in a DataGrid. You can drill down by double-clicking a record, which launches another application using a swfloader. From there, the use can perform subsequent service calls, which all work fine under most circumstances. The problem occurs when you launch a second drill down BEFORE performing particular service calls in the first drill down and then return to the first drill down and perform a service call. The problem is in casting the result that are returned. Here is an example error message. I have included the whole stack trace in case it might help. I'm not sure if this is related to the data binding. Below the stack trace I have included two scenarios, one that works fine, and one that doesn't.

TypeError: Error #1034: Type Coercion failed: cannot convert org.unavco.dai.explorer.services::FundingItem@2bfc6d91 to org.unavco.dai.explorer.services.FundingItem.
    at org.unavco.dai.explorer.views::Pi/set funding()[/Users/gorman/Documents/EclipseWorkspace/drill_down/org/unavco/dai/explorer/views/Pi.mxml:31]
    at <anonymous>()[/Users/gorman/Documents/EclipseWorkspace/drill_down/Explorer.mxml:352]
    at Function/http://adobe.com/AS3/2006/builtin::call()
    at mx.binding::Binding/innerExecute()[/Users/gorman/Documents/EclipseWorkspace/lib/FlexBuilder/sdks/3.1.0/frameworks/projects/framework/src/mx/binding/Binding.as:375]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at mx.binding::Binding/wrapFunctionCall()[/Users/gorman/Documents/EclipseWorkspace/lib/FlexBuilder/sdks/3.1.0/frameworks/projects/framework/src/mx/binding/Binding.as:287]
    at mx.binding::Binding/execute()[/Users/gorman/Documents/EclipseWorkspace/lib/FlexBuilder/sdks/3.1.0/frameworks/projects/framework/src/mx/binding/Binding.as:230]
    at mx.binFri Sep 25 16:00:07 2009 UTCGenericRemotingService: resultsListener(): Destination: dai-funding
ding::Binding/watcherFired()[/Users/gorman/Documents/EclipseWorkspace/lib/FlexBuilder/sdks/3.1.0/frameworks/projects/framework/src/mx/binding/Binding.as:396]
    at mx.binding::Watcher/notifyListeners()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\binding\Watcher.as:299]
    at mx.binding::PropertyWatcher/eventHandler()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\binding\PropertyWatcher.as:327]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at org.unavco.dai.search::GenericRemotingService/set results()[/Users/gorman/Documents/EclipseWorkspace/search/org/unavco/dai/search/GenericRemotingService.as:34]
    at org.unavco.dai.search::GenericRemotingService/handleResponse()[/Users/gorman/Documents/EclipseWorkspace/search/org/unavco/dai/search/GenericRemotingService.as:80]
    at org.unavco.dai.search::AbstractRemotingService/handleResult()[/Users/gorman/Documents/EclipseWorkspace/search/org/unavco/dai/search/AbstractRemotingService.as:111]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.rpc::AbstractService/dispatchEvent()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\AbstractService.as:237]
    at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:202]
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:193]
    at mx.rpc::Responder/result()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:43]
    at mx.rpc::AsyncRequest/acknowledge()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
    at NetConnectionMessageResponder/resultHandler()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:491]
    at mx.messaging::MessageResponder/result()[E:\dev\3.1.0\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:199]

The strange thing is that it seems to be saying that it cannot cast a FundingItem to a FundingItem. What is also strange is that the cast works in most situations. Here are some examples:

Scenario 1 works fine:

a) launch drill down A and perform a service call

b) launch drill down B while A is still running and perform a service with B

Scenario 2 casting exception:

a) launch drill down A

b) launch drill down B while A is still running

c) switch focus to drill down A and perform a service call (I get an error casting the results).

When I run the code in the debugger, the object appears to be the class I am expecting,but it does not pass the "is" test. Here is some code and the resulting trace output. (I tested it with a different service that I have modified to catch the error so we are now lookig at ArchivedFilesItem instead of FundingItem)

trace("In Files set files: Expecting " +
    getDefinitionByName("org.unavco.dai.explorer.services.ArchivedFilesItem") +
    " and found " + getQualifiedClassName(_files.getItemAt(i)));

if (_files.getItemAt(i) is ArchivedFilesItem) {
    trace("*is* ArchivedFilesItem = TRUE"); 
} else {
    trace("*is* ArchivedFilesItem = FALSE"); 
}


var record:ArchivedFilesItem;
try {
    ArchivedFilesItem= ArchivedFilesItem(_files.getItemAt(i));
} catch (e:Error) {
    trace("Error: " + e);
}

Scenario 1 (discribed above) works fine and produces this output:

In Files set files: Expecting [class ArchivedFilesItem] and found org.unavco.dai.explorer.services::ArchivedFilesItem

*is* ArchivedFilesItem = TRUE

Scenario 2 (discribed above) produces this output:

In Files set files: Expecting [class ArchivedFilesItem] and found org.unavco.dai.explorer.services::ArchivedFilesItem

*is* ArchivedFilesItem = FALSE

Error: TypeError: Error #1034: Type Coercion failed: cannot convert org.unavco.dai.explorer.services::ArchivedFilesItem@2ae72e09 to org.unavco.dai.explorer.services.ArchivedFilesItem.

This seems bazaar!

As I have seen suggested in other threads, I have tried explicitly declaring and instantiating objects of this type in both the main application that launches the drill down as well as in the drill down itself.

I have also tried disabling the load-externs option for compiling the drill down (I was sort of grasping at straws).

Can any of the experts out there suggest a direction for me to investigate? I would really like to understand this curious error.

0 Replies