{"record":{"id":"ca44ba6f0ea6e9f8","repo":"grpc/grpc-java","slug":"not-implemented-ca44ba","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"api/src/main/java/io/grpc/ManagedChannelBuilder.java","lineNumber":687,"sourceCode":"  public <X> T setNameResolverArg(NameResolver.Args.Key<X> key, X value) {\n    throw new UnsupportedOperationException();\n  }\n\n\n  /**\n   * Sets a configurator that will be applied to all internal child channels created by this\n   * channel.\n   *\n   * <p>This allows injecting universal configuration (like interceptors)\n   * into auxiliary channels created by gRPC infrastructure, such as xDS control plane connections.\n   *\n   * @param channelConfigurator the configurator to apply.\n   * @return this\n   * @since 1.83.0\n   */\n  @ExperimentalApi(\"https://github.com/grpc/grpc-java/issues/12574\")\n  public T childChannelConfigurator(ChannelConfigurator channelConfigurator) {\n    throw new UnsupportedOperationException(\"Not implemented\");\n  }\n\n  /**\n   * Builds a channel using the given parameters.\n   *\n   * @since 1.0.0\n   */\n  public abstract ManagedChannel build();\n\n  /**\n   * Returns the correctly typed version of the builder.\n   */\n  private T thisT() {\n    @SuppressWarnings(\"unchecked\")\n    T thisT = (T) this;\n    return thisT;\n  }\n}","sourceCodeStart":669,"sourceCodeEnd":705,"githubUrl":"https://github.com/grpc/grpc-java/blob/64daddc1f3d1975670f769f3e97bde8b2ba32d25/api/src/main/java/io/grpc/ManagedChannelBuilder.java#L669-L705","documentation":"ManagedChannelBuilder.childChannelConfigurator(ChannelConfigurator) is an ExperimentalApi method (since 1.83.0, issue #12574) whose base implementation throws UnsupportedOperationException. Only builders that support configuring child channels (e.g., for xDS-created internal channels) override it; all other builders inherit the throwing stub. GrpcXdsTransport's childChannelConfigurator invokes it on whatever builder it was handed.","triggerScenarios":"Calling builder.childChannelConfigurator(configurator) (directly or via GrpcXdsTransport applying a configurator) on a ManagedChannelBuilder implementation — e.g., InProcess or third-party builders — that does not support child channel configuration.","commonSituations":"xDS setups where the delegate channel builder is not Netty-based (in-process channels, custom builders); code applying a ChannelConfigurator unconditionally regardless of the underlying builder type; newly added 1.83.0 API used with builders that have not been updated.","solutions":["Only set childChannelConfigurator on builders that support it (check builder type/capabilities before calling, e.g., instanceof NettyChannelBuilder)","Use NettyChannelBuilder as the underlying builder for xDS so child channels can be configured","Catch UnsupportedOperationException around the call and skip child-channel configuration when unsupported","Guard GrpcXdsTransport's childChannelConfigurator invocation so a non-supporting delegate builder degrades gracefully"],"exampleFix":"// before\nbuilder.childChannelConfigurator(configurator); // throws on InProcess builder\n// after\nif (builder instanceof NettyChannelBuilder) {\n  builder.childChannelConfigurator(configurator);\n} // else skip: builder does not support child channel configuration","handlingStrategy":"validation","validationCode":"// Java: verify builder support before configuring child channels\nif (!(builder instanceof NettyChannelBuilder)) {\n  return; // childChannelConfigurator unsupported\n}","typeGuard":"boolean supportsChildChannelConfigurator(ManagedChannelBuilder<?> b) {\n  return b instanceof NettyChannelBuilder; // builders overriding the 1.83.0 API\n}","tryCatchPattern":null,"preventionTips":["Check the builder type before calling childChannelConfigurator (ExperimentalApi since 1.83.0)","Use NettyChannelBuilder as the underlying xDS delegate builder","Wrap the call in try-catch for UnsupportedOperationException when builder support is uncertain","Pin to a grpc-java version where your builder of choice implements the API"],"tags":["grpc","java","xds","channel-builder","unsupported-operation"],"backgroundTag":"operation-not-supported","analyzedSha":"64daddc1f3d1975670f769f3e97bde8b2ba32d25","analyzedAt":"2026-09-08T06:14:57.704Z","contentChangedAt":"2026-09-08T06:14:57.704Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}