I\'m using BlazeDS to connect Flex with Java. I\'m having trouble passing ArrayLists of custom objects from Flex to java.
I have two objects, one is called Category,
the real answer is, that BlazeDS is stupid, and requires class reference to map your active script object back into Java (even if it just successfully mapped exactly the same object from Java to AS). I wasted quite some time on exactly the same problem today. I had quite a few similar mappings and they all worked fine, but today I created a new one, and it started to give me class cast exception.
found an answer here: Link
in your case solution would be:
package mystuff
{
[RemoteClass(alias="mystuff.Section")]
public class Section
{
private var stupidBlazeDs : Category;
public var categories:ArrayCollection;
...
}
}
there might be better options but I had enough for today.
One of the most common complaints with AS3 is the lack of typed arrays. ArrayLists will only contain objects, you will have to cast the results yourself.
Here is an example of a Java and AS3 class that I would pass around.
In Java:
The top level class:
package mystuff;
public class StuffToSend
{
public List<Section> sections;
...
}
Sections class:
package mystuff;
public class Section
{
public List<Catagory> categories;
...
}
Category class:
package mystuff;
public class Category
{
...
}
In AS3:
package mystuff
{
[RemoteClass(alias="mystuff.StuffToSend")] // So AS3 knows which Java class to map
public class StuffToSend
{
public var sections:ArrayCollection;
...
}
}
package mystuff
{
[RemoteClass(alias="mystuff.Section")] // So AS3 knows which Java class to map
public class Section
{
public var categories:ArrayCollection;
...
}
}
package mystuff
{
[RemoteClass(alias="mystuff.Category")] // So AS3 knows which Java class to map
public class Category
{
...
}
}
You can learn more about remoteObjects here: Data Access
Flex was actually sending back a flex.messaging.io.ArrayCollection object. Below is the code to convert this to an ArrayList of my java class:
public ArrayList<MyObject> convertArrayCollection(ArrayCollection array){
ArrayList<MyObject> myObjectArray = new ArrayList();
ASTranslator ast = new ASTranslator();
MyObject myObject;
ASObject aso;
for (int i=0;i< array.size(); i++){
myObject = new MyObject();
aso = new ASObject();
aso = (ASObject) array.get(i);
aso.setType("com.myPackage.MyObject");
myObject = (MyObject) ast.convert(aso, MyObject.class);
myObjectArray.add(myObject);
}
return myObjectArray;
}