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

com.bigdata.rdf.sail.webapp.client.DefaultHttpClientFactory Maven / Gradle / Ivy

/**
1Copyright (C) SYSTAP, LLC DBA Blazegraph 2014.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
package com.bigdata.rdf.sail.webapp.client;

import org.apache.log4j.Logger;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.util.ssl.SslContextFactory;

/**
 * This implementation:
 * 
    *
  • Creates an {@link AutoCloseHttpClient}.
  • *
  • Sets up redirect handling.
  • *
  • Sets a default SSL context factory. By default the * {@link SslContextFactory} will trusts all certificates. This allows encrypted * communications with any SSL endpoint, but it does not verify the identity * associated with that certificate. You can change the default behavior by * specify the {@link Options#SSL_KEYSTORE_PATH} system property.
  • *
* * @see Options */ public final class DefaultHttpClientFactory implements IHttpClientFactory { private static final Logger log = Logger.getLogger(DefaultHttpClientFactory.class); public interface Options { /** * This is the name of an optional System property that may be used to * override the {@link IHttpClientFactory} implementation class (default * {@value #DEFAULT_SSL_KEYSTORE_PATH}). */ final static public String SSL_KEYSTORE_PATH = DefaultHttpClientFactory.class .getName() + ".SSLKeystorePath"; /** * There is no default SSL keystore. When not specified, all SSL end * points will be trusted. */ final static public String DEFAULT_SSL_KEYSTORE_PATH = null; final static public String FOLLOW_REDIRECTS = DefaultHttpClientFactory.class .getName() + ".followRedirects"; final static public String DEFAULT_FOLLOW_REDIRECTS = "true"; /** * The name of the system property that may be used to specify the maximum * size (in bytes) for the Jetty response buffer (default @value * {@value #DEFAULT_RESPONSE_BUFFER_SIZE}) * * @see Set query timeout and * response buffer length on jetty response listener * @see Set jetty request * buffer size */ static public final String RESPONSE_BUFFER_SIZE = DefaultHttpClientFactory.class .getName() + ".responseBufferSize"; /** * The default maximum size of the jetty response buffer (@value * {@value #DEFAULT_RESPONSE_BUFFER_SIZE}). *

* Note: The default value for the jetty platform is 16kb. */ static public final int DEFAULT_RESPONSE_BUFFER_SIZE = 16 * 1024; /** * The name of the system property that may be used to specify the maximum * size (in bytes) for the Jetty request buffer (default @value * {@value #DEFAULT_REQUEST_BUFFER_SIZE}) * * @see Set jetty request * buffer size */ public static final String REQUEST_BUFFER_SIZE = DefaultHttpClientFactory.class .getName() + ".requestBufferSize"; /** * The default maximum size of the jetty request buffer (@value * {@value #DEFAULT_REQUEST_BUFFER_SIZE}). *

* Note: The default value for the jetty platform is 4kb. */ public static final int DEFAULT_REQUEST_BUFFER_SIZE = 16 * 1024; } @Override public HttpClient newInstance() { final AutoCloseHttpClient cm; { final String sslKeystorePath = System.getProperty( Options.SSL_KEYSTORE_PATH, Options.DEFAULT_SSL_KEYSTORE_PATH); if (log.isInfoEnabled()) { log.info(Options.SSL_KEYSTORE_PATH + "=" + sslKeystorePath); } final SslContextFactory sslFactory; if (sslKeystorePath == null) { sslFactory = new SslContextFactory(true/* trustAll */); } else { sslFactory = new SslContextFactory(sslKeystorePath); } cm = new AutoCloseHttpClient(sslFactory); } try { final boolean followRedirects = Boolean .valueOf(System.getProperty(Options.FOLLOW_REDIRECTS, Options.DEFAULT_FOLLOW_REDIRECTS)); if (log.isInfoEnabled()) { log.info(Options.FOLLOW_REDIRECTS + "=" + followRedirects); } if (followRedirects) { // Allow redirects. cm.setFollowRedirects(true); } /* * Configure the http request buffer capacity. * * See #1097. */ { final int bufferSize = Integer.valueOf(System .getProperty(Options.REQUEST_BUFFER_SIZE, Integer.toString(Options.DEFAULT_REQUEST_BUFFER_SIZE))); if (log.isInfoEnabled()) { log.info(Options.REQUEST_BUFFER_SIZE+ "=" + bufferSize); } cm.setRequestBufferSize(bufferSize); } /* * Configure the http response buffer capacity. * * See #1092. */ { final int bufferSize = Integer .parseInt(System.getProperty( Options.RESPONSE_BUFFER_SIZE, Integer.toString(Options.DEFAULT_RESPONSE_BUFFER_SIZE))); if (log.isInfoEnabled()) { log.info(Options.RESPONSE_BUFFER_SIZE + "=" + bufferSize); } cm.setResponseBufferSize(bufferSize); } // Start the client. cm.start(); } catch (Exception e) { throw new RuntimeException("Unable to start HttpClient", e); } return cm; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy