Skip to content

Commit 793c5ed

Browse files
authored
feat: Use official graphql java 22 version (#1980)
### 📝 Description Follow up to #1967 to use an official graphql java release.
1 parent 60879c5 commit 793c5ed

File tree

17 files changed

+51
-48
lines changed

17 files changed

+51
-48
lines changed

examples/server/ktor-server/src/main/kotlin/com/expediagroup/graphql/examples/server/ktor/schema/BookQueryService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.expediagroup.graphql.examples.server.ktor.schema
1919
import com.expediagroup.graphql.examples.server.ktor.schema.dataloaders.BookDataLoader
2020
import com.expediagroup.graphql.examples.server.ktor.schema.models.Book
2121
import com.expediagroup.graphql.generator.annotations.GraphQLDescription
22+
import com.expediagroup.graphql.server.extensions.getValuesFromDataLoader
2223
import com.expediagroup.graphql.server.operations.Query
2324
import graphql.schema.DataFetchingEnvironment
2425
import java.util.concurrent.CompletableFuture
@@ -30,8 +31,7 @@ class BookQueryService : Query {
3031
@GraphQLDescription("Return list of books based on BookSearchParameter options")
3132
@Suppress("unused")
3233
fun searchBooks(params: BookSearchParameters, dfe: DataFetchingEnvironment): CompletableFuture<List<Book>> =
33-
dfe.getDataLoader<Int, Book>(BookDataLoader.dataLoaderName)
34-
.loadMany(params.ids)
34+
dfe.getValuesFromDataLoader(BookDataLoader.dataLoaderName, params.ids)
3535
}
3636

3737
data class BookSearchParameters(val ids: List<Int>)

examples/server/ktor-server/src/main/kotlin/com/expediagroup/graphql/examples/server/ktor/schema/CourseQueryService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ package com.expediagroup.graphql.examples.server.ktor.schema
1818

1919
import com.expediagroup.graphql.examples.server.ktor.schema.dataloaders.CourseDataLoader
2020
import com.expediagroup.graphql.examples.server.ktor.schema.models.Course
21+
import com.expediagroup.graphql.server.extensions.getValuesFromDataLoader
2122
import com.expediagroup.graphql.server.operations.Query
2223
import graphql.schema.DataFetchingEnvironment
2324
import java.util.concurrent.CompletableFuture
2425

2526
class CourseQueryService : Query {
2627
fun searchCourses(params: CourseSearchParameters, dfe: DataFetchingEnvironment): CompletableFuture<List<Course>> =
27-
dfe.getDataLoader<Int, Course>(CourseDataLoader.dataLoaderName)
28-
.loadMany(params.ids)
28+
dfe.getValuesFromDataLoader(CourseDataLoader.dataLoaderName, params.ids)
2929
}
3030

3131
data class CourseSearchParameters(val ids: List<Int>)

examples/server/ktor-server/src/main/kotlin/com/expediagroup/graphql/examples/server/ktor/schema/UniversityQueryService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ package com.expediagroup.graphql.examples.server.ktor.schema
1818

1919
import com.expediagroup.graphql.examples.server.ktor.schema.dataloaders.UniversityDataLoader
2020
import com.expediagroup.graphql.examples.server.ktor.schema.models.University
21+
import com.expediagroup.graphql.server.extensions.getValuesFromDataLoader
2122
import com.expediagroup.graphql.server.operations.Query
2223
import graphql.schema.DataFetchingEnvironment
2324
import java.util.concurrent.CompletableFuture
2425

2526
class UniversityQueryService : Query {
2627
fun searchUniversities(params: UniversitySearchParameters, dfe: DataFetchingEnvironment): CompletableFuture<List<University>> =
27-
dfe.getDataLoader<Int, University>(UniversityDataLoader.dataLoaderName)
28-
.loadMany(params.ids)
28+
dfe.getValuesFromDataLoader(UniversityDataLoader.dataLoaderName, params.ids)
2929
}
3030

3131
data class UniversitySearchParameters(val ids: List<Int>)

examples/server/spring-server/src/main/kotlin/com/expediagroup/graphql/examples/server/spring/query/DataLoaderQuery.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class DataLoaderQuery : Query {
5151
class CompanyDataFetcher : DataFetcher<CompletableFuture<Company>> {
5252

5353
override fun get(environment: DataFetchingEnvironment): CompletableFuture<Company> {
54-
val companyId = environment.getSource<Employee>().companyId
54+
val companyId = environment.getSource<Employee>()?.companyId ?: throw IllegalArgumentException("companyId is null")
5555
return environment.getValueFromDataLoader(CompanyDataLoader.name, companyId)
5656
}
5757
}

executions/graphql-kotlin-automatic-persisted-queries/src/test/kotlin/com/expediagroup/graphql/apq/fixture/ProductGraphQL.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ object ProductGraphQL {
5252
private val runtimeWiring = RuntimeWiring.newRuntimeWiring().apply {
5353
type(
5454
TypeRuntimeWiring.newTypeWiring("Query")
55-
.dataFetcher("product") { products[it.getArgument<String>("id").toInt()] }
55+
.dataFetcher("product") {
56+
it.getArgument<String>("id")?.let { id -> products[id.toInt()] }
57+
}
5658
)
5759
}.build()
5860

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/fixture/AstronautGraphQL.kt

+12-15
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,16 @@ object AstronautGraphQL {
9393

9494
private val astronautService = AstronautService()
9595
private val astronautDataFetcher = DataFetcher { environment ->
96+
val astronautId = environment.getArgument<String>("id")?.toInt() ?: throw IllegalArgumentException("Astronaut ID is null")
9697
astronautService.getAstronaut(
97-
AstronautServiceRequest(
98-
environment.getArgument<String>("id").toInt()
99-
),
98+
AstronautServiceRequest(astronautId),
10099
environment
101100
)
102101
}
103102
private val createAstronautDataFetcher = DataFetcher { environment ->
103+
val astronautName = environment.getArgument<String>("name") ?: throw IllegalArgumentException("Astronaut name is null")
104104
astronautService.createAstronaut(
105-
CreateAstronautServiceRequest(
106-
environment.getArgument("name")
107-
)
105+
CreateAstronautServiceRequest(astronautName)
108106
)
109107
}
110108
private val astronautsDataFetcher = DataFetcher { environment ->
@@ -118,10 +116,9 @@ object AstronautGraphQL {
118116

119117
private val missionService = MissionService()
120118
private val missionDataFetcher = DataFetcher { environment ->
119+
val missionId = environment.getArgument<String>("id")?.toInt() ?: throw IllegalArgumentException("Mission ID is null")
121120
missionService.getMission(
122-
MissionServiceRequest(
123-
environment.getArgument<String>("id").toInt()
124-
),
121+
MissionServiceRequest(missionId),
125122
environment
126123
)
127124
}
@@ -134,26 +131,26 @@ object AstronautGraphQL {
134131
)
135132
}
136133
private val missionsByAstronautDataFetcher = DataFetcher { environment ->
137-
val astronaut = environment.getSource<Astronaut>()
134+
val astronautId = environment.getSource<Astronaut>()?.id ?: throw IllegalArgumentException("Astronaut ID is null")
138135
missionService
139136
.getMissionsByAstronaut(
140-
MissionServiceRequest(0, astronaut.id),
137+
MissionServiceRequest(0, astronautId),
141138
environment
142139
)
143140
}
144141

145142
private val planetService = PlanetService()
146143
private val planetsByMissionDataFetcher = DataFetcher { environment ->
147-
val mission = environment.getSource<Mission>()
144+
val missionId = environment.getSource<Mission>()?.id ?: throw IllegalArgumentException("Mission ID is null")
148145
planetService.getPlanets(
149-
PlanetServiceRequest(0, mission.id),
146+
PlanetServiceRequest(0, missionId),
150147
environment
151148
)
152149
}
153150
private val planetsByAstronautDataFetcher = DataFetcher { environment ->
154-
val astronaut = environment.getSource<Astronaut>()
151+
val astronautId = environment.getSource<Astronaut>()?.id ?: throw IllegalArgumentException("Astronaut ID is null")
155152
astronautService.getPlanets(
156-
AstronautServiceRequest(astronaut.id),
153+
AstronautServiceRequest(astronautId),
157154
environment
158155
)
159156
}

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/fixture/ProductGraphQL.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ object ProductGraphQL {
6464
private val productService = ProductService()
6565

6666
private val productDataFetcher = DataFetcher<CompletableFuture<Product>> { environment ->
67-
val productId = environment.getArgument<String>("id").toInt()
67+
val productId = environment.getArgument<String>("id")?.toInt() ?: throw IllegalArgumentException("Product ID is null")
6868
val selectionFields = environment.selectionSet.immediateFields.map(SelectedField::getName)
6969
productService.getProduct(
7070
ProductServiceRequest(productId, selectionFields),
@@ -73,7 +73,7 @@ object ProductGraphQL {
7373
}
7474

7575
private val productSummaryDataFetcher = DataFetcher<CompletableFuture<ProductSummary>> { environment ->
76-
val productId = environment.getArgument<String>("productId").toInt()
76+
val productId = environment.getArgument<String>("productId")?.toInt() ?: throw IllegalArgumentException("Product ID is null")
7777
val selectionFields = listOf("summary")
7878
productService.getProduct(
7979
ProductServiceRequest(productId, selectionFields),
@@ -82,7 +82,7 @@ object ProductGraphQL {
8282
}
8383

8484
private val productDetailsDataFetcher = DataFetcher<CompletableFuture<ProductDetails>> { environment ->
85-
val productId = environment.getArgument<String>("productId").toInt()
85+
val productId = environment.getArgument<String>("productId")?.toInt() ?: throw IllegalArgumentException("Product ID is null")
8686
val selectionFields = listOf("details")
8787
productService.getProduct(
8888
ProductServiceRequest(productId, selectionFields),

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/fixture/datafetcher/AstronautService.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class AstronautService {
5959
): CompletableFuture<Astronaut> =
6060
environment
6161
.getDataLoader<AstronautServiceRequest, Astronaut>("AstronautDataLoader")
62-
.load(request)
62+
?.load(request) ?: throw IllegalArgumentException("No data loader called AstronautDataLoader was found")
6363

6464
fun createAstronaut(
6565
request: CreateAstronautServiceRequest
@@ -73,7 +73,7 @@ class AstronautService {
7373
requests.isNotEmpty() -> {
7474
environment
7575
.getDataLoader<AstronautServiceRequest, Astronaut>("AstronautDataLoader")
76-
.loadMany(requests)
76+
?.loadMany(requests) ?: throw IllegalArgumentException("No data loader called AstronautDataLoader was found")
7777
}
7878
else -> {
7979
AstronautRepository
@@ -89,7 +89,9 @@ class AstronautService {
8989
environment: DataFetchingEnvironment
9090
): CompletableFuture<List<Planet>> {
9191
val missionsByAstronautDataLoader = environment.getDataLoader<MissionServiceRequest, List<Mission>>("MissionsByAstronautDataLoader")
92+
?: throw IllegalArgumentException("No data loader called MissionsByAstronautDataLoader was found")
9293
val planetsByMissionDataLoader = environment.getDataLoader<PlanetServiceRequest, List<Planet>>("PlanetsByMissionDataLoader")
94+
?: throw IllegalArgumentException("No data loader called PlanetsByMissionDataLoader was found")
9395
return missionsByAstronautDataLoader
9496
.load(MissionServiceRequest(0, astronautId = request.id))
9597
.thenCompose { missions ->

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/fixture/datafetcher/MissionService.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class MissionService {
6666
): CompletableFuture<Mission> =
6767
environment
6868
.getDataLoader<MissionServiceRequest, Mission>("MissionDataLoader")
69-
.load(request)
69+
?.load(request) ?: throw IllegalArgumentException("No data loader called MissionDataLoader was found")
7070

7171
fun getMissions(
7272
requests: List<MissionServiceRequest>,
@@ -75,7 +75,7 @@ class MissionService {
7575
requests.isNotEmpty() -> {
7676
environment
7777
.getDataLoader<MissionServiceRequest, Mission>("MissionDataLoader")
78-
.loadMany(requests)
78+
?.loadMany(requests) ?: throw IllegalArgumentException("No data loader called MissionDataLoader was found")
7979
}
8080
else -> {
8181
MissionRepository
@@ -92,5 +92,5 @@ class MissionService {
9292
): CompletableFuture<List<Mission>> =
9393
environment
9494
.getDataLoader<MissionServiceRequest, List<Mission>>("MissionsByAstronautDataLoader")
95-
.load(request)
95+
?.load(request) ?: throw IllegalArgumentException("No data loader called MissionsByAstronautDataLoader was found")
9696
}

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/fixture/datafetcher/PlanetService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@ class PlanetService {
5050
): CompletableFuture<List<Planet>> =
5151
environment
5252
.getDataLoader<PlanetServiceRequest, List<Planet>>("PlanetsByMissionDataLoader")
53-
.load(request)
53+
?.load(request) ?: throw IllegalStateException("No data loader called PlanetsByMissionDataLoader was found")
5454
}

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/fixture/datafetcher/ProductService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,5 @@ class ProductService {
5353
): CompletableFuture<Product> =
5454
environment
5555
.getDataLoader<ProductServiceRequest, Product>("ProductDataLoader")
56-
.load(request)
56+
?.load(request) ?: throw IllegalStateException("No data loader called ProductDataLoader was found")
5757
}

generator/graphql-kotlin-federation/src/main/kotlin/com/expediagroup/graphql/generator/federation/execution/EntitiesDataFetcher.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ open class EntitiesDataFetcher(
5454
* @return list of resolved nullable entities
5555
*/
5656
override fun get(env: DataFetchingEnvironment): CompletableFuture<DataFetcherResult<List<Any?>>> {
57-
val representations: List<Map<String, Any>> = env.getArgument(REPRESENTATIONS)
57+
val representations: List<Map<String, Any>> = env.getArgumentOrDefault(REPRESENTATIONS, listOf(emptyMap()))
5858

5959
val representationsWithoutResolver = mutableListOf<IndexedValue<Map<String, Any>>>()
6060
val entitiesWithPromiseResolver = mutableListOf<ResolvableEntity<FederatedTypePromiseResolver<*>>>()

generator/graphql-kotlin-federation/src/test/kotlin/com/expediagroup/graphql/generator/federation/execution/EntitiesDataFetcherTest.kt

+9-9
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class EntitiesDataFetcherTest {
4141
mapOf<String, Any>("__typename" to "User", "userId" to 123, "name" to "testName")
4242
)
4343
val env = mockk<DataFetchingEnvironment> {
44-
every { getArgument<Any>(any()) } returns representations
44+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
4545
every { graphQlContext } returns GraphQLContext.newContext().build()
4646
}
4747

@@ -57,7 +57,7 @@ class EntitiesDataFetcherTest {
5757
mapOf<String, Any>("__typename" to "Author", "authorId" to 1)
5858
)
5959
val env = mockk<DataFetchingEnvironment> {
60-
every { getArgument<Any>(any()) } returns representations
60+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
6161
}
6262
val result = resolver.get(env).get()
6363
verifyData(result.data, Author(1, "Author 1"))
@@ -72,7 +72,7 @@ class EntitiesDataFetcherTest {
7272
mapOf<String, Any>("__typename" to "User", "userId" to 123, "name" to "testName")
7373
)
7474
val env = mockk<DataFetchingEnvironment> {
75-
every { getArgument<Any>(any()) } returns representations
75+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
7676
}
7777

7878
val result = resolver.get(env).get()
@@ -86,7 +86,7 @@ class EntitiesDataFetcherTest {
8686
val mockUserResolver = mockk<FederatedTypeSuspendResolver<*>> { every { typeName } returns "User" }
8787
val resolver = EntitiesDataFetcher(mockBookResolver, mockUserResolver)
8888
val env = mockk<DataFetchingEnvironment> {
89-
every { getArgument<Any>(any()) } returns listOf(emptyMap<String, Any>())
89+
every { getArgumentOrDefault<Any>(any(), any()) } returns listOf(emptyMap<String, Any>())
9090
every { graphQlContext } returns GraphQLContext.newContext().build()
9191
}
9292

@@ -100,7 +100,7 @@ class EntitiesDataFetcherTest {
100100
val resolver = EntitiesDataFetcher(emptyList())
101101
val representations = listOf(mapOf<String, Any>("__typename" to "User", "userId" to 123, "name" to "testName"))
102102
val env = mockk<DataFetchingEnvironment> {
103-
every { getArgument<Any>(any()) } returns representations
103+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
104104
every { graphQlContext } returns GraphQLContext.newContext().build()
105105
}
106106

@@ -118,7 +118,7 @@ class EntitiesDataFetcherTest {
118118
val resolver = EntitiesDataFetcher(listOf(mockUserResolver))
119119
val representations = listOf(mapOf<String, Any>("__typename" to "User", "userId" to 123, "name" to "testName"))
120120
val env: DataFetchingEnvironment = mockk {
121-
every { getArgument<Any>(any()) } returns representations
121+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
122122
every { graphQlContext } returns GraphQLContext.newContext().build()
123123
}
124124

@@ -136,7 +136,7 @@ class EntitiesDataFetcherTest {
136136
}
137137
val representations = listOf(user1.toRepresentation(), book.toRepresentation(), user2.toRepresentation())
138138
val env = mockk<DataFetchingEnvironment> {
139-
every { getArgument<Any>(any()) } returns representations
139+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
140140
every { graphQlContext } returns GraphQLContext.newContext().build()
141141
}
142142

@@ -163,7 +163,7 @@ class EntitiesDataFetcherTest {
163163
}
164164
val representations = listOf(user.toRepresentation(), book.toRepresentation())
165165
val env = mockk<DataFetchingEnvironment> {
166-
every { getArgument<Any>(any()) } returns representations
166+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
167167
every { graphQlContext } returns GraphQLContext.newContext().build()
168168
}
169169

@@ -195,7 +195,7 @@ class EntitiesDataFetcherTest {
195195
)
196196

197197
val env = mockk<DataFetchingEnvironment> {
198-
every { getArgument<Any>(any()) } returns representations
198+
every { getArgumentOrDefault<Any>(any(), any()) } returns representations
199199
every { graphQlContext } returns GraphQLContext.newContext().build()
200200
}
201201

generator/graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/directives/DirectiveTests.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ class QueryWithDeprecatedFields {
160160
data class ClassWithDeprecatedField(
161161
val something: String,
162162
@Deprecated("this field is deprecated")
163-
val deprecatedField: String,
163+
val deprecatedField: String?,
164164
@GraphQLDeprecated("this field is also deprecated")
165-
val graphqlDeprecatedField: String = ""
165+
val graphqlDeprecatedField: String? = ""
166166
)

gradle/libs.versions.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ android-plugin = "8.1.1"
33
classgraph = "4.8.170"
44
dataloader = "3.3.0"
55
federation = "4.4.1"
6-
graphql-java = "0.0.0-2024-04-23-expedia-branch-1"
6+
graphql-java = "22.1"
77
graalvm = "0.10.1"
88
jackson = "2.15.4"
99
# kotlin version has to match the compile-testing compiler version

integration/graalvm/common-graalvm-server/src/main/kotlin/com/expediagroup/graalvm/schema/AsyncQuery.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.expediagroup.graalvm.schema
1818

1919
import com.expediagroup.graalvm.schema.dataloader.EXAMPLE_LOADER
2020
import com.expediagroup.graphql.generator.scalars.ID
21+
import com.expediagroup.graphql.server.extensions.getValueFromDataLoader
2122
import com.expediagroup.graphql.server.operations.Query
2223
import graphql.schema.DataFetchingEnvironment
2324
import kotlinx.coroutines.coroutineScope
@@ -33,7 +34,7 @@ class AsyncQuery : Query {
3334

3435
fun future(): CompletableFuture<Int> = CompletableFuture.completedFuture(random.nextInt())
3536

36-
fun dataLoader(env: DataFetchingEnvironment, id: ID): CompletableFuture<String> = env.getDataLoader<ID, String>(EXAMPLE_LOADER).load(id)
37+
fun dataLoader(env: DataFetchingEnvironment, id: ID): CompletableFuture<String> = env.getValueFromDataLoader(EXAMPLE_LOADER, id)
3738

3839
suspend fun coroutine(): Int = coroutineScope {
3940
delay(10)

servers/graphql-kotlin-server/src/test/kotlin/com/expediagroup/graphql/server/execution/GraphQLRequestHandlerTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import com.expediagroup.graphql.generator.execution.FlowSubscriptionExecutionStr
2525
import com.expediagroup.graphql.generator.extensions.toGraphQLContext
2626
import com.expediagroup.graphql.generator.hooks.FlowSubscriptionSchemaGeneratorHooks
2727
import com.expediagroup.graphql.generator.toSchema
28+
import com.expediagroup.graphql.server.extensions.getValueFromDataLoader
2829
import com.expediagroup.graphql.server.types.GraphQLBatchRequest
2930
import com.expediagroup.graphql.server.types.GraphQLBatchResponse
3031
import com.expediagroup.graphql.server.types.GraphQLRequest
@@ -389,7 +390,7 @@ class GraphQLRequestHandlerTest {
389390
id: Int,
390391
dataFetchingEnvironment: DataFetchingEnvironment
391392
): CompletableFuture<User> =
392-
dataFetchingEnvironment.getDataLoader<Int, User>("UserDataLoader").load(id)
393+
dataFetchingEnvironment.getValueFromDataLoader("UserDataLoader", id)
393394

394395
fun hello(name: String): String = "Hello $name!"
395396

0 commit comments

Comments
 (0)