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; }