使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题_Flex

后端也存在java user object类,利用xstream组件把list中的user对象序列化成xml数据。在flex端通过httpservice使用E4X format格式获取。
刚开始自己准备通过e4x技术来解析xml,构造flex user object,类似这样的处理方式:

复制代码 代码如下:

public function fromXML(currentNode:XML):void{
userID = new Number(currentNode.userID);
userName = currentNode.userName;
......
}

不过这种方式太过于繁琐。于是想自己利用flex reflect来实现一个通用的convert或者说类似xstream这样的组件。
当然,首先是去google一把,还真找到两个,一个是XMLConverter (http://www.customware.net/repository/display/FLEX/Integrating+Flex+with+XML+using+XMLConverter),一个就是完全兼容xtream的 asx3m (http://code.google.com/p/asx3m/)。
XMLConverter简单,不过不是开源的,对于解析单个对象的xml格式,还是够的,但是对于解析复杂的包含list结构的,就爱莫能助了。最终还是采用了asx3m,很方便。—— 唯一不爽的就是,asx3m竟然需要依赖VEGAS(http://vegas.googlecode.com/svn/AS3/trunk/src/vegas/)这个庞然大物(其实其只需要hashmap, list等几个辅助类)
使用asx3m确实很方便,两端代码也很简易,如下:
服务器端的java代码:
List<WorkItem> users = um.queryUsers(1);  
XStream xstream = new XStream();  
xstream.alias("User", User.class);  
String xml = xstream.toXML(users); 
List<WorkItem> users = um.queryUsers(1);
XStream xstream = new XStream();
xstream.alias("User", User.class);
String xml = xstream.toXML(users);
Flex端的as代码:
import hr.binaria.asx3m.Asx3m;  
import hr.binaria.asx3m.Asx3mer;  
var xmlc:Asx3mer = Asx3mer.instance;  
xmlc.xstream.alias("User", User);  
//这个array中就是user对象列表  
var array:ArrayCollection = xmlc.fromXML( compXML ) as ArrayCollection; 
import hr.binaria.asx3m.Asx3m;
import hr.binaria.asx3m.Asx3mer;
var xmlc:Asx3mer = Asx3mer.instance;
xmlc.xstream.alias("User", User);
//这个array中就是user对象列表
var array:ArrayCollection = xmlc.fromXML( compXML ) as ArrayCollection;
就这么简单。—— 当然,这种方式,需要在两端维护两套对象结构(java object)和(as object),但其扩展性和灵活度要比那种AMF的remoteobject的方式高很多。

时间: 2024-10-16 19:37:06

使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题_Flex的相关文章

使用XStream序列化、反序列化XML数据时遇到的各种问题

现在参与的项目是一个纯Application Server,整个Server都是自己搭建的,使用JMS消息实现客户端和服务器的交互,交互的数据格式采用XML.说来惭愧,开始为了赶进度,所有XML消息都是使用字符串拼接的,而XML的解析则是使用DOM方式查找的.我很早就看这些代码不爽了,可惜一直没有时间去重构,最近项目加了几个人,而且美国那边也开始渐渐的把这个项目开发的控制权交给我们了,所以我开始有一些按自己的方式开发的机会了.因而最近动手开始重构这些字符串拼接的代码. 对XML到Java Bea

用XML数据岛解决用户界面问题 - 1

xml|解决|数据|问题 从属列表问题(dependent list problem)"的问题时常被提出.问题时常出现于当你有两个以上的选择列表时,一个主列表有若干个选项,你希望当用户选择主列表中的某个选项时,在其他的从属列表中显示相关的选项.你可以通过eXtensible Markup Language(XML)的数据岛(data islands)来实现这一功能,把XML内嵌到你的HTML中.这一结果对在客户端的XML应用具有实践意义. 假设你为一家名为"CheapPc"的

用XML数据岛解决用户界面问题 - 3

xml|解决|数据|问题 把数据库的表数据保存到文件中 我曾答应向你展示如何避免每次请求都要读取数据库和串联成XML字符串的步骤.答案就是把数据库的表数据保存到文件中:这样做有几个好处.读取文件比查询数据库并把记录集格式化成XML要快.这样做也可以简化你的HTML文件,因为你只需在HTML中包含对XML的引用.最后这样做使数据对于客户端来说是透明的.如果你以Listing 1中的方式发送XML标记符的话,用户可以通过IE的"查看/源文件"看到数据.使用文件引用的话,用户只能看到引用标记

用XML数据岛解决用户界面问题 - 2

xml|解决|数据|问题 把处理过程移到客户端 当Web服务器返回网页后,所有进一步的操作处理都在客户端进行.我原先认为如果向客户端发送一个大的数据集会使程序的速度放慢.但后来我却发现一次性发送所有数据比在客户与服务器之间来回地进行数据交换快得多.唯一可被注意到的停顿只是在IE5的XML解析器读取数据时的一个短暂的初始化停顿. HTML文件本身包含有4个元素:一个保存州名数据的选择列表(主列表),XML数据,一个从属列表的div标记占位符,和两个脚本.当州名选择列表的选项发生变化时,第二个脚本就

用XML数据岛解决用户界面问题

xml|解决|数据|问题     从属列表问题(dependent list problem)"的问题时常被提出.问题时常出现于当你有两个以上的选择列表时,一个主列表有若干个选项,你希望当用户选择主列表中的某个选项时,在其他的从属列表中显示相关的选项.你可以通过eXtensible Markup Language(XML)的数据岛(data islands)来实现这一功能,把XML内嵌到你的HTML中.这一结果对在客户端的XML应用具有实践意义. 假设你为一家名为"CheapPc&qu

Flex中如何利用swatchHighlightSize样式设置ColorPicker控件加亮

接下来的例子演示了Flex中如何利用swatchHighlightSize样式,设置ColorPicker控件加亮边框粗细 尺寸. 下面是完整代码 <?xml version="1.0" encoding="utf-8"?> <mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign=&quo

Flex与java交互之数据库数据读取

前几天有网友要我写一篇关于flex与数据库交互的例子,一直由于时间紧没能写,今天晚上特地花点时间写了个例子,希望能给大家一点帮助,其实flex与数据库交互很简单的,我主要是通过java与数据库交互读取数据,然后flex和java进行交互,把java读取的数据在flex前端显示出来,好了,说了一堆废话,下面代码说明问题. 对于建立一个flex web应用的步骤我就不多说了哈. 首先要求大家到数据库建立一个数据库,在我这例子中数据库名为userDb,建立一个表userInfo,里面设置两个字段一个为

Flex和java的socket通信(一)连接

服务端:java jdk1.5 (使用工具:eclipse3.2) 客户端:flex 2 (一)连接 目的:实现flex和java的连接 服务端代码:Server1.java =============================================================================== import java.net.*; import java.io.*; public class Server1 { public static void mai

用于Flex和Java快速开发的Flamingo项目

Exadel的Flamingo项目是一个快速启动后台使用Java构建的RIA应用的工具.在中间层,该工具对Seam和Spring都提供了支持.在 展现层,Flamingo既支持Flex也支持JavaFX.该工具启动应用程序开发的方式与AppFuse项目类似,后者可用于更传统的Java Web层框架.InfoQ与Exadel的Igor Polevoy和Fima Katz进行了交谈以了解更多关于Flamingo的信息. Igor和Fima以分享Flamingo的特性细节作为开场白.现在的特性可以被划