{"record":{"id":"0872d9ac0ef5cec1","repo":"apache/beam","slug":"invalide-namespace-provide-a-different-one-q-is-a-restricted","errorCode":null,"errorMessage":"invalide namespace, provide a different one: %q is a restricted namespace","messagePattern":"invalide namespace, provide a different one: %q is a restricted namespace","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/core/runtime/xlangx/registry.go","lineNumber":187,"sourceCode":"//\n// Namespaces may not have the configuration separator \":\" in them,\n// nor may they be a restricted namespace, like \"localhost\" or \"http\".\nfunc (r *registry) RegisterHandler(namespace string, handler HandlerFunc) error {\n\tif err := validateNamespace(namespace); err != nil {\n\t\treturn fmt.Errorf(\"xlangx.RegisterHandler: %v\", err)\n\t}\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tr.handlers[namespace] = handler\n\treturn nil\n}\n\nfunc validateNamespace(namespace string) error {\n\tif strings.Contains(namespace, Separator) {\n\t\treturn fmt.Errorf(\"invalid namespace, provide a different one: %q contains the separator %q\", namespace, Separator)\n\t}\n\tif _, ok := restricted[namespace]; ok {\n\t\treturn fmt.Errorf(\"invalide namespace, provide a different one: %q is a restricted namespace\", namespace)\n\t}\n\treturn nil\n}\n\n// RegisterOverrideForUrn instructs using expansionAddr for CrossLanguage\n// transforms with urn. expansionAddr should either be registered with an\n// Expansion handler, or an Expansion service address.\nfunc (r *registry) RegisterOverrideForUrn(urn, expansionAddr string) error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif err := r.validateAddr(expansionAddr); err != nil {\n\t\treturn fmt.Errorf(\"xlangx.RegisterExpansionForUrn(%q,%q) error: %v\", urn, expansionAddr, err)\n\t}\n\tr.urnOverrides[urn] = expansionAddr\n\treturn nil\n}\n\nfunc (r *registry) validateAddr(expansionAddr string) error {","sourceCodeStart":169,"sourceCodeEnd":205,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/core/runtime/xlangx/registry.go#L169-L205","documentation":"validateNamespace also rejects namespaces in the restricted set (e.g. \"localhost\", \"http\") so user handlers cannot hijack built-in resolution schemes. Note the message contains a typo (\"invalide\"). The error names the rejected namespace.","triggerScenarios":"Calling xlangx.RegisterHandler with namespace exactly matching a key of the restricted map, such as \"localhost\" or \"http\".","commonSituations":"Trying to intercept expansion requests to localhost services by re-registering the localhost scheme; copying example addresses as namespaces; building generic handler registration that passes through user-supplied scheme names unfiltered.","solutions":["Choose a custom namespace that is not a reserved scheme (prefix with your org/product name, e.g. \"acme-expansion\").","If you need to redirect expansions for specific transforms, use RegisterOverrideForUrn instead of RegisterHandler.","Filter reserved names in user-facing config before registration."],"exampleFix":"// before\nxlangx.RegisterHandler(\"localhost\", h)\n// after\nxlangx.RegisterHandler(\"acme-local\", h)","handlingStrategy":"validation","validationCode":"restricted := map[string]bool{\"localhost\": true, \"http\": true}\nif restricted[namespace] {\n    return fmt.Errorf(\"namespace %q is reserved; pick a custom one\", namespace)\n}","typeGuard":null,"tryCatchPattern":"if err := xlangx.RegisterHandler(ns, h); err != nil {\n    return fmt.Errorf(\"cannot use reserved namespace %q: %w\", ns, err)\n}","preventionTips":["Prefix custom namespaces with your org name (e.g. \"acme-...\")","Use RegisterOverrideForUrn for targeted overrides rather than overriding reserved schemes","Keep a list of reserved names in your config validation"],"tags":["go","validation","namespace","reserved-words"],"backgroundTag":"invalid-argument-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}