用CXF可以开发RESTful服务,服务接口的输入和输出支持xml和json两种格式。
工具类源码:
/** * 以get方式访问 * * @param url 接口url地址 * @return */ public static String get(String url) { HttpClient httpClient = new DefaultHttpClient(); try { HttpGet httpGet = new HttpGet(url); httpGet.addHeader("accept", "application/xml"); HttpResponse httpResponse = httpClient.execute(httpGet); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity httpEntity = httpResponse.getEntity(); String result = EntityUtils.toString(httpEntity); EntityUtils.consume(httpEntity); return result; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { httpClient.getConnectionManager().shutdown(); } catch (Exception ex) { ex.printStackTrace(); } } return ""; } /** * 以post方式访问 * * @param url 接口url地址 * @param xmlBody xml格式的字符串 * @return */ public static String post(String url, String xmlBody) { HttpClient httpClient = new DefaultHttpClient(); try { HttpPost httpPost = new HttpPost(url); StringEntity input = new StringEntity(xmlBody, "UTF-8"); input.setContentType("application/xml"); httpPost.setEntity(input); HttpResponse httpResponse = httpClient.execute(httpPost); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity httpEntity = httpResponse.getEntity(); String result = EntityUtils.toString(httpEntity); EntityUtils.consume(httpEntity); return result; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { httpClient.getConnectionManager().shutdown(); } catch (Exception ex) { ex.printStackTrace(); } } return ""; } /** * jaxb对象转成xml格式的字符串 * * @param jaxbElement jaxb对象,类必须加注解类 @XmlRootElement * @return */ public static String convertToXML(Object jaxbElement){ String result = null; try{ JAXBContext context = JAXBContext.newInstance(jaxbElement.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); StringWriter writer = new StringWriter(); marshaller.marshal(jaxbElement, writer); result = writer.toString(); }catch(Exception ex){ ex.printStackTrace(); } return result; } /** * 格式化xml字符串 * * @param xmlStr xml字符串 * @return * @throws Exception */ public static String formatXML(String xmlStr) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new StringReader(xmlStr)); String resultXml = null; XMLWriter writer = null; if(document != null){ try { StringWriter stringWriter = new StringWriter(); OutputFormat format = new OutputFormat(" ", true, "UTF-8"); writer = new XMLWriter(stringWriter, format); writer.write(document); writer.flush(); resultXml = stringWriter.getBuffer().toString(); }finally{ if(writer != null){ try{ writer.close(); writer = null; }catch(IOException ex){ ex.printStackTrace(); } } } } return resultXml; }
接口调用范例:
url = "http://localhost:8080/server/rest/Param/findOne/1/M"; String result = get(url); System.out.println(formatXML(result)); url = "http://localhost:8080/server/rest/doingLog/save"; DoingLog doingLog = new DoingLog(); doingLog.setCountry("中国"); doingLog.setProvince("广东"); doingLog.setCity("广州"); doingLog.setDeviceType("M"); doingLog.setRemoteAddress("127.0.0.1"); doingLog.setCreateTime(new Date()); result = post(url, convertToXML(doingLog)); System.out.println(result);