在webservice裡調用耗時方法出錯的解決方案
webservice調用耗時方法出錯
在webservice裡調用多個耗時的方法時,如果按順序執行,下面的方法要等上面的方法執行完畢才能執行,如果這些方法比較耗時,並且包括回調等異步調用,就回出現下面的方法不能正確執行,
實例代碼如下:
public String runMethod(String syncId) { try { //處理Datapull dataPullService.setSyncId(syncId); //設置數據庫參數 dataPullService.setJdbcUrl(Config.getStringValue("jdbc.jdbcUrl")); dataPullService.setUser(configurer.decrypt(Config.getStringValue("jdbc.user"), "1202000200021234")); dataPullService.setPassword(configurer.decrypt(Config.getStringValue("jdbc.password"), "1202000200021234")); dataPullService.setTypeid(1); dataPullService.run(); //處理ofd轉換 ofdService.setSyncId(syncId); ofdService.setServerUrl(Config.getStringValue("serverUrl")); ofdService.run(); //判斷OFD文件是否轉換完成 while(true) { if(serviceManager.isHasOFD(syncId)) { break; } } //處理pdf轉換 pdfService.setSyncId(syncId); pdfService.setServerUrl(Config.getStringValue("serverUrl")); pdfService.run(); }catch(Exception e) { return "error "+syncId; } return "success "+syncId; }
在上面的方法裡,處理ofd的代碼執行完畢會在某個表裡插入一條數據,這個操作耗時,並且是異步的,會出現還沒有插入成功,下面的pdf執行代碼查詢不到記錄導致調用pdf部分失敗。
解決方案是:
一直去查詢那張表,如果有記錄則調用pdf部分代碼,使用死循環解決。
在調用webservice時常見的幾種異常原因
今天由於公司業務,需要調用webservice服務,一開始一直報錯,在網上搜集一些資料後,先整理如下:
問題1:
Java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException,原因是沒有導入 axis2-saaj.jar包
問題2:
java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton,原因是沒有 導入commons-discovery.jar包
問題3:
org.apache.commons.logging.LogFactory,原因是沒有導入commons-logging.jar包
問題4:
java.lang.NoClassDefFoundError: javax/xml/rpc/Service,原因是沒有導入jaxrpc.jar包(可以到axis官網下載對應版本的axis,在其中的lib目錄可以找到);如果使用的是maven,可以導入org.apache.axis下的axis-jaxrpc-1.4.jar。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- java調用webservice的.asmx接口的使用步驟
- SpringBoot項目使用 axis 調用webservice接口的實踐記錄
- SpringBoot整合WebService服務的實現代碼
- java調用WebService服務的四種方法總結
- 透明化Sharding-JDBC數據庫字段加解密方案