裁判:https://jersey.java.net/documentation/latest/user-guide.html#d0e4337.我正在尝试使用ApacheConnector
作为jersey客户端的连接器。在jersey client和apache connector的2.4.1版本中,客户端似乎工作正常。
网站上提到的使用文档有一个注释:
此API已在泽西2.5中更改,其中引入了ConnectorProvider
SPI,以便将客户端初始化与连接器实例化分离。因此,从泽西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
作为连接器。如何使用为客户端配置的连接器?
将连接器设置为ClientConfig
而不是其他方式(ConnectorProvider#getConnector
不应该由用户调用,而是由泽西客户端调用,它是SPI的一部分):
ClientConfig clientConfig = new ClientConfig();
clientConfig.connectorProvider(new ApacheConnectorProvider());
Client client = ClientBuilder.newClient(clientConfig);
这在泽西用户指南-客户端传输连接器中有所描述。