@Shooper.Java:
謝謝,我想是這樣的,不過如果不在Axis2下發布就不需要拷到Webapps下了。
本人今天在MSN上看到此貼,覺得還有點意思。
如果你覺得里面講的像是在說自己的,請舉手!
難道是這里缺乏高手嗎?
我想不會的,這里可是blogjava-專注于java技術的社區啊!
@happy:
我這段時間在忙項目開發,沒有時間來回答你們的問題
抱歉!這個錯誤是MyService.aar里的配置文件寫錯了,請檢查!
你再按我首貼的步驟試試,我測試過整個過程的,最后生成MyAxisDemo.arr
文件再發布。
再次希望,有高人路過時幫我解決一下大家的問題,不然我寫這篇討論貼
就變成我唱獨角戲了,此貼也就失去了意義
再次誠心邀請有使用過AXIS2的同仁一起來參加我們的討論!
@嘎崩豆:
這個...Java2WSDL工具有是有,不過一般不直接用,而是在Eclipse中可以用到這個功能,我沒具體用過,希望遇到高人給你解答
你先下個文檔看看吧:
http://ws.apache.org/axis2/download/1_0/download.cgi
下到本地接壓縮后再打開這個本地路徑看看(下面是目錄結構)
xdocs\tools\1_0\CodegenToolReference.html
@shrimp:
你還可以看看你上樓的那篇回貼,是客戶端調用Web Services的代碼例子。
(即 2006-06-29 11:22 | 冰川 那篇帖子)
另外:大家還有更好的客戶端調用Web Services代碼例子也請貼到這邊來啊!
@shrimp:
哈哈,是錯了,謝謝提出來,我實現后語句有的不記得的只好考了userguide里的語句,結果出了這種BUG,哈哈哈
2.直接考過去也可以的,看你的Tomcat是什么版本,可以自動發布的就行,
我沒修改前發布那段寫的就是用考的后來改了,這次又要改咯!
@shrimp:
1。你就按我的首貼做就好了,我修改并測試過了的。
2。具體Call,和Options的意思和用法可以去查看你下載的發布包中的類說明文檔,就在javadocs文件夾中。
3。下面是調用Web Service的客戶端代碼示例,大家有什么使用經驗或者好的代碼示例也可以寫回帖共享啊!
用非阻塞、雙向方式調用Web Service方法:"Echo" 的客戶端程序
(本人以及Userguide都推薦使用,也是比較常用的客戶端寫法)
try{
OMElement payload = ClientUtil.getEchoOMElement();
Options options = new Options();
options.setTo(targetEPR); // 左邊的參數:targetEPR == "http:/..."
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setUseSeparateListener(true);
options.setAction("urn:echo"); //這是我們在 service.xml 里的 Action 映射
//Callback to handle the response
Callback callback = new Callback(){
public void onComplete(AsyncResult result){
System.out.println(result.getResponseEnvelope());
}
public void onError(Exception e){
e.printStackTrace();
}
};
//非阻塞方式
sender = new ServiceClient();
sender.engageModule(new QName(Constants.MODULE_ADDRESSING));
sender.setOptions(options);
sender.sendReceiveNonBlocking(payload,callback);
//等待,直到接受到響應消息
while(!callback.isComplete()){
Thread.sleep(1000);
}
//在這里需要關閉客戶端
}catch(AxisFault axisFault){
axisFault.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}
finally{
try{
sender.finalizeInvoke();
}catch(AxisFault axisFault){
//此處代碼省略
}
}
希望大家多多貢獻關于Axis2的知識(:
@shrimp:
1. 我用的是AXIS2 1.0版
2. www.w3.org(萬維網組織全球辦事處)上有WSDL2.0的Reader具體網址:
http://www.w3.org/TR/wsdl20/
3. 你的錯誤信息說WSDL文件沒有進入到META-INF文件夾,還說什么你用了其他的RPC接受信息,我也搞不懂,你試試用AXIS2另一種發布方法吧!
步驟如下:
(1)前面的操作一直到打包都按照首帖上面的做。
(2)發布時我們不把.aar文件考過去了,而是打開IE輸入
http://localhost:8080/axis2進入Axis2界面(Tomcat要開啟),然后點擊
Administration,輸入用戶名:Admin 密碼:Axis2登陸進去,再點擊第一個
鏈接Upload Service,然后點瀏覽找到你想要發布的Web Service文件(即.aar文件),點Upload發布它!
(3)在IE輸入
http://localhost:8080/axis2后點Service去確認一下吧
上帝會保佑你的,阿門~~~
大家也可以像我那樣以回貼的形式,發表自己關于AXIS2的使用心得或經驗以供其他人共享!
我想讓急需了解AXIS2技術的人能夠在一個地方得到盡可能多的有關AXIS2的知識和代碼實例,這樣可以節約他們的時間,給他們帶來便利。
希望用過AXIS2 和 對AXIS2有一定研究的同仁們多多來這里發表經典回貼 !
以上回復中的代碼由于復制過來后忘了排版,造成了閱讀不方便,我很抱歉。
請大家把代碼自行復制,然后排一下版再看吧
@shrimp:
關于AXIS2中客戶端API同步/異步問題
同步/異步(或阻塞/非阻塞)行為是基于在web service請求的線程,同步服務將會阻塞,等待相關消息到達。另一方面,異步請求僅僅返回,等待相關消息被后臺另一個不同線程執行。
同步請求很簡單:請求在相關消息到達前等待,并且可以像本地過程調用一樣被編碼。但是異步消息的相互關系就比較復雜,客戶端必須處理這種復雜性。盡管如此,通過一些額外工作來處理這種復雜情況仍是必要的。
應答式消息可以表現為以下四種方式:
1.雙向In-Out 同步
2.雙向In-Out 異步
3.單向In-Out 同步
4.單向In-Out 異步
下面的代碼實例說明這些案例怎樣被Axis2尋址,注意客戶端API的四種屬性怎樣被使用。
1.In-Out同步,HTTP作為雙向傳輸方式
OMElement payload = .... Call call = new Call();call.setTo( new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, false);OMElement result = (OMElement) call.invokeBlocking( operationName.getLocalPart(), payload);
這里,SOAP消息經由同一個HTTP連接傳播,地址屬性沒有指定,所以它們在服務器方缺省為匿名,客戶端API將被鎖定直到回復消息到達。
2.In-Out異步,HTTP使用HTTP作為雙向傳送
//this is the payload goes on the body of SOAP message OMElement payload = .... Call call = new Call();call.setTo( new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, false);Callback callback = new Callback() { public void onComplete(AsyncResult result) { //what user can do to result } public void reportError(Exception e) { //on error }};call.invokeNonBlocking(operationName.getLocalPart(), payload, callback);
和前面相同,SOAP消息經由同一個HTTP連接傳輸并且不需要尋址,一旦回復消息到達客戶端API不會阻塞并且回調將被執行。
3.In-Out, 異步HTTP 作為單向傳輸
OMElement payload = .... Call call = new Call();call.setTo( new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, true);Callback callback = new Callback() { public void onComplete(AsyncResult result) { .... } public void reportError(Exception e) { ... }};call.engageModule(new Qname("addressing"));call.invokeNonBlocking(operationName.getLocalPart(), method, callback);
在這個案例中,SOAP消息通過兩個HTTP連接傳輸,尋址是強制的,ReplyTo標題出現指示服務器端經由單獨的通道發送回應。客戶端沒有阻塞,當回應消息到達時,喚起回調。
4.In-Out, 同步 HTTP 作為單向傳送
OMElement payload = .... Call call = new Call();call.setTo(new EndpointReference(AddressingConstants.WSA_TO, "HTTP://...));call.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, true);OMElement result = (OMElement) call.invokeBlocking( operationName.getLocalPart(), payload);
在這種場合下使用"In-Out,異步HTTP作為單向傳送"類型,在結果到達第二種連接時喚起阻塞,執行并返回結果。
總結
總而言之,web wervice消息行為建立在三種因素上:消息交互模式,客戶端同步異步模式和傳送行為。Asis2建立核心在不一定要任何MEP類型,不過為MEPs的廣泛支持:單向和應答提供了客戶端API支持,這篇文章解釋Axis2消息支持概念和客戶端API的使用。
@shrimp:
1.我的可以看到WSDL文件啊,你那里報了什么錯嗎?
2.異步傳輸模式我還沒用到,下次去看看
3.客戶端應該是監聽的