用于JAX-RS客户端的自定义主机名解析器

时间:2019-04-10 09:34:31

标签: java http jax-rs resolve

是否可以在JAX-RS客户端中自定义主机名解析?

我正在使用javax.ws.rs.client.ClientBuilder创建客户端,例如,我希望https://mytestinghost.techmytestinghost.tech解析为我可以定义的IP;例如1.2.3.4

我正在使用默认连接器或Jetty HTTP(2) connector

使用以下代码检索客户端。

ClientBuilder.newBuilder()
  .trustStore(clientCertificateProvider.getCertificate())
  .withConfig(new ClientConfig().connectorProvider(JettyHttp2Connector::new))

1 个答案:

答案 0 :(得分:0)

我设法通过在SocketAddressResolver内配置基础HttpClient来强制解决问题。

ClientBuilder.newBuilder()
  .register(new JacksonJsonProvider())
  .trustStore(HttpUtility.trustStore())
  .withConfig(new ClientConfig().connectorProvider((jaxrsClient, config1) -> {
      final JettyHttp2Connector jettyHttp2Connector = new JettyHttp2Connector(jaxrsClient, config1);
      jettyHttp2Connector.getHttpClient().setSocketAddressResolver((s, i, promise) -> {
          try {
              final List<InetSocketAddress> result = Collections.singletonList(new InetSocketAddress(InetAddress.getByName("1.2.3.4"), managementPort));
              promise.succeeded(result);
          } catch (UnknownHostException e) {
              throw new IllegalStateException(e);
          }

      });
      return jettyHttp2Connector;
  }))