上个版本完成了与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),权限问题.