日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

慎用AXIS2

發(fā)布時間:2025/3/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 慎用AXIS2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

慎用AXIS2

java,web services,axis,apache,web,xml,rpc

?

AXIS一直是我比較喜歡的開源產(chǎn)品,也成了開源世界WEB SERVICE實現(xiàn)的事實標(biāo)準(zhǔn),但我一直是用的AXIS 1.x 版本,它一直工作的很好。

但最近有同事用AXIS2,卻遇到了麻煩,從而也使我有些機會去了解AXIS2,但了解的同時,也對AXIS2(當(dāng)前release1.0版,別把AXIS2后的2看成是版本號)大失所望,加了一些華而不實的東西,反而把系統(tǒng)搞得很復(fù)雜,源代碼里也有不少BUG

AXIS2自帶了Version.aar的示例,好象是返回一個STRING,可以運行,但用它的客戶端工具自動生成的代碼實在難看:

1、? 為什么非得封裝一個***Reponse, getMsg之類的參數(shù)和響應(yīng)呢(使用ADB數(shù)據(jù)綁定)?在前面的版本中,生成的客戶端使用起來就象是在本地一樣(客戶端代理完全實現(xiàn)了服務(wù)端接口/或說發(fā)布的方法簽名完成一樣),但現(xiàn)在卻不是這樣的,為了使用接口,你不得不生成一個封裝類,再將你的參數(shù)設(shè)置進(jìn)去,而返回時,又不得不從***Response中顯示的獲取返回值(好像有個叫get_return之類的方法),很是別扭。

2、? 生成客戶端時提供好幾種數(shù)據(jù)綁定方式,但我認(rèn)為沒有一種有以前的簡潔,花哨不實用。

3、? 文檔太簡單了,真該花點時間寫些像樣的文檔,最起碼的,services.xmlDTDSchema總得有一份呀!

接下來我們發(fā)現(xiàn),使用自定義參數(shù)(無非是自己寫的POJO)的接口發(fā)布后無法設(shè)用成功,返回的異常信息:reader is null(大概),開始還以為名稱空間映射的問題,我們的自定義參數(shù)似下面的代碼:

package com.mudboy.model;

import java.sql.Date;

import java.sql.Timestamp;

public class Message implements java.io.Serializable

{

??? private static final long serialVersionUID = 1L;

??? private Date actidate;

??? private Integer flight_no;

??? private Timestampa_or_d;

??? private String d_or_i;

??? private String etd_time;

??? private String atd_time;

private String eta_time;

?

??? . . . .后面略去所有GetterSetter

}

經(jīng)過一番網(wǎng)上搜索和改配置(幾乎試了所有的選項)/代碼之類的操作,還是沒有找到答案,錯誤還是發(fā)生。最好只好跟它的代碼了,過程我就不多說了,只說結(jié)果吧。

1、? 錯誤發(fā)生在執(zhí)行完要返回的路了,正準(zhǔn)備將返回值序列化成SOAP消息。

2、? ADB的代碼中,有BeanUtils(不知道后面有沒有S),里面有getFullParser方法,也就是,在序列化過程就,要通過該方法拿到一個Reader,但該方法返回了null

3、? 該方法里面寫得有些粗糙,很多可能的問題都沒有想到,比如說,上面的POJO,在返回時有些為null,這應(yīng)該是很正常的,但代碼卻假設(shè)任何一個屬性都不為null(直接調(diào)用value.toString()方法),導(dǎo)致了NullpointException,發(fā)生該異常后,未記任何日志,而是直接返回了null,導(dǎo)致客戶端跟據(jù)異常查錯不太方便。

4、? 我們將我們的POJO改了改,對屬性均做了初始化,使返回時每個屬性都不為null,意外的時,我們還是沒有成功。

5、? 這次異常還是因為getFullParser返回了null,難道不止一次調(diào)用了該方法?跟進(jìn)去!發(fā)現(xiàn)代碼是遞歸調(diào)用,即對于每個屬性,也調(diào)用了該方法,代碼里也是一堆if/else if/之類的,對一些數(shù)據(jù)類型進(jìn)行了處理,我發(fā)現(xiàn)在我們屬性類型是Timestamp時返回了null……

6、? 它的序列化返序列化算法效率也有問題。

?

上面的過程很明顯表現(xiàn)也AXIS2是那么的不成熟不完善,代碼BUG如此明顯也是出人意料,本以為AXIS2應(yīng)該有個飛躍(至少多實現(xiàn)了幾個標(biāo)準(zhǔn)),但卻沒想到基石卻如此不牢固,建議今后別在正式的項目中使用。

說到這,我又想起前段時間網(wǎng)上的一篇文章,大意也是說AXIS如何不好的話,說是一堆研究生寫出來的,當(dāng)時我并未在意,并一如既往的支持AXIS,直到昨天開始接觸AXIS2,我的態(tài)度有了變化

總結(jié)

以上是生活随笔為你收集整理的慎用AXIS2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。