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

 更新时间:2009年02月03日 04:50:11   作者:  
过年期间抽空在弄flex前端对象与后端java对象利用httpservice交互的问题。比如前端需要user list数据,构造了flex user object类。
后端也存在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的方式高很多。

相关文章

  • Flex 文本框的输入下拉提示

    Flex 文本框的输入下拉提示

    在很多时候我们要实现一个输入,显示提示并且可以从提示选择的功能,这是一种基于ComboBox 的变相实现,从服务器上动态获取
    2009-07-07
  • Flex与.NET互操作(十):FluorineFx.Net的及时通信应用(ApplicationAdapter)(一)

    Flex与.NET互操作(十):FluorineFx.Net的及时通信应用(ApplicationAdapter)(一)

    使用FluorineFx.Net开发的每一个实时通讯功能应用都拥有一个应用程序适配器(ApplicationAdapter),用来管理整个实时通讯应用的生命周期,以及接受和拒绝客户端的连接等。
    2009-06-06
  • FLEX内存优化技巧集合

    FLEX内存优化技巧集合

    FLEX内存释放优化原则
    2008-03-03
  • Flex DataGrid DataGridColumn数据颜色多样化-类型替换

    Flex DataGrid DataGridColumn数据颜色多样化-类型替换

    用得多了,发觉自己了解的真的是九牛之一毛都没有,最近用到了从后台读出数据时显示的问题,相信很多人都有用整形数据来代替字符串数据的情况
    2009-06-06
  • flex 手写在线签名实现代码

    flex 手写在线签名实现代码

    企业信息系统中,有时候需要用到手写签名的功能。在这里用flex 实现一个。功能实现了,效果还在改善中。
    2009-08-08
  • Flex ShareObject简单应用

    Flex ShareObject简单应用

    Share object一般用来保存前来访问的用户的个人信息到用户的机器上。比如用户登陆过后保存他的名字,下次访问时自动显示,或者保存用户的个性化设置等等。
    2009-06-06
  • flex 绑定元数据

    flex 绑定元数据

    这篇文章算是flex初学者的的笔记吧,首先可以概览一下下文中的代码,然后我们主要是看看[Bindable]的这种用法。
    2009-05-05
  • Flex 编程注意之Flex Complier参数

    Flex 编程注意之Flex Complier参数

    由于上一篇文章《Flex编程注意之Namespace的用法》引出了Flex编译时自带的两个参数:-namespace -include-namespace,正好想到可以写一篇关于Flex Complier时的一些自定义参数。
    2009-07-07
  • Flex CategoryAxis 字体样式修改

    Flex CategoryAxis 字体样式修改

    Flex编程注意之修改CategoryAxis的字体样式(大小、颜色、粗斜体等)
    2009-07-07
  • Flex3 界面布局教程 第二篇

    Flex3 界面布局教程 第二篇

    国庆期间,做了不少基于 flex 的开发工作,对 flex 的布局容器有了进一步深入的理解,也找到不少非常棒的文章,分享到这里方便一下大家。
    2009-10-10

最新评论