使用asx3m與xstream配合解決flex與java利用httpservice傳遞xml數(shù)據(jù)問題
更新時(shí)間:2009年02月03日 04:50:11 作者:
過(guò)年期間抽空在弄flex前端對(duì)象與后端java對(duì)象利用httpservice交互的問題。比如前端需要user list數(shù)據(jù),構(gòu)造了flex user object類。
后端也存在java user object類,利用xstream組件把list中的user對(duì)象序列化成xml數(shù)據(jù)。在flex端通過(guò)httpservice使用E4X format格式獲取。
剛開始自己準(zhǔn)備通過(guò)e4x技術(shù)來(lái)解析xml,構(gòu)造flex user object,類似這樣的處理方式:
public function fromXML(currentNode:XML):void{
userID = new Number(currentNode.userID);
userName = currentNode.userName;
......
}
不過(guò)這種方式太過(guò)于繁瑣。于是想自己利用flex reflect來(lái)實(shí)現(xiàn)一個(gè)通用的convert或者說(shuō)類似xstream這樣的組件。
當(dāng)然,首先是去google一把,還真找到兩個(gè),一個(gè)是XMLConverter (http://www.customware.net/repository/display/FLEX/Integrating+Flex+with+XML+using+XMLConverter),一個(gè)就是完全兼容xtream的 asx3m (http://code.google.com/p/asx3m/)。
XMLConverter簡(jiǎn)單,不過(guò)不是開源的,對(duì)于解析單個(gè)對(duì)象的xml格式,還是夠的,但是對(duì)于解析復(fù)雜的包含list結(jié)構(gòu)的,就愛莫能助了。最終還是采用了asx3m,很方便?!?唯一不爽的就是,asx3m竟然需要依賴VEGAS(http://vegas.googlecode.com/svn/AS3/trunk/src/vegas/)這個(gè)龐然大物(其實(shí)其只需要hashmap, list等幾個(gè)輔助類)
使用asx3m確實(shí)很方便,兩端代碼也很簡(jiǎn)易,如下:
服務(wù)器端的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);
//這個(gè)array中就是user對(duì)象列表
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);
//這個(gè)array中就是user對(duì)象列表
var array:ArrayCollection = xmlc.fromXML( compXML ) as ArrayCollection;
就這么簡(jiǎn)單?!?當(dāng)然,這種方式,需要在兩端維護(hù)兩套對(duì)象結(jié)構(gòu)(java object)和(as object),但其擴(kuò)展性和靈活度要比那種AMF的remoteobject的方式高很多。
剛開始自己準(zhǔn)備通過(guò)e4x技術(shù)來(lái)解析xml,構(gòu)造flex user object,類似這樣的處理方式:
復(fù)制代碼 代碼如下:
public function fromXML(currentNode:XML):void{
userID = new Number(currentNode.userID);
userName = currentNode.userName;
......
}
不過(guò)這種方式太過(guò)于繁瑣。于是想自己利用flex reflect來(lái)實(shí)現(xiàn)一個(gè)通用的convert或者說(shuō)類似xstream這樣的組件。
當(dāng)然,首先是去google一把,還真找到兩個(gè),一個(gè)是XMLConverter (http://www.customware.net/repository/display/FLEX/Integrating+Flex+with+XML+using+XMLConverter),一個(gè)就是完全兼容xtream的 asx3m (http://code.google.com/p/asx3m/)。
XMLConverter簡(jiǎn)單,不過(guò)不是開源的,對(duì)于解析單個(gè)對(duì)象的xml格式,還是夠的,但是對(duì)于解析復(fù)雜的包含list結(jié)構(gòu)的,就愛莫能助了。最終還是采用了asx3m,很方便?!?唯一不爽的就是,asx3m竟然需要依賴VEGAS(http://vegas.googlecode.com/svn/AS3/trunk/src/vegas/)這個(gè)龐然大物(其實(shí)其只需要hashmap, list等幾個(gè)輔助類)
使用asx3m確實(shí)很方便,兩端代碼也很簡(jiǎn)易,如下:
服務(wù)器端的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);
//這個(gè)array中就是user對(duì)象列表
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);
//這個(gè)array中就是user對(duì)象列表
var array:ArrayCollection = xmlc.fromXML( compXML ) as ArrayCollection;
就這么簡(jiǎn)單?!?當(dāng)然,這種方式,需要在兩端維護(hù)兩套對(duì)象結(jié)構(gòu)(java object)和(as object),但其擴(kuò)展性和靈活度要比那種AMF的remoteobject的方式高很多。
您可能感興趣的文章:
- java中xml和對(duì)象之間的互相轉(zhuǎn)換方法
- java利用JAXB實(shí)現(xiàn)對(duì)象和xml互相轉(zhuǎn)換方法與實(shí)例詳解
- 通過(guò)實(shí)例學(xué)習(xí)JAVA對(duì)象轉(zhuǎn)成XML輸出
- 將Java對(duì)象序列化成JSON和XML格式的實(shí)例
- Java對(duì)象的XML序列化與反序列化實(shí)例解析
- xml與Java對(duì)象的轉(zhuǎn)換詳解
- XML到Java代碼的數(shù)據(jù)綁定之對(duì)象
- Javabean基于xstream包實(shí)現(xiàn)轉(zhuǎn)XML文檔的方法
- java使用xstream實(shí)現(xiàn)xml文件和對(duì)象之間的相互轉(zhuǎn)換
相關(guān)文章
Flex與.NET互操作(十):FluorineFx.Net的及時(shí)通信應(yīng)用(ApplicationAdapter)(一)
使用FluorineFx.Net開發(fā)的每一個(gè)實(shí)時(shí)通訊功能應(yīng)用都擁有一個(gè)應(yīng)用程序適配器(ApplicationAdapter),用來(lái)管理整個(gè)實(shí)時(shí)通訊應(yīng)用的生命周期,以及接受和拒絕客戶端的連接等。2009-06-06Flex DataGrid DataGridColumn數(shù)據(jù)顏色多樣化-類型替換
用得多了,發(fā)覺自己了解的真的是九牛之一毛都沒有,最近用到了從后臺(tái)讀出數(shù)據(jù)時(shí)顯示的問題,相信很多人都有用整形數(shù)據(jù)來(lái)代替字符串?dāng)?shù)據(jù)的情況2009-06-06Flex ShareObject簡(jiǎn)單應(yīng)用
Share object一般用來(lái)保存前來(lái)訪問的用戶的個(gè)人信息到用戶的機(jī)器上。比如用戶登陸過(guò)后保存他的名字,下次訪問時(shí)自動(dòng)顯示,或者保存用戶的個(gè)性化設(shè)置等等。2009-06-06Flex 編程注意之Flex Complier參數(shù)
由于上一篇文章《Flex編程注意之Namespace的用法》引出了Flex編譯時(shí)自帶的兩個(gè)參數(shù):-namespace -include-namespace,正好想到可以寫一篇關(guān)于Flex Complier時(shí)的一些自定義參數(shù)。2009-07-07