当前位置: 首页 > 知识库问答 >
问题:

ApacheConnectorProvider:Jersey Client 2.5.1

殷承恩
2023-03-14

裁判:https://jersey.java.net/documentation/latest/user-guide.html#d0e4337.我正在尝试使用ApacheConnector作为jersey客户端的连接器。在jersey client和apache connector的2.4.1版本中,客户端似乎工作正常。

网站上提到的使用文档有一个注释:

此API已在泽西2.5中更改,其中引入了ConnectorProviderSPI,以便将客户端初始化与连接器实例化分离。因此,从泽西2.5开始,无法直接在泽西客户端配置中注册连接器实例。必须使用新的ConnectorProvider SPI来配置自定义客户端传输连接器。

public  Client configureDefaultJerseyClient(String host) throws Exception
{
    String certFilePath = InstallCert.doInstall(host,SSL_PORT,TRUST_STORE_PASSWORD);
    if(EMPTY_STRING.equals(certFilePath))
    {
        throw new Exception("Error while installing certificate for host " + host);
    }
    ClientConfig clientConfig = new ClientConfig();

    /* As the PoolingClientConnectionManager is a deprecated class, the client will
    not support the multithreaded requests. Commenting the code below to avoid using
    deprecated class. In order to test we would be instantiating multiple clients to
    serve the multithreaded requests.*/

    clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER, new PoolingHttpClientConnectionManager());

    SslConfigurator sslConfig = defaultSslConfigurator(certFilePath);
    clientConfig.property(ApacheClientProperties.SSL_CONFIG, sslConfig);    

    SSLContext sslContext = sslConfig.createSSLContext();
    clientConfig.property(ApacheClientProperties.SSL_CONFIG, sslConfig);

    Client client = ClientBuilder.newBuilder().sslContext(sslContext).build();
    client.register(new MyFilter());
    client.register(new org.glassfish.jersey.filter.LoggingFilter());

    ApacheConnectorProvider provider = new ApacheConnectorProvider();
    provider.getConnector(client, clientConfig);

    return client;
}

但是客户端似乎总是使用默认的HttpUrlConnection作为连接器。如何使用为客户端配置的连接器?

共有1个答案

章高爽
2023-03-14

将连接器设置为ClientConfig而不是其他方式(ConnectorProvider#getConnector不应该由用户调用,而是由泽西客户端调用,它是SPI的一部分):

ClientConfig clientConfig = new ClientConfig();
clientConfig.connectorProvider(new ApacheConnectorProvider());
Client client = ClientBuilder.newClient(clientConfig);

这在泽西用户指南-客户端传输连接器中有所描述。

 类似资料:

相关问答

相关文章

相关阅读