参考:https : //jersey.java.net/documentation/latest/user-guide.html#d0e4337。我正在尝试将ApacheConnector
用作泽西客户端的连接器。该客户端在jersey-client和apache连接器的2.4.1版本中似乎工作正常。
提到的网站上的用法文档中有一条注释:
此API在Jersey 2.5中进行了更改,其中
ConnectorProvider
引入了SPI,以使客户端初始化与连接器实例脱钩。从Jersey 2.5开始,因此不可能直接在Jersey ClientConfig中注册连接器实例。必须改用新的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
不应由用户调用,而是由Jersey Client调用,它是SPI的一部分):
ClientConfig clientConfig = new ClientConfig(); clientConfig.connectorProvider(new ApacheConnectorProvider()); Client client = ClientBuilder.newClient(clientConfig);
泽西岛用户指南- 客户端传输连接器中对此进行了描述。