LiveCycle Data Services and Flex let you serialize data between ActionScript (AMF 3) and Java in both directions.
Subtopics
Converting data from ActionScript to Java Explicitly mapping ActionScript and Java objects Converting data from ActionScript to Java Converting data from Java to ActionScript Configuring AMF serialization on a channelConverting data from ActionScript to Java
When method parameters send data from a Flex application to a Java object, the data is automatically converted from an ActionScript data type to a Java data type. When Flex searches for a suitable method on the Java object, it uses further, more lenient conversions to find a match.
Simple data types on the client, such as Boolean and String values, typically match exactly a remote API. However, Flex attempts some simple conversions when searching for a suitable method on a Java object.
An ActionScript Array can index entries in two ways. A strict Array is one in which all indices are Numbers. An associative Array is one in which at least one index is based on a String. It is important to know which type of Array you are sending to the server, because it changes the data type of parameters that are used to invoke a method on a Java object. A dense Array is one in which all numeric indices are consecutive, with no gap, starting from 0 (zero). A sparse Array is one in which there are gaps between the numeric indices; the Array is treated like an object and the numeric indices become properties that are deserialized into a java.util.Map object to avoid sending many null entries.
The following table lists the supported ActionScript (AMF 3) to Java conversions for simple data types:
ActionScript type (AMF 3) | Deserialization to Java | Supported Java type binding |
---|---|---|
Array (dense) | java.util.List | java.util.Collection, Object[ ] (native array) If the type is an interface, it is mapped to the following interface implementations
A new instance of a custom Collection implementation is bound to that type. |
Array (sparse) | java.util.Map | java.util.Map |
Boolean String of | java.lang.Boolean | Boolean, boolean, String |
flash.utils.ByteArray | byte [] |
|
flash.utils.IExternalizable | java.io.Externalizable |
|
Date | java.util.Date (formatted for Coordinated Universal Time (UTC)) | java.util.Date, java.util.Calendar, java.sql.Timestamp, java.sql.Time, java.sql.Date |
int/uint | java.lang.Integer | java.lang.Double, java.lang.Long, java.lang.Float, java.lang.Integer, java.lang.Short, java.lang.Byte, java.math.BigDecimal, java.math.BigInteger, String, primitive types of double, long, float, int, short, byte |
null | null | primitives |
Number | java.lang.Double | java.lang.Double, java.lang.Long, java.lang.Float, java.lang.Integer, java.lang.Short, java.lang.Byte, java.math.BigDecimal, java.math.BigInteger, String, 0 (zero) if null is sent, primitive types of double, long, float, int, short, byte |
Object (generic) | java.util.Map | If a Map interface is specified, creates a new java.util.HashMap for java.util.Map and a new java.util.TreeMap for java.util.SortedMap. |
String | java.lang.String | java.lang.String, java.lang.Boolean, java.lang.Number, java.math.BigInteger, java.math.BigDecimal, char[], any primitive number type |
typed Object | typed Object when you use [RemoteClass] metadata that specifies remote classname. Bean type must have a public no args constructor. | typed Object |
undefined | null | null for Object, default values for primitives |
XML | org.w3c.dom.Document | org.w3c.dom.Document |
XMLDocument (legacy XML type) | org.w3c.dom.Document | org.w3c.dom.Document
You can enable legacy XML support for the XMLDocument type on any channel defined in the services-config.xml file. This setting is only important for sending data from the server back to the client; it controls how org.w3c.dom.Document instances are sent to ActionScript. For more information, see Configuring AMF serialization on a channel. |
Primitive values cannot be set to null in Java. When passing Boolean and Number values from the client to a Java object, Flex interprets null values as the default values for primitive types; for example, 0 for double, float, long, int, short, byte, \u0000 for char, and false
for boolean. Only primitive Java types get default values.
LiveCycle Data Services handles java.lang.Throwable objects like any other typed object. They are processed with rules that look for public fields and bean properties, and typed objects are returned to the client. The rules are like normal bean rules except they look for getters for read-only properties. This lets you get more information from a Java exception. If you require legacy behavior for Throwable objects, you can set the legacy-throwable
property to true
on a channel; for more information, see Configuring AMF serialization on a channel.
You can pass strict Arrays as parameters to methods that expect an implementation of the java.util.Collection or native Java Array APIs.
A Java Collection can contain any number of Object types, whereas a Java Array requires that entries are the same type (for example, java.lang.Object[ ], and int[ ]).
Flex also converts ActionScript strict Arrays to appropriate implementations for common Collection API interfaces. For example, if an ActionScript strict Array is sent to the Java object method public void addProducts(java.util.Set products)
, Flex converts it to a java.util.HashSet instance before passing it as a parameter, because HashSet is a suitable implementation of the java.util.Set interface. Similarly, Flex passes an instance of java.util.TreeSet to parameters typed with the java.util.SortedSet interface.
LiveCycle Data Services passes an instance of java.util.ArrayList to parameters typed with the java.util.List interface and any other interface that extends java.util.Collection. Then these types are sent back to the client as mx.collections.ArrayCollection instances. If you require normal ActionScript Arrays sent back to the client, you must set the legacy-collection
element to true
in the serialization
section of a channel-definition's properties; for more information, see Configuring AMF serialization on a channel.