The Spring by Example Utils module currently has the HttpClientTemplate and HttpClientOxmTemplate 
        which are light wrappers on top of Apache's HttpClient providing Spring style code based templating. 
        The latter template provides marshaling and unmarshalling of XML based requests.
    
        The Logger BeanPostProcessor provides logger creation and injection based on reflection, interfaces, or annotations.
    
        The 
        
            ImageProcessor
         is a utility to process images and currently can help scale and image from one size to another 
        either using a java.io.File or a java.io.InputStream to a java.io.OututStream.
    
            HttpClientTemplate which uses Apache's HttpClient to process HTTP requests and receive the data as 
            a String, InputStream, or byte[]. 
        
                    Set a default URI for the HttpClientTemplate.
                
                        
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="httpClient" class="org.springbyexample.httpclient.HttpClientTemplate">
        <property name="defaultUri">
            <value><![CDATA[http://localhost:8093/test]]></value>
        </property>
    </bean>
</beans>
                        
                    
                    The HttpClient instance used by HttpClientTemplate could be set during configuration 
                    with authorization, but all of the default authorization classes must be set using constructors. 
                    The Spring by Example authorization beans allow the use of setters so are a little more Spring friendly. 
                    The example below will use the userName and password when challenged for authentication by a request 
                    to localhost:8093. 
                
                    When accessing a site that will challenge any request, authenticationPreemptive 
                    can be set to true. Then the credentials will be sent along with every request instead of 
                    a challenging needed to be issues before the credentials are sent.
                
                        
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="httpClient" class="org.springbyexample.httpclient.HttpClientTemplate">
        <property name="defaultUri">
            <value><![CDATA[http://localhost:8093/admin/test]]></value>
        </property>
        <property name="credentials">
            <list>
                <bean class="org.springbyexample.httpclient.auth.Credentials">
                    <property name="authScopeHost" value="localhost" />
                    <property name="authScopePort" value="8093" />
                    <property name="userName" value="jsmith" />
                    <property name="password" value="password" />
                </bean>
            </list>
        </property>
    </bean>
</beans>
                        
                    
                Excerpts from HttpClientTemplateTest. 
            
Example 1. HTTP Get Response with a String
                    
template.executeGetMethod(new ResponseStringCallback() {
    public void doWithResponse(String response) throws IOException {
        ...
        
        logger.debug("HTTP Get string response. '{}'", response);
    }
});
                    
                Example 2. HTTP Get Response with an InputStream
                    
template.executeGetMethod(new ResponseStreamCallback() {
    public void doWithResponse(InputStream in) throws IOException {
        String response = IOUtils.toString(in);
        
        ...
        
        logger.debug("HTTP Get stream response. '{}'", response);
    }
});
                    
                Example 3. HTTP Get Response with a Byte Array
                    
template.executeGetMethod(new ResponseByteCallback() {
    public void doWithResponse(byte[] byteResponse) throws IOException {
        String response = new String(byteResponse);
        ...
        
        logger.debug("HTTP Get byte response. '{}'", response);
    }
);
                    
                Example 4. HTTP Get with Parameters & Response with a String
                    
Map<String, String> hParams = new HashMap<String, String>();
hParams.put(GET_PARAM_INPUT_KEY, GET_PARAM_INPUT_VALUE);
template.executeGetMethod(hParams, 
    new ResponseStringCallback() {
        public void doWithResponse(String response) throws IOException {
            ...
            
            logger.debug("HTTP Get with params string response. '{}'", response);
        }
});
                    
                Example 5. HTTP Post with Parameters & Response with a String
                    
Map<String, String> hParams = new HashMap<String, String>();
hParams.put(LOWER_PARAM, POST_NAME);
template.executePostMethod(hParams, 
    new ResponseStringCallback() {
        public void doWithResponse(String response) throws IOException {
            ...
            logger.debug("HTTP Post string response. '{}'", response);
        }
});
                    
                Example 6. HTTP Post with Parameters & Response with an InputStream
                    
Map<String, String> hParams = new HashMap<String, String>();
hParams.put(LOWER_PARAM, POST_NAME);
template.executePostMethod(hParams,
    new ResponseStreamCallback() {
        public void doWithResponse(InputStream in) throws IOException {
            String response = IOUtils.toString(in);
            
            ...
            logger.debug("HTTP Post stream response. '{}'", response);
        }
});
                    
                Example 7. HTTP Post with Parameters & Response with a Byte Array
                    
Map<String, String> hParams = new HashMap<String, String>();
hParams.put(LOWER_PARAM, POST_NAME);
template.executePostMethod(hParams,
    new ResponseByteCallback() {
        public void doWithResponse(byte[] byteResponse) throws IOException {
            String response = new String(byteResponse);
            
            ...
            logger.debug("HTTP Post byte response. '{}'", response);
        }
});
                    
                Example 8. HTTP Post with Data & Response with a String
A post sending data, like XML, in the request for the server to process and return results.
                    
protected final static String POST_DATA_INPUT = "<message>Greetings</message>";
...
template.executePostMethod(POST_DATA_INPUT,
    new ResponseStringCallback() {
        public void doWithResponse(String response) throws IOException {
            ...
            logger.debug("HTTP string data post string response. '{}'", response);
        }
});