grpc-ecosystem/grpc-gateway · error

additional_binding in additional_binding not allowed: %s.%s

Error message

additional_binding in additional_binding not allowed: %s.%s

What it means

Config-validation error in loadServices' applyOpts: an HttpRule's AdditionalBindings list contains an entry that itself has AdditionalBindings. google.api.HttpRule permits only one level of additional bindings; nesting deeper is invalid, so processing of the method aborts.

Source

Thrown at internal/descriptor/services.go:193

		if err != nil {
			return nil, err
		}

		return b, nil
	}

	applyOpts := func(opts *options.HttpRule) error {
		b, err := newBinding(opts, len(meth.Bindings))
		if err != nil {
			return err
		}

		if b != nil {
			meth.Bindings = append(meth.Bindings, b)
		}
		for _, additional := range opts.GetAdditionalBindings() {
			if len(additional.AdditionalBindings) > 0 {
				return fmt.Errorf("additional_binding in additional_binding not allowed: %s.%s", svc.GetName(), meth.GetName())
			}
			b, err := newBinding(additional, len(meth.Bindings))
			if err != nil {
				return err
			}
			meth.Bindings = append(meth.Bindings, b)
		}

		return nil
	}

	for _, opts := range optsList {
		if err := applyOpts(opts); err != nil {
			return nil, err
		}
	}

	return meth, nil

View on GitHub (pinned to a58a4436a3)

Solutions

  1. Flatten the bindings: list each additional binding at the top level of the HttpRule's additional_bindings instead of nesting.
  2. Remove the nested additional_bindings field from the annotation.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at internal/descriptor/services.go:193 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grpc-ecosystem/grpc-gateway@a58a4436a3 (2026-09-02). Data as JSON: /api/errors/3a23af68ff8542c8. Report an issue: GitHub.