All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fisco.bcos.web3j.protocol.http.HttpService Maven / Gradle / Ivy

There is a newer version: 2.6.6
Show newest version
package org.fisco.bcos.web3j.protocol.http;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;

import org.fisco.bcos.web3j.protocol.Service;
import org.fisco.bcos.web3j.protocol.core.Request;
import org.fisco.bcos.web3j.protocol.core.Response;

/**
 * HTTP implementation of our services API.
 */
public class HttpService extends Service {

    public static final String DEFAULT_URL = "http://localhost:8545/";

    private CloseableHttpClient httpClient;

    private final String url;

    public HttpService(String url, CloseableHttpClient httpClient, boolean includeRawResponses) {
        super(includeRawResponses);
        this.url = url;
        this.httpClient = httpClient;
    }

    public HttpService(String url, CloseableHttpClient httpClient) {
        this(url, httpClient, false);
    }

    public HttpService(String url) {
        this(url, HttpClients.custom().setConnectionManagerShared(true).build());
    }

    public HttpService() {
        this(DEFAULT_URL);
    }

    protected void setHttpClient(CloseableHttpClient httpClient) {
        this.httpClient = httpClient;
    }

    @Override
    public  T send(
            Request request, Class responseType) throws IOException {

        byte[] payload = objectMapper.writeValueAsBytes(request);

        HttpPost httpPost = new HttpPost(this.url);
        httpPost.setEntity(new ByteArrayEntity(payload));
        Header[] headers = buildHeaders();
        httpPost.setHeaders(headers);

        ResponseHandler responseHandler = getResponseHandler(responseType);
        try {
            return httpClient.execute(httpPost, responseHandler);
        } finally {
            httpClient.close();
        }
    }

    private Header[] buildHeaders() {
        List
headers = new ArrayList<>(); headers.add(new BasicHeader("Content-Type", "application/json; charset=UTF-8")); addHeaders(headers); return headers.toArray(new Header[0]); } protected void addHeaders(List
headers) { } public ResponseHandler getResponseHandler(Class type) { return response -> { int status = response.getStatusLine().getStatusCode(); if (status >= 200 && status < 300) { HttpEntity entity = response.getEntity(); if (entity != null) { return objectMapper.readValue(response.getEntity().getContent(), type); } else { return null; } } else { throw new ClientProtocolException("Unexpected response status: " + status); } }; } @Override public void close() throws IOException { } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy