Any Clues ?
---------- Forwarded message ----------
From: [EMAIL PROTECTED] <[EMAIL PROTECTED]>
Date: Jan 15, 2007 4:57 PM
Subject: Urgent :: Custom Serialization exception
To: [email protected]
I am using Custom Serialization to serialize my Java Object (TreeNode class)
"recursively" to ActionScript.
But this fails giving the following exception:
ArgumentError: Error #2004: One of the parameters is invalid.
at flash.utils::ObjectInput/readObject()
at com.flex.dao::TreeNode/readExternal()
(mx.messaging.messages::ErrorMessage)#0
body = (Object)#1
clientId = (null)
correlationId = "5D934A88-B385-627D-2445-258088A878CA"
destination = ""
extendedData = (null)
faultCode = "Server.Acknowledge.Failed"
faultDetail = "Was expecting mx.messaging.messages.AcknowledgeMessage, but
received null"
faultString = "Didn't receive an acknowledge message"
headers = (Object)#2
messageId = "983E8914-DDAC-1ECA-C02A-2580CCD4A40F"
rootCause = (null)
timestamp = 0
timeToLive = 0
=====================================================
The code of "ActionScript" and "Java" TreeNode classes is as under:
======= ActionScript ============
package com.flex.dao
{
import mx.collections.ArrayCollection;
import flash.utils.IExternalizable;
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import mx.controls.Alert;
[RemoteClass(alias=" com.java.dao.TreeNode")]
public class TreeNode implements IExternalizable
{
public var name : String;
public var id : int;
public var type : int;
public var children : ArrayCollection;
public var data : Object;
public function readExternal(input:IDataInput) : void
{
id = input.readInt();
name = input.readUTF();
type = input.readInt();
var childCount : int = input.readInt();
if(childCount != 0)
{
children = new ArrayCollection();
for(var i:int = 0; i<childCount;i++)
{
var obj : Object = input.readObject();
children.addItem(obj);
}
}
var hasData : int = input.readInt();
if(hasData != 0)
data = input.readObject();
}
public function writeExternal(output:IDataOutput) : void
{
output.writeInt(id);
output.writeUTF(name);
output.writeInt(type);
if(children != null)
{
output.writeInt(children.length);
for(var i:int = 0; i<children.length ;i++)
output.writeObject(TreeNode(children.getItemAt(i)));
}
else
output.writeInt(0);
if(data != null)
{
output.writeInt(1);
output.writeObject(data);
}
else
output.writeInt(0);
}
}
}
======== Java ==========
public class TreeNode implements Externalizable
{
public List children; //list of TreeNode
public Object data;
public TreeNode()
{
}
public TreeNode(int id, String name, int type) {
super(id, name, type);
children = new ArrayList();
}
public void addChild(TreeNode child) {
children.add(child);
}
public void writeExternal(ObjectOutput objectOutput) throws IOException
{
objectOutput.writeInt(id);
objectOutput.writeUTF(name);
objectOutput.writeInt(type);
if(children != null && children.size() > 0)
{
System.out.println(name + " :: "+children.size());
objectOutput.writeInt(children.size());
for(int i = 0; i< children.size();i++)
objectOutput.writeObject(children.get (i));
}
else
objectOutput.writeInt(0);
if(data != null)
{
objectOutput.writeInt(1);
objectOutput.writeObject(data);
}
else
objectOutput.writeInt(0);
}
public void readExternal(ObjectInput objectInput) throws IOException,
ClassNotFoundException
{
id = objectInput.readInt();
name = objectInput.readUTF();
type = objectInput.readInt();
int childCount = objectInput.readInt();
if(childCount != 0)
{
children = new ArrayList();
for(int i=0; i<childCount; i++)
children.add((TreeNode)objectInput.readObject());
}
int hasData = objectInput.readInt();
if(hasData != 0)
data = objectInput.readObject();
}
}