Package com.robustaweb.library.rest.client.implementation

Source Code of com.robustaweb.library.rest.client.implementation.ApacheRestClient

/*
* Copyright 2007-2011 Nicolas Zozol
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.robustaweb.library.rest.client.implementation;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.http.Header;
import org.apache.http.HeaderIterator;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;

import com.robustaweb.library.commons.exception.HttpException;
import com.robustaweb.library.commons.util.FileUtils;
import com.robustaweb.library.rest.HttpMethod;
import com.robustaweb.library.rest.client.SynchronousRestClient;

/**
* Simple REST Http client wrapping the very popular Apache Client. Check the Apache Client librairies are in the ClassPath.
* @author Nicolas Zozol - Edupassion.com - Robusta Web nzozol@edupassion.com
*/
public class ApacheRestClient extends AbstractSynchronousRestClient<DefaultHttpClient> {

    DefaultHttpClient client ;
  

    public ApacheRestClient(String applicationUri) {
        checkConstructorUri(applicationUri);
        setApplicationUri(applicationUri);
    }


    /**
     * Create the Apache Http Client ; overwrite this method to create a client with your own caracteristics, including SSL
     * @return
     */
    protected DefaultHttpClient createClient(){
        return new DefaultHttpClient();
    }


    @Override
    protected String encodeParameter(String nameOrValue) {
        try {
            return URLEncoder.encode(nameOrValue, "UTF-8");
        } catch (UnsupportedEncodingException ex) {
            throw new IllegalStateException("Can't encode " + nameOrValue);
        }
    }

    @Override
    protected String executeMethod(HttpMethod method, String url, String requestBody) throws HttpException {
        assert url.startsWith("http");


        try {
            client = createClient();
            HttpUriRequest httpMethod = null;
           
            switch (method) {
                case GET:
                    httpMethod = new HttpGet(url);
                    break;
                case DELETE:
                    httpMethod = new HttpDelete(url);
                    break;

                case POST:
                    httpMethod = new HttpPost(url);
                    ((HttpPost) httpMethod).setEntity(new StringEntity(this.requestBody));
                    break;
                case PUT:
                    httpMethod = new HttpPut(url);
                    ((HttpPut) httpMethod).setEntity(new StringEntity(this.requestBody));
                    break;
                default:
                    throw new IllegalStateException("Can't execute this method : " + method);
            }

            //Adding headers
            if (this.contentType == null){
                this.contentType = SynchronousRestClient.xmlContentType;
            }
            httpMethod.addHeader("Content-type", this.contentType);
            if (authorizationValue != null) {
                httpMethod.addHeader("Authorization", ApacheRestClient.authorizationValue);
            }

            //Executing
            HttpResponse httpResponse = client.execute(httpMethod);

            //parsing responseHeaders
          
            HeaderIterator it = httpResponse.headerIterator();
            while (it.hasNext()){
              Header header = it.nextHeader();
              responseHeaders.put(header.getName(), header.getValue());
            }
           
            //Parsing response
            this.response = FileUtils.readInputStream(httpResponse.getEntity().getContent());
           
           
            return this.response;

        } catch (IOException ex) {
            throw new HttpException("IO Exception : "+ex.getMessage(), ex);
        }finally{
            clear();
        }
    }

    private void clear() {
        this.setNextRequestBody("");
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public DefaultHttpClient getUnderlyingClient() {
        return client;
    }



       

}

TOP

Related Classes of com.robustaweb.library.rest.client.implementation.ApacheRestClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.