Skip to content

SchemaUtil#replaceTypeReferences Issue When trying to re-built a GraphqlSchema #3384

Closed

Description

@night-crawlr

Describe the bug

graphql.schema.impl.SchemaUtil#replaceTypeReferences is breaking , when we are trying to re build the schema.

Issue occurring case :

When we traverse through a GraphqlObject node which has its interfaces resolved (replacedInterfaces!=null), those interfaces wont get registered into typeMap , as we are using

SchemaTraverser schemaTraverser = new SchemaTraverser(schemaElement -> schemaElement.getChildrenWithTypeReferences().getChildrenAsList());

at later step when replaceTypeReferences tries to resolve graphqlobejcts interface types at method graphql.schema.GraphQLTypeResolvingVisitor#visitGraphQLObjectType of a resolved GraphqlObject node ( which have its resolved interfaces ) . it fails to resolve as there is not such interface registered in typeMap.

To Reproduce
one case where its necessary to rebuild an already built schema is while trying to create a readOnly Schema
GraphQLSchema.newSchema(schema).mutation((GraphQLObjectType) null).build()

Activity

  1. added
    keep-openTells Stale Bot to keep PRs and issues open
    on Feb 11, 2024
  2. added a commit that references this issue on Apr 3, 2026
    a31127a
  3. andimarek commented on May 20, 2026

    @andimarek
    Member

    Fixed by #4390.

    The root cause was that schema rebuild type collection traverses the original type-reference child view via getChildrenWithTypeReferences(), while already-built schema accessors can return resolved strong references such as implemented interfaces and union member types. After removing a root type, those resolved references could still be reachable through a remaining schema element but missing from the rebuilt type map, leading to the NPE in GraphQLTypeResolvingVisitor.

    #4390 extends GraphQLTypeCollectingVisitor to collect those resolved object/interface/union relationships and adds regression coverage for direct schema rebuild and SchemaTransformer.transformSchemaWithDeletes(...). The PR merged with the required CI checks green.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    keep-openTells Stale Bot to keep PRs and issues open

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions