Future<String[]> monitor = threads.submit(new Callable<String[] >() {
@Override
public String[] call() throws Exception {
Call call = getMonitorCall();
String result[] = (String[]) call.invoke(new Object[]{});//返回结果
log.info("DG983盾构主监控返回数据:"+result);
return result;
}
});
try {
ShieldData shieldData = new ShieldData();
String[] Data1 = monitor.get(60, TimeUnit.SECONDS);
String dataDG983 = org.apache.commons.lang3.StringUtils.join(Data1, ",");
shieldData.setType(active);
//等待数据接收完成
shieldData.setMonitorDG983(dataDG983);
log.info("DG983对象数据"+shieldData.toString());
//发送智慧工地服务器
String Vo = OKHttpUtil.postMap(addShieldProUrlNew15, null, shieldData);
log.info("DG983数据已发送成功!且返回数据:"+Vo);
log.info("DG983程序调用完成");
}catch (Exception e){
log.info("DG983链接错误:"+e);
log.info("DG983错误消息:"+e.getMessage());
}
调用:
private Call getMonitorCall(){
if(monitorCall == null){
try {
//使用AXIS远程调用WebService服务; webservice路径 这里后面加不加 "?wsdl" 效果都一样的
String endpoint = "http://192.168.110.24/OPC_Read_Write_Svr/Service.asmx";//链接地址 DG983
Service service = new Service();//新建服务
URL url = new URL(endpoint);//新建URL
monitorCall = (Call) service.createCall();//服务链接
monitorCall.setTargetEndpointAddress(url);//设置url
monitorCall.setOperationName(new QName("getData"));//设置调用接口名
// 设置返回值类型
// 对于返回是字符串数组的返回类型只有这两种可行
monitorCall.setReturnClass(java.lang.String[].class);
monitorCall.setUseSOAPAction(true);
monitorCall.setSOAPActionURI("http://www.crcc.cn/getData");
// call.setReturnType(XMLType.SOAP_ARRAY);
// call.setUseSOAPAction(true);
// call.setSOAPActionURI("http://www.crcc.cn/getData");
}catch (Exception e){
log.error("[e]getMonitorCall exception!",e);
}
}
return monitorCall;
}
该博客主要讲述了如何通过AXIS调用远程WebService服务获取DG983盾构主监控数据,处理并组装数据到ShieldData对象中,然后利用OkHttpUtil发送数据到智慧工地服务器的过程。涉及到的步骤包括设置服务链接、操作名称、返回类型以及异常处理。
1832

被折叠的 条评论
为什么被折叠?



