1、Webservice:效率不高基于soap协议,其主要的特点是跨语言、跨平台的。项目中不推荐使用,可用于不同公司间接口的调用。
2、使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。
3、使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。使用Java语言开发,只能用于Java语言开发的项目间的通信,不具备跨语言,跨平台的特点!
调用REST风格接口:
Map<String, String> m = new HashMap<String, String>(); m.put("check", "false"); m.put("userId", userId); m.put("data", allresouce.toString()); msg =doRest(url, "POST", m);
public static String doRest(String uri, String methodName, Map param) throws Exception { if ((methodName == null) || ("".equals(methodName))) methodName = "GET"; String data = ""; System.out.println(methodName + " rest:" + uri); HttpClient httpClient = new DefaultHttpClient(); HttpRequestBase request = null; if ("GET".equals(methodName)) { request = new HttpGet(uri); } else { List list; Iterator iterator; Object key; BasicNameValuePair pair; if ("POST".equals(methodName)) { request = new HttpPost(uri); list = new ArrayList(); for (iterator = param.keySet().iterator(); iterator.hasNext(); ) { key = iterator.next(); pair = new BasicNameValuePair((String) key, (String) param.get(key)); System.out.println(pair.toString()); list.add(pair); } ((HttpEntityEnclosingRequestBase) request) .setEntity(new UrlEncodedFormEntity(list, "UTF-8")); } else if ("PUT".equals(methodName)) { request = new HttpPut(uri); list = new ArrayList(); for (iterator = param.keySet().iterator(); iterator.hasNext(); ) { key = iterator.next(); pair = new BasicNameValuePair((String) key, (String) param.get(key)); System.out.println("------------------- "+ pair.toString()); list.add(pair); } System.out.println("SIZE--------------------------"+ list.size()); ((HttpEntityEnclosingRequestBase) request) .setEntity(new UrlEncodedFormEntity(list, "UTF-8")); } else if ("DELETE".equals(methodName)) { request = new HttpDelete(uri); } } try { HttpResponse response = httpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200) { System.out.println("Method failed: " + response.getStatusLine() + " for url " + uri); throw new Exception("Method failed: " + response.getStatusLine() + " for url " + uri); } InputStream inputStream = response.getEntity().getContent(); BufferedReader br = new BufferedReader(new InputStreamReader( inputStream, "UTF-8")); StringBuffer stringBuffer = new StringBuffer(); String str = ""; while ((str = br.readLine()) != null) stringBuffer.append(str); data = stringBuffer.toString(); } catch (HttpException e) { throw e; } catch (IOException e) { throw e; } catch (Exception e) { throw e; } finally { try { httpClient.getConnectionManager().shutdown(); } catch (Exception ignore) { } } System.out.println("rest data:" + data); return data; }
调用webservice接口
org.apache.axis.client.Service service = new org.apache.axis.client.Service(); Call call; call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(smpWebServiceUrl)); call.setOperationName("startNetMgrFromBomc"); call.addParameter("RequestInfo", XMLType.XSD_STRING,ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING); Object[] para = new Object[] {sendInfo}; Object ret = call.invoke("http://service.smp.linkage.com/","startNetMgrFromBomc",para); String returnStr = (String) ret; System.err.println("^^^^^^^^^^SMP:"+returnStr); System.err.println(); Document document = DocumentHelper.parseText(returnStr); Element returnInfo = document.getRootElement(); Element elReturnCode = returnInfo.element("returnCode"); String returnCode = elReturnCode.getText(); Element elErrorInfo = returnInfo.element("errorInfo"); errorInfo = elErrorInfo.getText(); Element eSmpId = returnInfo.element("smpId"); String smpId = eSmpId.getText();
生成xml文件
Document sendDoc = DocumentHelper.createDocument();
String title = sendDoc.asXML();
Element callInfo = sendDoc.addElement("callInfo");
Element billInfo = callInfo.addElement("billInfo");
Element bomcId = billInfo.addElement("bomcId"); //工单Id
bomcId.addText(“123456”);
return title+callInfo.asXML();//string
解析xml :
Document history = DocumentHelper.parseText(xml); Element root = history.getRootElement(); for (Iterator<Element> iter = root.elementIterator(); iter.hasNext();) { Element element = iter.next(); if(element.element("fields")==null){ continue; } Attribute nodeId = element.attribute("parentId"); System.out.println(nodeId.getValue());
for (Iterator<Element> fields = element.element("fields").elementIterator();fields.hasNext(); ) {
Element field = fields.next();
if(nodeId.getValue().equals("0") && field.attribute("id").getValue().equals("flow_attach")){
itsmTaskDatas.get(0).setContext(field.getText()); //暂时把附件信息放这
continue;
}
String id = field.attribute("id").getValue();
if(id.equals("auditdesc")||id.equals("manager_opinion")||id.equals("fhandle_opinion")||id.equals("dispose_result")||id.equals("isReport")){
System.out.println(id+"::::"+field.getText());
itsmTaskDatas.get(i).setContext(field.getText());
break;
}else{
itsmTaskDatas.get(i).setContext("");
}
} }