Serializing between ActionScript and Java (脚本与Java的序列化)

http://livedocs.adobe.com/livecycle/es/sdkHelp/programmer/lcds/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=serialize_data_1.html#281630

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 channel

Converting 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

  • List becomes ArrayList
  • SortedSet becomes TreeSet
  • Set becomes HashSet
  • Collection becomes ArrayList

 

A new instance of a custom Collection implementation is bound to that type.

Array (sparse)

java.util.Map

java.util.Map

Boolean

String of "true" or "false"

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.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值