处理对响应对象处理过程的封装
package com.struts2.demo;
import com.struts2.demo.utils.AvailableSettings;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import java.io.IOException;
/**
* Handler that encapsulates the process of generating a response object from a HttpResponse.
* Created by Frank on 2014/6/9.
*/
public class FluentResponseHandling {
private static final Log logger = LogFactory.getLog(AvailableSettings.LOGNAME_TEST);
public static void main(String[] args) {
try {
Document document = Request.Get("http://www.baidu.com").execute().handleResponse(new ResponseHandler<Document>() {
@Override
public Document handleResponse(HttpResponse response) {
return getXmlDoc(response);
}
});
System.out.println(document.asXML());
} catch (IOException e) {
logger.error("IOException:" + e.getMessage());
}
}
private static Document getXmlDoc(HttpResponse response) {
StatusLine statusLine = response.getStatusLine();
HttpEntity httpEntity = response.getEntity();
if (statusLine.getStatusCode() >= 300) {
logger.error("HttpResponseException,statusCode:" + statusLine.getStatusCode() + " reasonPhrase:" + statusLine.getReasonPhrase());
return null;
}
if (null == httpEntity) {
logger.error("ClientProtocolException:Response contains no content");
return null;
}
ContentType contentType = ContentType.getOrDefault(httpEntity);
if (!contentType.equals(ContentType.APPLICATION_XML)) {
logger.error("Unexpected content type:" + contentType);
return null;
}
SAXReader saxReader = new SAXReader();
saxReader.setEncoding(Consts.UTF_8.name());
saxReader.setValidation(false);
try {
return saxReader.read(httpEntity.getContent());
} catch (DocumentException | IOException e) {
logger.error("axReader.read exception:" + e.getMessage());
return null;
}
}
}