code: public synchronized ClientBuilder newBuilder(String clientName, JaxRsClientConfig jaxRsConfig, Collection<JaxRsFeatureGroup> featureGroupsIn) {
          started = true;
  
          final List<JaxRsFeatureGroup> featureGroups = ImmutableList.<JaxRsFeatureGroup>builder()
                  .add(PrivateFeatureGroup.WILDCARD)
                  .addAll(featureGroupsIn)
                  .build();
  
          final ClientBuilder builder = factory(ctx).newBuilder(clientName, jaxRsConfig, featureGroups);
  
          builder.property(CLIENT_NAME_PROPERTY, clientName);
          builder.property(FEATURE_GROUP_PROPERTY, featureGroups);
  
          final List<Feature> features = featureGroups.stream()
              .flatMap(g -> featureMap.get(g).stream())
              .collect(Collectors.toList());
  
          final List<Class<? extends Feature>> classFeatures = featureGroups.stream()
              .flatMap(g -> classFeatureMap.get(g).stream())
              .collect(Collectors.toList());
  
          LOG.debug("Building client '{}' with feature groups {}, features {} {}, and config '{}'", clientName, featureGroups, features, classFeatures, jaxRsConfig);
          features.forEach(builder::register);
          classFeatures.forEach(builder::register);
  
          return builder;
      }
docs: Create a new {@link ClientBuilder} instance with the given name and groups.
  You own the returned client and are responsible for managing its cleanup.