Skip to content

Conversation

@Samjin
Copy link

@Samjin Samjin commented Jan 10, 2026

Problem

ExecutableNormalizedField.forEachFieldDefinition() and getOneFieldDefinition() call type.getField(fieldName) directly, bypassing the schema's configured GraphqlFieldVisibility.

This is inconsistent with other parts of graphql-java (validation, execution) that respect field visibility, and causes issues when:

  • A custom GraphqlFieldVisibility provides field definitions that differ from what's in the schema type (e.g., placeholder fields, virtual fields, or dynamically-computed fields)
  • Application code accesses DataFetchingEnvironment.getSelectionSet().getFields() in a DataFetcher
  • Normalization fails with "No field X found for type Y" because it bypasses the visibility

Reproduction

  1. Configure a custom GraphqlFieldVisibility that provides virtual/placeholder fields
  2. Execute a query that includes a field only available through the visibility
  3. Access DataFetchingEnvironment.getSelectionSet().getFields() in a DataFetcher
  4. Normalization fails because ExecutableNormalizedField.forEachFieldDefinition() calls type.getField() directly

Solution

Change the field lookup to use the schema's field visibility:

// Before
type.getField(fieldName)

// After  
schema.getCodeRegistry().getFieldVisibility().getFieldDefinition(type, fieldName)

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant