上個版本完成了與ODM的交互. 主要用的是web service.
需求:把用戶上傳的圖片傳到ODM系統.一段時間後(我們系統服務器保存用戶圖片爲62天),
用戶如果想要查看圖片,我們通過web service從odm系統獲取 圖片進行展示。
備註:分2次進行彙總,第一部分是從odm系統獲取圖片展示;第二部分是上傳圖片到odm系統.
源碼及shell腳本存於網盤/java/project/odm.本文介紹第一部分.
一, 準備工作:
1), wsdl文件
2), 訪問時所需的 URL, username 和password
二, 開發過程
1), 用jdk自帶工具wsimport生成客戶端代碼.
wsimpost命令有幾個重要的參數, 如下:
-keep:是否生成java源文件
-d:指定輸出目錄
-s:指定源代碼輸出目錄
-p:以package的形式生成文件
-verbose:在控制檯顯示輸出信息
e.g. wsimport odmService.wsdl -s com.darren -p C:\11_Darren\java\wsimport\src
2), 複製客戶端代碼到工程中,把所需訪問的URL地址配置到配置文件中,根據環境不用可隨意變更.
3), coding 調用
e.g.
ODMServiceService service = null;
// 準備參數
GetDocumentRequestTO getDocumentRequest = new GetDocumentRequestTO();
getDocumentRequest.setDocumentId(odm_job_id);
getDocumentRequest.setLoginPassword(ApplicationConstant.IN_ODM_PWD);
getDocumentRequest.setLoginUser(ApplicationConstant.IN_ODM_USER);
try {
//服務鏈接, 連接失敗會拋出WebServiceException
service = new ODMServiceService();
//獲取圖片,獲取失敗拋出ODMServiceException_Exception
GetDocumentResponseTO rto = service.getODMService().getDocument(
getDocumentRequest);
//把基於base64的圖片輸出到前臺
OutputStream os = response.getOutputStream();
response.setContentType("image/jpeg");
byte[] b = rto.getData();
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{
b[i]+=256;
}
}
os.write(b);
os.flush();
os.close();
} catch (WebServiceException e1) {
log.error("could not connect to ODM server. "+ e1.getMessage()));
log.error("args URL:"+ApplicationConstant.ODM_URL);
return odm_err_msg;
}catch(ODMServiceException_Exception e2){
log.error("get photo failed. details: "+ e1.getMessage()));
return odm_err_msg;
}catch (Exception e){
log.error("get photo failed. details: "+ e.getMessage()));
return odm_err_msg;
}
後記:
1),開發時遇到wsdl文件種有重複定義節點導致無法生成客戶端代碼.
2), 開發時遇到發送無效的圖片ID,導致odm返回tomcat異常界面,尷尬.
3),權限問題.