Data Dropped During Serialization/Deserialization when coming from ColdBox

I want to preface my question by saying that this is probably more of
a Flex question than ColdBox, but I am trying to get a fully
integrated Flex/ColdBox demo application set up for my company's newer
developers to reference when learning Flex and ColdBox. We are more
than willing to share the code for this demo application once I can
get it running as expected.

So on to my question - I am getting expected data back from every
service call except the call to get a single object, one that actually
returns, in my application, an employee object. Just before the proxy
returns the object, the data is intact, but when I break the code in
Flex immediately upon the return, the event.result is typed correctly,
however, all of the data is initialized for the object instead of
being the data that the service returned.

Here is my ActionScript class:

package com.mod.swizdemo.model.vo
{
  import com.mod.model.vo.IItemVO;
  import com.mod.model.vo.ISearchableObject;
  import com.mod.model.vo.ModificationTrackingVO;
  import com.mod.utils.ParsingUtil;

  [Bindable]
  [RemoteClass( alias = "model.employee.tblEmployee" )]
  public class EmployeeVO extends ModificationTrackingVO implements
IItemVO , ISearchableObject
  {

    //=================================
    // constructor
    //=================================

    public function EmployeeVO()
    {
      super();
    }

    //=================================
    // public properties
    //=================================

    [Transient]
    public function get id() : int
    {
      return intEmployeeId;
    }

    public var intCompanyId : int;

    [Transient]
    public var intCreatedById : int;

    public var intEmployeeId : int;

    [Transient]
    public var intModifiedById : int;

    public var vcAddress : String;
    public var vcCity : String;
    public var vcFirstname : String;
    public var vcLastname : String;
    public var vcPhone : String;
    public var vcState : String;

    //=================================
    // public methods
    //=================================

    public function build( item : Object ) : void
    {
      ParsingUtil.parseVO( this , item , EmployeeVO );
    }

    public function getSearchableProperties() : Array
    {
      var properties : Array = [];

      properties.push( "vcAddress" );
      properties.push( "vcCity" );
      properties.push( "vcFirstname" );
      properties.push( "vcLastname" );
      properties.push( "vcPhone" );
      properties.push( "vcState" );

      return properties;
    }
  }
}

Here is the related CFC code:

<cfcomponent displayname="tblEmployee" output="false"
extends="tblEmployeeBase" alias="model.employee.tblEmployee">
</cfcomponent>

tblEmployeeBase was generated using the Illudium PU36 Code Generator:

<cfcomponent displayname="tblEmployeeBase" output="false">
    <cfproperty name="intEmployeeId" type="numeric" default="" />
    <cfproperty name="intCompanyId" type="numeric" default="" />
    <cfproperty name="vcFirstname" type="string" default="" />
    <cfproperty name="vcLastname" type="string" default="" />
    <cfproperty name="vcPhone" type="string" default="" />
    <cfproperty name="vcAddress" type="string" default="" />
    <cfproperty name="vcCity" type="string" default="" />
    <cfproperty name="vcState" type="string" default="" />

  <!--- PROPERTIES --->
  <cfset variables.instance = StructNew() />

  <!--- INITIALIZATION / CONFIGURATION --->
  <cffunction name="init" access="public"
returntype="model.employee.tblEmployee" output="false">
    <cfargument name="intEmployeeId" type="string" required="false"
default="" />
    <cfargument name="intCompanyId" type="string" required="false"
default="" />
    <cfargument name="vcFirstname" type="string" required="false"
default="" />
    <cfargument name="vcLastname" type="string" required="false"
default="" />
    <cfargument name="vcPhone" type="string" required="false"
default="" />
    <cfargument name="vcAddress" type="string" required="false"
default="" />
    <cfargument name="vcCity" type="string" required="false" default="" /

    <cfargument name="vcState" type="string" required="false"
default="" />

    <!--- Run setters --->
    <cfset setintEmployeeId(arguments.intEmployeeId) />
    <cfset setintCompanyId(arguments.intCompanyId) />
    <cfset setvcFirstname(arguments.vcFirstname) />
    <cfset setvcLastname(arguments.vcLastname) />
    <cfset setvcPhone(arguments.vcPhone) />
    <cfset setvcAddress(arguments.vcAddress) />
    <cfset setvcCity(arguments.vcCity) />
    <cfset setvcState(arguments.vcState) />

    <cfreturn this />
   </cffunction>

  <!--- PUBLIC FUNCTIONS --->
  <cffunction name="setMemento" access="public"
