`
raymond.chen
  • 浏览: 1426265 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用HttpClient访问CXF的RESTful接口

    博客分类:
  • Java
 
阅读更多

用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);

 

分享到:
评论

相关推荐

    cxf实现restful资料

    CXF,全称Apache CXF,是一个开源的Java框架,它提供了丰富的功能来帮助开发者创建和消费Web服务,包括RESTful服务。本资料主要讲解如何使用Spring与CXF集成,来发布RESTful服务,并提供了相关的项目案例和代码。 ...

    RestFul(一)WebService之CXF的RestFul风格开发

    例如,CXF-Tools可以将Java接口自动生成对应的RESTful服务代码。 **7. 性能与扩展性** 了解如何通过CXF配置优化REST服务的性能,比如缓存策略、线程池设置等。同时,学习如何集成其他技术,如Spring Boot,以提升...

    spring,cxf,restful发布webservice传递List,Map,List<Map>

    5. **暴露服务**:通过Spring Boot的`@RestController`注解暴露RESTful接口。 在客户端,你可以使用HTTP库(如Apache HttpClient或Java的HttpURLConnection)发送POST请求,携带JSON或XML格式的复杂数据到Web服务的...

    cxf 3.1.1 jar包

    1. **cxf-api.jar**: 包含CXF的主要API接口和抽象类,这些接口定义了如何与CXF框架交互。 2. **cxf-rt-frontend-jaxws.jar**: 提供了JAX-WS(Java API for XML Web Services)的支持,用于创建和处理基于SOAP的Web...

    cxf相关的jar

    CXF不仅仅是SOAP(简单对象访问协议)和RESTful(Representational State Transfer)服务的实现,还提供了丰富的功能,如WS-*(Web服务扩展)规范支持、客户端和服务端的代码生成工具、多种传输协议支持以及与Spring...

    cxf基本jar包

    2. **JAX-WS和JAX-RS实现**:CXF实现了Java API for XML Web Services (JAX-WS)和Java API for RESTful Web Services (JAX-RS),分别用于构建SOAP和RESTful接口。开发者可以使用这些API轻松地创建服务端点和服务...

    cxf-rt.zip

    7. **文档生成**:CXF可以从服务接口生成WSDL(Web Services Description Language)文档,也可以从WSDL生成服务接口代码,极大地简化了开发流程。 8. **测试工具**:CXF提供了一些测试工具,如CXF TestSuite,可以...

    CXF方式开发和部署webservice应用

    CXF允许开发者通过多种协议如SOAP、RESTful来实现Web服务,并且提供了丰富的API和工具支持,使得开发过程更加简便。本篇文章将深入探讨如何使用CXF进行Web服务的开发与部署。 ### 1. CXF概述 Apache CXF最初由XFire...

    cxf webservice所需要jar包2.6.6

    例如,`cxf-api.jar`包含了CXF的主要API接口,`cxf-rt-core.jar`包含了CXF运行时的核心实现,`cxf-rt-bindings-soap.jar`则包含了SOAP绑定相关的类。 在CXF 2.6.6版本中,开发者可能需要以下几类jar包: 1. **核心...

    client cxf

    对于RESTful服务,CXF提供了`ApacheHttpClient4Executor`和`AsyncApacheHttpClient4Executor`,它们基于Apache HttpClient库。你可以通过`ClientBuilder`构建客户端,并设置HTTP请求的属性,如URL、HTTP方法、请求...

    cxf-3.0.10

    CXF允许开发者用Java编程语言来实现Web服务,并提供了丰富的API和工具,简化了服务接口的定义、服务的部署和调用。 在"压缩包子文件的文件名称列表"中,"apache-cxf-3.0.10"可能包含以下组件: 1. `cxf-api` - 包含...

    cxf+spring所需的jar包

    - 可能还包括其他依赖,如jaxb、wsdl4j、httpclient等,这些都是CXF和Spring工作所需的基础库。 5. 使用步骤: - 创建Spring配置文件,定义CXF服务的bean。 - 导入必要的jar包到项目类路径中。 - 在Spring配置...

    cxf的jar包

    10. **cxf-rt-transports-http**: 提供HTTP/HTTPS传输机制,使得CXF服务可以通过HTTP协议进行访问。 11. **cxf-rt-transports-http-hc**: 基于Apache HttpClient的HTTP/HTTPS传输,提供了更高级的HTTP功能。 12. *...

    cxf 源码包

    - `cxf-api`:包含CXF的核心API和接口。 - `cxf-rt-frontend-jaxws`:JAX-WS前端实现,用于创建和消费SOAP服务。 - `cxf-rt-frontend-jaxrs`:JAX-RS前端实现,用于创建和消费RESTful服务。 - `cxf-rt-transports-...

    restful 请求和返回XML的例子

    - 通常,开发者会定义一个Java接口,其中的方法对应RESTful操作,然后使用CXF生成对应的端点(Endpoint)和服务文档。 - 在客户端,可以使用Java的HTTP客户端库(如Apache HttpClient)或者CXF的JAX-RS客户端API来...

    cxf 开发webservice与调用demo

    CXF是一个强大的Web服务框架,它支持SOAP、RESTful等多种通信协议,同时也支持WS-*规范,如WS-Security、WS-Addressing等。CXF提供了多种开发Web服务的方式,包括JAX-WS(Java API for XML Web Services)和JAX-RS...

    cxf开发教程2

    2. **丰富的支持**:CXF支持多种Web服务标准,包括SOAP、RESTful、MTOM、SwA等,以及各种WS-*规范。 3. **集成性**:与Spring框架紧密集成,易于部署和管理服务。 4. **性能**:CXF使用高效的代码生成和优化技术,...

    CXF3.1.11客户端最精简jar包

    CXF允许开发者通过多种方式创建和消费Web服务,包括基于Java API for RESTful Web Services (JAX-RS) 和 Java API for XML Web Services (JAX-WS) 的接口。在提供的"CXF3.1.11客户端最精简jar包"中,包含了执行CXF...

    cxf3.0.2 客户端完整jar包

    2. **HTTP传输库**:如httpclient和httpcore,负责处理HTTP通信,使CXF客户端能够通过HTTP或HTTPS与服务器进行交互。 3. **XML解析库**:如Woodstox或Xerces,用于解析和生成XML文档,这是Web服务通信中的常见数据...

    cxf3.2.0 webservice 最少jar包

    - `cxf-rt-transports-http.jar` 和 `cxf-rt-transports-http-hc.jar`:分别提供基于Java内置HTTP支持和HttpClient的HTTP传输能力。 - `cxf-rt-bindings-soap.jar`:处理SOAP绑定。 - `cxf-rt-wsdl.jar`:解析和处理...

Global site tag (gtag.js) - Google Analytics