Java源码示例:org.glassfish.jersey.client.spi.ConnectorProvider

示例1
/**
 * Register third-party {@link ConnectorProvider}, like org.glassfish.jersey.apache.connector.ApacheConnectorProvider, etc, along with (optional) configuration properties for the provider.<br>
 * If not specified, <code>org.glassfish.jersey.client.HttpUrlConnectorProvider</code> is used as a connection provider.<br>
 * <br>Note: Currently only Apache connector is expected to work properly. Other connector providers may or may not work if additional configuration is needed.
 * 
 * @param connectorProvider - the connection provider
 * @param properties - (optional) configuration properties for the connection provider
 **/
@PublicAtsApi
public void registerConnectorProvider( ConnectorProvider connectorProvider,
                                       Map<String, Object> properties ) {

    this.connectorProvider = connectorProvider;
    if (properties != null) {
        this.connectorProviderProperties.putAll(properties);
    }

}
 
示例2
/**
 * Use org.glassfish.jersey.apache.connector.ApacheConnectorProvider as a provider.<br>
 * Note that an additional dependency (jersey-apache-connector) must be specified before using this method.
 */
@PublicAtsApi
public void registerApacheConnectorProvider() {

    try {
        registerApacheConnectorProvider((ConnectorProvider) Class.forName(RestClient.APACHE_CONNECTOR_CLASSNAME)
                                                                 .newInstance(),
                                        null, null, null);
    } catch (Exception e) {
        throw new RuntimeException("Could not register connector provider '" + RestClient.APACHE_CONNECTOR_CLASSNAME
                                   + "'", e);
    }

}
 
示例3
/**
 * Use org.glassfish.jersey.apache.connector.ApacheConnectorProvider as a provider
 * @param properties - (optional) configuration properties for the connection provider
 */
@PublicAtsApi
public void registerApacheConnectorProvider( Map<String, Object> properties ) {

    try {
        registerApacheConnectorProvider((ConnectorProvider) Class.forName(RestClient.APACHE_CONNECTOR_CLASSNAME)
                                                                 .newInstance(),
                                        properties, null, null);
    } catch (Exception e) {
        throw new RuntimeException("Could not register connector provider '" + RestClient.APACHE_CONNECTOR_CLASSNAME
                                   + "'", e);
    }
}
 
示例4
public Client buildJerseyClient(JerseyClientConfiguration configuration, String clientName)
{
    ConnectorProvider localConnectorProvider;
    if ( connectorProvider != null )
    {
        localConnectorProvider = connectorProvider;
    }
    else
    {
        HttpClientBuilder apacheHttpClientBuilder = new HttpClientBuilder(environment).using(configuration);
        CloseableHttpClient closeableHttpClient = apacheHttpClientBuilder.build(clientName);
        localConnectorProvider = new JerseyRetryConnectorProvider(retryComponents, closeableHttpClient, configuration.isChunkedEncodingEnabled());
    }
    JerseyClientBuilder builder = new JerseyClientBuilder(environment)
        .using(configuration)
        .using(localConnectorProvider);
    for ( Class<?> klass : providerClasses )
    {
        builder = builder.withProvider(klass);
    }
    for ( Object provider : providers )
    {
        builder = builder.withProvider(provider);
    }
    Client client = builder
        .build(clientName);

    SoaBundle.getFeatures(environment).putNamed(client, Client.class, clientName);

    return client;
}
 
示例5
/** <strong>Note</strong>: For internal usage only. Using this method may lead to undesired effects
 * Use org.glassfish.jersey.apache.connector.ApacheConnectorProvider as a provider<br>
 * @param connectorProvider - the connector provider's class
 * @param properties - (optional) configuration properties for the connection provider.
 * <strong>Note</strong>: If connections will be done over SSL (HTTPS), any of the needed configuration must be done by you.
 * ATS will NOT apply any of the logic, related to that functionality if connectionManager parameter is not null.
 * @param connectionManager - (optional) specify the connection manager to be used with the connector provider. If this parameter is not null, connection factory must also be provider
 * @param connectionFactory - (optional) specify the connection factory
 */
public void registerApacheConnectorProvider( ConnectorProvider connectorProvider,
                                             Map<String, Object> properties,
                                             HttpClientConnectionManager connectionManager,
                                             HttpConnectionFactory connectionFactory ) {

    try {
        Class<?> apacheClientProperties = Class.forName(RestClient.APACHE_CLIENT_PROPERTIES_CLASSNAME);

        if (properties != null) {
            if (properties.get((String) apacheClientProperties.getDeclaredField("REQUEST_CONFIG")
                                                              .get(null)) != null) {
                // do nothing the user has provided such property
            } else {
                // add pool request timeout of 30 seconds
                RequestConfig requestConfig = (RequestConfig) properties.get((String) apacheClientProperties.getDeclaredField("REQUEST_CONFIG")
                                                                                                            .get(null));
                if (requestConfig != null) {
                    // Throw an org.apache.http.conn.ConnectionPoolTimeoutException exception if connection can not be leased/obtained from the pool after 30 sec
                    requestConfig = RequestConfig.copy(requestConfig)
                                                 .setConnectionRequestTimeout(30 * 1000)
                                                 .build();
                } else {
                    // Throw an org.apache.http.conn.ConnectionPoolTimeoutException exception if connection can not be leased/obtained from the pool after 30 sec
                    requestConfig = RequestConfig.custom().setConnectionRequestTimeout(30 * 1000).build();
                }

            }
        } else {
            // construct properties maps and add pool request timeout of 30 seconds
            properties = new HashMap<String, Object>();
            // Throw an org.apache.http.conn.ConnectionPoolTimeoutException exception if connection can not be leased/obtained from the pool after 30 sec
            properties.put((String) apacheClientProperties.getDeclaredField("REQUEST_CONFIG").get(null),
                           RequestConfig.custom().setConnectionRequestTimeout(30 * 1000).build());
        }
    } catch (Exception e) {
        throw new RuntimeException("Unable to register connector provider '" + RestClient.APACHE_CONNECTOR_CLASSNAME
                                   + "'", e);
    }

    registerConnectorProvider(connectorProvider, properties);
    this.connectionManager = connectionManager;
    this.connectionFactory = connectionFactory;
}
 
示例6
public static ClientConfig getClientConfig(final ServerContext.Type type,
                                           final Credentials credentials,
                                           final String serverUri,
                                           final boolean includeProxySettings) {

    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY, credentials);

    final ConnectorProvider connectorProvider = new ApacheConnectorProvider();
    // custom json provider ignores new fields that aren't recognized
    final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider()
            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    final ClientConfig clientConfig = new ClientConfig(jacksonJsonProvider).connectorProvider(connectorProvider);
    clientConfig.property(ApacheClientProperties.CREDENTIALS_PROVIDER, credentialsProvider);
    clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.BUFFERED);

    // For TFS OnPrem we only support NTLM authentication right now. Since 2016 servers support Basic as well,
    // we need to let the server and client negotiate the protocol instead of preemptively assuming Basic.
    // TODO: This prevents PATs from being used OnPrem. We need to fix this soon to support PATs onPrem.
    clientConfig.property(ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION, type != ServerContext.Type.TFS);

    //Define a local HTTP proxy
    if (includeProxySettings) {
        final HttpProxyService proxyService = PluginServiceProvider.getInstance().getHttpProxyService();
        final String proxyUrl = proxyService.getProxyURL();
        clientConfig.property(ClientProperties.PROXY_URI, proxyUrl);
        if (proxyService.isAuthenticationRequired()) {
            // To work with authenticated proxies and TFS, we provide the proxy credentials if they are registered
            final AuthScope ntlmAuthScope =
                    new AuthScope(proxyService.getProxyHost(), proxyService.getProxyPort(),
                            AuthScope.ANY_REALM, AuthScope.ANY_SCHEME);
            credentialsProvider.setCredentials(ntlmAuthScope,
                    new UsernamePasswordCredentials(proxyService.getUserName(), proxyService.getPassword()));
        }
    }

    // register a filter to set the User Agent header
    clientConfig.register(new ClientRequestFilter() {
        @Override
        public void filter(final ClientRequestContext requestContext) throws IOException {
            // The default user agent is something like "Jersey/2.6"
            final String userAgent = VersionInfo.getUserAgent("Apache-HttpClient", "org.apache.http.client", HttpClientBuilder.class);
            // Finally, we can add the header
            requestContext.getHeaders().add(HttpHeaders.USER_AGENT, userAgent);
        }
    });

    return clientConfig;
}
 
示例7
public ClientBuilder withConnectorProvider(ConnectorProvider connectorProvider) {
    this.connectorProvider = connectorProvider;
    return this;
}
 
示例8
ConnectorProvider getConnectorProvider() {

        return connectorProvider;
    }