returntype="model.employee.tblEmployee" output="false">
    <cfargument name="memento" type="struct" required="yes"/>
    <cfset variables.instance = arguments.memento />
    <cfreturn this />
  </cffunction>
  <cffunction name="getMemento" access="public" returntype="struct"
output="false" >
    <cfreturn variables.instance />
  </cffunction>

  <cffunction name="validate" access="public" returntype="array"
output="false">
    <cfset var errors = arrayNew(1) />
    <cfset var thisError = structNew() />

    <!--- intEmployeeId --->

    <cfif (NOT len(trim(getintEmployeeId())))>
      <cfset thisError.field = "intEmployeeId" />
      <cfset thisError.type = "required" />
      <cfset thisError.message = "intEmployeeId is required" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getintEmployeeId())) AND NOT
isNumeric(trim(getintEmployeeId())))>
      <cfset thisError.field = "intEmployeeId" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "intEmployeeId is not numeric" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- intCompanyId --->

    <cfif (len(trim(getintCompanyId())) AND NOT
isNumeric(trim(getintCompanyId())))>
      <cfset thisError.field = "intCompanyId" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "intCompanyId is not numeric" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- vcFirstname --->

    <cfif (NOT len(trim(getvcFirstname())))>
      <cfset thisError.field = "vcFirstname" />
      <cfset thisError.type = "required" />
      <cfset thisError.message = "vcFirstname is required" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcFirstname())) AND NOT
IsSimpleValue(trim(getvcFirstname())))>
      <cfset thisError.field = "vcFirstname" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "vcFirstname is not a string" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcFirstname())) GT 50)>
      <cfset thisError.field = "vcFirstname" />
      <cfset thisError.type = "tooLong" />
      <cfset thisError.message = "vcFirstname is too long" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- vcLastname --->

    <cfif (NOT len(trim(getvcLastname())))>
      <cfset thisError.field = "vcLastname" />
      <cfset thisError.type = "required" />
      <cfset thisError.message = "vcLastname is required" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcLastname())) AND NOT
IsSimpleValue(trim(getvcLastname())))>
      <cfset thisError.field = "vcLastname" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "vcLastname is not a string" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcLastname())) GT 50)>
      <cfset thisError.field = "vcLastname" />
      <cfset thisError.type = "tooLong" />
      <cfset thisError.message = "vcLastname is too long" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- vcPhone --->

    <cfif (len(trim(getvcPhone())) AND NOT
IsSimpleValue(trim(getvcPhone())))>
      <cfset thisError.field = "vcPhone" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "vcPhone is not a string" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcPhone())) GT 50)>
      <cfset thisError.field = "vcPhone" />
      <cfset thisError.type = "tooLong" />
      <cfset thisError.message = "vcPhone is too long" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- vcAddress --->

    <cfif (len(trim(getvcAddress())) AND NOT
IsSimpleValue(trim(getvcAddress())))>
      <cfset thisError.field = "vcAddress" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "vcAddress is not a string" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcAddress())) GT 50)>
      <cfset thisError.field = "vcAddress" />
      <cfset thisError.type = "tooLong" />
      <cfset thisError.message = "vcAddress is too long" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- vcCity --->

    <cfif (len(trim(getvcCity())) AND NOT
IsSimpleValue(trim(getvcCity())))>
      <cfset thisError.field = "vcCity" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "vcCity is not a string" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcCity())) GT 50)>
      <cfset thisError.field = "vcCity" />
      <cfset thisError.type = "tooLong" />
      <cfset thisError.message = "vcCity is too long" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <!--- vcState --->

    <cfif (len(trim(getvcState())) AND NOT
IsSimpleValue(trim(getvcState())))>
      <cfset thisError.field = "vcState" />
      <cfset thisError.type = "invalidType" />
      <cfset thisError.message = "vcState is not a string" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>
    <cfif (len(trim(getvcState())) GT 50)>
      <cfset thisError.field = "vcState" />
      <cfset thisError.type = "tooLong" />
      <cfset thisError.message = "vcState is too long" />
      <cfset arrayAppend(errors,duplicate(thisError)) />
    </cfif>

    <cfreturn errors />
  </cffunction>

  <!--- ACCESSORS --->

  <cffunction name="setintEmployeeId" access="public" returntype="void"
output="false">
    <cfargument name="intEmployeeId" type="string" required="true" />
    <cfset variables.instance.intEmployeeId =
trim(arguments.intEmployeeId) />
  </cffunction>
  <cffunction name="getintEmployeeId" access="public"
returntype="string" output="false">
    <cfreturn variables.instance.intEmployeeId />
  </cffunction>

  <cffunction name="setintCompanyId" access="public" returntype="void"
output="false">
    <cfargument name="intCompanyId" type="string" required="true" />
    <cfset variables.instance.intCompanyId =
trim(arguments.intCompanyId) />
  </cffunction>
  <cffunction name="getintCompanyId" access="public"
returntype="string" output="false">
    <cfreturn variables.instance.intCompanyId />
  </cffunction>

  <cffunction name="setvcFirstname" access="public" returntype="void"
output="false">
    <cfargument name="vcFirstname" type="string" required="true" />
    <cfset variables.instance.vcFirstname = trim(arguments.vcFirstname) /

  </cffunction>
  <cffunction name="getvcFirstname" access="public" returntype="string"
output="false">
    <cfreturn variables.instance.vcFirstname />
  </cffunction>

  <cffunction name="setvcLastname" access="public" returntype="void"
output="false">
    <cfargument name="vcLastname" type="string" required="true" />
    <cfset variables.instance.vcLastname = trim(arguments.vcLastname) />
  </cffunction>
  <cffunction name="getvcLastname" access="public" returntype="string"
output="false">
    <cfreturn variables.instance.vcLastname />
  </cffunction>

  <cffunction name="setvcPhone" access="public" returntype="void"
output="false">
    <cfargument name="vcPhone" type="string" required="true" />
    <cfset variables.instance.vcPhone = trim(arguments.vcPhone) />
  </cffunction>
  <cffunction name="getvcPhone" access="public" returntype="string"
output="false">
    <cfreturn variables.instance.vcPhone />
  </cffunction>

  <cffunction name="setvcAddress" access="public" returntype="void"
output="false">
    <cfargument name="vcAddress" type="string" required="true" />
    <cfset variables.instance.vcAddress = trim(arguments.vcAddress) />
  </cffunction>
  <cffunction name="getvcAddress" access="public" returntype="string"
output="false">
    <cfreturn variables.instance.vcAddress />
  </cffunction>

  <cffunction name="setvcCity" access="public" returntype="void"
output="false">
    <cfargument name="vcCity" type="string" required="true" />
    <cfset variables.instance.vcCity = trim(arguments.vcCity) />
  </cffunction>
  <cffunction name="getvcCity" access="public" returntype="string"
output="false">
    <cfreturn variables.instance.vcCity />
  </cffunction>

  <cffunction name="setvcState" access="public" returntype="void"
output="false">
    <cfargument name="vcState" type="string" required="true" />
    <cfset variables.instance.vcState = trim(arguments.vcState) />
  </cffunction>
  <cffunction name="getvcState" access="public" returntype="string"
output="false">
    <cfreturn variables.instance.vcState />
  </cffunction>

  <!--- DUMP --->
  <cffunction name="dump" access="public" output="true" return="void">
    <cfargument name="abort" type="boolean" default="false" />
    <cfdump var="#variables.instance#" />
    <cfif arguments.abort>
      <cfabort />
    </cfif>
  </cffunction>

</cfcomponent>

I've been racking my brain since Friday morning trying to think of a
way that this may be failing, but I can't seem to come up with
anything. Any help would be outstanding. =)

What is the error?

Luis Majano
CEO
Ortus Solutions, Corp
Toll free phone/fax: 1-888-557-8057
Mobile: 909-248-3408

www.coldbox.org

If I email myself a dump of the object from the proxy CFC just before
it returns, I see all the correct data for the employee (first name,
last name, etc.). However, once I break on the first line of the
result handler inside Flex, event.result is an initialized EmployeeVO
with all of the properties set to their default values instead of the
data that was dumped from the object in ColdFusion.