From e76fa677cea1710e177ecc2332f13220707064ec Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Tue, 15 Nov 2022 21:00:54 +0100 Subject: [PATCH 01/72] javax.servlet -> jakarta.servlet:6.0 --- graphql-java-servlet/build.gradle | 7 ++++--- .../servlet/AbstractGraphQLHttpServlet.java | 8 ++++---- .../kickstart/servlet/AsyncTimeoutListener.java | 4 ++-- .../servlet/BatchedQueryResponseWriter.java | 4 ++-- .../servlet/ErrorQueryResponseWriter.java | 4 ++-- .../servlet/ExecutionResultSubscriber.java | 2 +- .../servlet/GraphQLGetInvocationInputParser.java | 4 ++-- .../servlet/GraphQLInvocationInputParser.java | 6 +++--- .../GraphQLMultipartInvocationInputParser.java | 8 ++++---- .../GraphQLPostInvocationInputParser.java | 4 ++-- .../servlet/GraphQLWebsocketServlet.java | 16 ++++++++-------- .../kickstart/servlet/HttpRequestHandler.java | 4 ++-- .../servlet/HttpRequestHandlerImpl.java | 4 ++-- .../kickstart/servlet/HttpRequestInvoker.java | 4 ++-- .../servlet/HttpRequestInvokerImpl.java | 6 +++--- .../kickstart/servlet/ListenerHandler.java | 4 ++-- .../servlet/OsgiGraphQLHttpServlet.java | 2 +- .../kickstart/servlet/QueryResponseWriter.java | 4 ++-- .../SingleAsynchronousQueryResponseWriter.java | 6 +++--- .../servlet/SingleQueryResponseWriter.java | 4 ++-- .../servlet/SubscriptionAsyncListener.java | 4 ++-- .../kickstart/servlet/apollo/ApolloScalars.java | 2 +- ...olloWebSocketSubscriptionProtocolFactory.java | 2 +- .../ApolloWebSocketSubscriptionSession.java | 2 +- .../cache/BufferedHttpServletResponse.java | 8 ++++---- .../kickstart/servlet/cache/CacheReader.java | 4 ++-- .../servlet/cache/CachingHttpRequestInvoker.java | 4 ++-- .../cache/CachingQueryResponseWriter.java | 4 ++-- .../cache/GraphQLResponseCacheManager.java | 2 +- .../DefaultGraphQLSchemaServletProvider.java | 4 ++-- .../config/GraphQLSchemaServletProvider.java | 4 ++-- .../context/DefaultGraphQLServletContext.java | 6 +++--- .../DefaultGraphQLServletContextBuilder.java | 8 ++++---- .../context/DefaultGraphQLWebSocketContext.java | 4 ++-- .../servlet/context/GraphQLServletContext.java | 6 +++--- .../context/GraphQLServletContextBuilder.java | 8 ++++---- .../servlet/context/GraphQLWebSocketContext.java | 4 ++-- .../core/DefaultGraphQLRootObjectBuilder.java | 4 ++-- .../servlet/core/GraphQLServletListener.java | 4 ++-- .../core/GraphQLServletRootObjectBuilder.java | 4 ++-- .../servlet/core/internal/VariableMapper.java | 2 +- .../servlet/input/BatchInputPreProcessor.java | 4 ++-- .../input/GraphQLInvocationInputFactory.java | 8 ++++---- .../input/NoOpBatchInputPreProcessor.java | 4 ++-- .../FallbackSubscriptionProtocolFactory.java | 2 +- .../subscriptions/WebSocketSendSubscriber.java | 2 +- .../WebSocketSubscriptionProtocolFactory.java | 2 +- .../WebSocketSubscriptionSession.java | 2 +- .../BatchedQueryResponseWriterTest.groovy | 6 +++--- .../servlet/DataLoaderDispatchingSpec.groovy | 8 ++++---- ...gleAsynchronousQueryResponseWriterTest.groovy | 4 ++-- .../servlet/SingleQueryResponseWriterTest.groovy | 6 +++--- .../servlet/TestBatchInputPreProcessor.java | 4 ++-- .../kickstart/servlet/TestMultipartPart.groovy | 2 +- .../servlet/cache/CacheReaderTest.groovy | 6 +++--- .../cache/CachingHttpRequestInvokerTest.groovy | 6 +++--- 56 files changed, 131 insertions(+), 130 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 610419bc..0afaea08 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -16,8 +16,9 @@ dependencies { api(project(':graphql-java-kickstart')) // Servlet - api 'javax.servlet:javax.servlet-api:4.0.1' - api 'javax.websocket:javax.websocket-api:1.1' + api 'jakarta.servlet:jakarta.servlet-api:6.0.0' + api 'jakarta.websocket:jakarta.websocket-api:2.1.0' + api 'jakarta.websocket:jakarta.websocket-client-api:2.1.0' implementation "org.slf4j:slf4j-api:$LIB_SLF4J_VER" // OSGi @@ -31,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:8.3' // Unit testing - testImplementation "org.codehaus.groovy:groovy-all:3.0.13" + testImplementation "org.apache.groovy:groovy-all:4.0.6" testImplementation "org.spockframework:spock-core:2.1-groovy-3.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AbstractGraphQLHttpServlet.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AbstractGraphQLHttpServlet.java index f9fdae46..303a6506 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AbstractGraphQLHttpServlet.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AbstractGraphQLHttpServlet.java @@ -8,10 +8,10 @@ import graphql.kickstart.servlet.core.GraphQLMBean; import graphql.kickstart.servlet.core.GraphQLServletListener; import graphql.schema.GraphQLFieldDefinition; -import javax.servlet.Servlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Servlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; /** @author Andrew Potter */ diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AsyncTimeoutListener.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AsyncTimeoutListener.java index 7d39ad89..3963db5a 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AsyncTimeoutListener.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/AsyncTimeoutListener.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet; import java.io.IOException; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; interface AsyncTimeoutListener extends AsyncListener { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/BatchedQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/BatchedQueryResponseWriter.java index c3a767e5..6bd8fcd3 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/BatchedQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/BatchedQueryResponseWriter.java @@ -6,8 +6,8 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ErrorQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ErrorQueryResponseWriter.java index 48c2d3de..55239fb2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ErrorQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ErrorQueryResponseWriter.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ExecutionResultSubscriber.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ExecutionResultSubscriber.java index ccfe9a99..cc22022c 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ExecutionResultSubscriber.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ExecutionResultSubscriber.java @@ -6,7 +6,7 @@ import java.io.Writer; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicReference; -import javax.servlet.AsyncContext; +import jakarta.servlet.AsyncContext; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLGetInvocationInputParser.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLGetInvocationInputParser.java index 6c8c7464..51e4e606 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLGetInvocationInputParser.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLGetInvocationInputParser.java @@ -11,8 +11,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLInvocationInputParser.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLInvocationInputParser.java index 7944de8a..42f26246 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLInvocationInputParser.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLInvocationInputParser.java @@ -5,9 +5,9 @@ import graphql.kickstart.execution.input.GraphQLInvocationInput; import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; interface GraphQLInvocationInputParser { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLMultipartInvocationInputParser.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLMultipartInvocationInputParser.java index ae43df26..a7f06a0c 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLMultipartInvocationInputParser.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLMultipartInvocationInputParser.java @@ -18,10 +18,10 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLPostInvocationInputParser.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLPostInvocationInputParser.java index 2aa78dcb..22dc8bd2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLPostInvocationInputParser.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLPostInvocationInputParser.java @@ -10,8 +10,8 @@ import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory; import java.io.IOException; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; class GraphQLPostInvocationInputParser extends AbstractGraphQLInvocationInputParser { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java index 7ff86408..cd22aede 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java @@ -29,14 +29,14 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.stream.Stream; -import javax.websocket.CloseReason; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.HandshakeResponse; -import javax.websocket.MessageHandler; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.websocket.CloseReason; +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.HandshakeResponse; +import jakarta.websocket.MessageHandler; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; +import jakarta.websocket.server.ServerEndpointConfig; import lombok.extern.slf4j.Slf4j; /** diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandler.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandler.java index d0e4783b..4be54ee2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandler.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandler.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public interface HttpRequestHandler { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandlerImpl.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandlerImpl.java index e99a4058..697a120e 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandlerImpl.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandlerImpl.java @@ -4,8 +4,8 @@ import graphql.kickstart.execution.input.GraphQLInvocationInput; import java.io.IOException; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvoker.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvoker.java index 0fbdf7f6..33281b02 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvoker.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvoker.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet; import graphql.kickstart.execution.input.GraphQLInvocationInput; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public interface HttpRequestInvoker { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java index 8f24c3ca..e6c0e462 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java @@ -22,9 +22,9 @@ import java.util.concurrent.CompletionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; -import javax.servlet.AsyncContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ListenerHandler.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ListenerHandler.java index 6fe9df83..6ffab4ff 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ListenerHandler.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/ListenerHandler.java @@ -9,8 +9,8 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/OsgiGraphQLHttpServlet.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/OsgiGraphQLHttpServlet.java index 435075ed..85f2e252 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/OsgiGraphQLHttpServlet.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/OsgiGraphQLHttpServlet.java @@ -31,7 +31,7 @@ import org.osgi.service.metatype.annotations.Designate; @Component( - service = {javax.servlet.http.HttpServlet.class, javax.servlet.Servlet.class}, + service = {jakarta.servlet.http.HttpServlet.class, jakarta.servlet.Servlet.class}, property = {"service.description=GraphQL HTTP Servlet"}) @Designate(ocd = OsgiGraphQLHttpServletConfiguration.class, factory = true) public class OsgiGraphQLHttpServlet extends AbstractGraphQLHttpServlet { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/QueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/QueryResponseWriter.java index f72425d7..7c657e44 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/QueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/QueryResponseWriter.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public interface QueryResponseWriter { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriter.java index a6ac588a..bf0dffdd 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriter.java @@ -6,9 +6,9 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicReference; -import javax.servlet.AsyncContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.reactivestreams.Publisher; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java index 86568d29..dad94705 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java @@ -4,8 +4,8 @@ import graphql.kickstart.execution.GraphQLObjectMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SubscriptionAsyncListener.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SubscriptionAsyncListener.java index 963154af..62a2d0c9 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SubscriptionAsyncListener.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SubscriptionAsyncListener.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet; import java.util.concurrent.atomic.AtomicReference; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; import lombok.RequiredArgsConstructor; import org.reactivestreams.Subscription; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloScalars.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloScalars.java index 42e98c6b..71751f56 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloScalars.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloScalars.java @@ -5,7 +5,7 @@ import graphql.schema.CoercingParseValueException; import graphql.schema.CoercingSerializeException; import graphql.schema.GraphQLScalarType; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; import lombok.AccessLevel; import lombok.NoArgsConstructor; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionProtocolFactory.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionProtocolFactory.java index 874d9bf8..c5d4396f 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionProtocolFactory.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionProtocolFactory.java @@ -10,7 +10,7 @@ import graphql.kickstart.servlet.subscriptions.WebSocketSubscriptionProtocolFactory; import java.time.Duration; import java.util.Collection; -import javax.websocket.Session; +import jakarta.websocket.Session; public class ApolloWebSocketSubscriptionProtocolFactory extends ApolloSubscriptionProtocolFactory implements WebSocketSubscriptionProtocolFactory { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionSession.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionSession.java index b083457f..85f08211 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionSession.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/apollo/ApolloWebSocketSubscriptionSession.java @@ -4,7 +4,7 @@ import graphql.kickstart.execution.subscriptions.apollo.ApolloSubscriptionSession; import graphql.kickstart.servlet.subscriptions.WebSocketSubscriptionSession; import java.util.Map; -import javax.websocket.Session; +import jakarta.websocket.Session; public class ApolloWebSocketSubscriptionSession extends ApolloSubscriptionSession { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/BufferedHttpServletResponse.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/BufferedHttpServletResponse.java index 8f9c868f..9d633186 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/BufferedHttpServletResponse.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/BufferedHttpServletResponse.java @@ -5,10 +5,10 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CacheReader.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CacheReader.java index 714a8069..4c3fa2f2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CacheReader.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CacheReader.java @@ -4,8 +4,8 @@ import graphql.kickstart.servlet.HttpRequestHandler; import java.io.IOException; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingHttpRequestInvoker.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingHttpRequestInvoker.java index ba0d8bda..a5f5d98c 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingHttpRequestInvoker.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingHttpRequestInvoker.java @@ -8,8 +8,8 @@ import graphql.kickstart.servlet.HttpRequestInvokerImpl; import graphql.kickstart.servlet.ListenerHandler; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingQueryResponseWriter.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingQueryResponseWriter.java index e3bc813b..b73e8442 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingQueryResponseWriter.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingQueryResponseWriter.java @@ -3,8 +3,8 @@ import graphql.kickstart.execution.input.GraphQLInvocationInput; import graphql.kickstart.servlet.QueryResponseWriter; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/GraphQLResponseCacheManager.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/GraphQLResponseCacheManager.java index ffb47579..c7c258c6 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/GraphQLResponseCacheManager.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/GraphQLResponseCacheManager.java @@ -2,7 +2,7 @@ import graphql.kickstart.execution.input.GraphQLInvocationInput; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public interface GraphQLResponseCacheManager { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/DefaultGraphQLSchemaServletProvider.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/DefaultGraphQLSchemaServletProvider.java index c38af79a..4e633783 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/DefaultGraphQLSchemaServletProvider.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/DefaultGraphQLSchemaServletProvider.java @@ -2,8 +2,8 @@ import graphql.kickstart.execution.config.DefaultGraphQLSchemaProvider; import graphql.schema.GraphQLSchema; -import javax.servlet.http.HttpServletRequest; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.websocket.server.HandshakeRequest; /** @author Andrew Potter */ public class DefaultGraphQLSchemaServletProvider extends DefaultGraphQLSchemaProvider diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/GraphQLSchemaServletProvider.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/GraphQLSchemaServletProvider.java index 3d80afc2..9700dcd2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/GraphQLSchemaServletProvider.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/GraphQLSchemaServletProvider.java @@ -2,8 +2,8 @@ import graphql.kickstart.execution.config.GraphQLSchemaProvider; import graphql.schema.GraphQLSchema; -import javax.servlet.http.HttpServletRequest; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.websocket.server.HandshakeRequest; public interface GraphQLSchemaServletProvider extends GraphQLSchemaProvider { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContext.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContext.java index 9c366dd1..834c23d1 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContext.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContext.java @@ -4,9 +4,9 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; import lombok.SneakyThrows; import org.dataloader.DataLoaderRegistry; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContextBuilder.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContextBuilder.java index c7a1dad4..cbb88975 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContextBuilder.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLServletContextBuilder.java @@ -4,10 +4,10 @@ import graphql.kickstart.execution.context.GraphQLKickstartContext; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; /** Returns an empty context. */ public class DefaultGraphQLServletContextBuilder extends DefaultGraphQLContextBuilder diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLWebSocketContext.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLWebSocketContext.java index 32beb4c2..1b115d4d 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLWebSocketContext.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/DefaultGraphQLWebSocketContext.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet.context; import graphql.kickstart.execution.context.DefaultGraphQLContext; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; import org.dataloader.DataLoaderRegistry; /** @deprecated Use {@link graphql.kickstart.execution.context.GraphQLKickstartContext} instead */ diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContext.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContext.java index 9fc42d0c..fd6cd978 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContext.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContext.java @@ -3,9 +3,9 @@ import graphql.kickstart.execution.context.GraphQLKickstartContext; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Part; /** @deprecated Use {@link graphql.kickstart.execution.context.GraphQLKickstartContext} instead */ public interface GraphQLServletContext extends GraphQLKickstartContext { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContextBuilder.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContextBuilder.java index 6c0ee4b2..55184124 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContextBuilder.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLServletContextBuilder.java @@ -2,10 +2,10 @@ import graphql.kickstart.execution.context.GraphQLKickstartContext; import graphql.kickstart.execution.context.GraphQLContextBuilder; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; public interface GraphQLServletContextBuilder extends GraphQLContextBuilder { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLWebSocketContext.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLWebSocketContext.java index d244eb8d..f74cd81e 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLWebSocketContext.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/context/GraphQLWebSocketContext.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet.context; import graphql.kickstart.execution.context.GraphQLKickstartContext; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; /** @deprecated Use {@link graphql.kickstart.execution.context.GraphQLKickstartContext} instead */ public interface GraphQLWebSocketContext extends GraphQLKickstartContext { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/DefaultGraphQLRootObjectBuilder.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/DefaultGraphQLRootObjectBuilder.java index 284dfa2e..024bb398 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/DefaultGraphQLRootObjectBuilder.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/DefaultGraphQLRootObjectBuilder.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet.core; import graphql.kickstart.execution.StaticGraphQLRootObjectBuilder; -import javax.servlet.http.HttpServletRequest; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.websocket.server.HandshakeRequest; public class DefaultGraphQLRootObjectBuilder extends StaticGraphQLRootObjectBuilder implements GraphQLServletRootObjectBuilder { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletListener.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletListener.java index 7c9a7f79..5e99a506 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletListener.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletListener.java @@ -1,7 +1,7 @@ package graphql.kickstart.servlet.core; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** @author Andrew Potter */ public interface GraphQLServletListener { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletRootObjectBuilder.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletRootObjectBuilder.java index 32de074b..dd379ec6 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletRootObjectBuilder.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/GraphQLServletRootObjectBuilder.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet.core; import graphql.kickstart.execution.GraphQLRootObjectBuilder; -import javax.servlet.http.HttpServletRequest; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.websocket.server.HandshakeRequest; public interface GraphQLServletRootObjectBuilder extends GraphQLRootObjectBuilder { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/internal/VariableMapper.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/internal/VariableMapper.java index 1a4bc5a6..707e6ab2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/internal/VariableMapper.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/core/internal/VariableMapper.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; public class VariableMapper { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/BatchInputPreProcessor.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/BatchInputPreProcessor.java index d3730636..8cde1cf2 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/BatchInputPreProcessor.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/BatchInputPreProcessor.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet.input; import graphql.kickstart.execution.input.GraphQLBatchedInvocationInput; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public interface BatchInputPreProcessor { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/GraphQLInvocationInputFactory.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/GraphQLInvocationInputFactory.java index 82b57710..eb72fac4 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/GraphQLInvocationInputFactory.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/GraphQLInvocationInputFactory.java @@ -16,10 +16,10 @@ import graphql.schema.GraphQLSchema; import java.util.List; import java.util.function.Supplier; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; /** @author Andrew Potter */ public class GraphQLInvocationInputFactory implements GraphQLSubscriptionInvocationInputFactory { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/NoOpBatchInputPreProcessor.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/NoOpBatchInputPreProcessor.java index 0d117027..f871a8c0 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/NoOpBatchInputPreProcessor.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/input/NoOpBatchInputPreProcessor.java @@ -1,8 +1,8 @@ package graphql.kickstart.servlet.input; import graphql.kickstart.execution.input.GraphQLBatchedInvocationInput; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** A default BatchInputPreProcessor that returns the input. */ public class NoOpBatchInputPreProcessor implements BatchInputPreProcessor { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/FallbackSubscriptionProtocolFactory.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/FallbackSubscriptionProtocolFactory.java index 43cacd0f..b58469af 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/FallbackSubscriptionProtocolFactory.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/FallbackSubscriptionProtocolFactory.java @@ -6,7 +6,7 @@ import graphql.kickstart.execution.subscriptions.SubscriptionProtocolFactory; import graphql.kickstart.execution.subscriptions.SubscriptionSession; import java.util.function.Consumer; -import javax.websocket.Session; +import jakarta.websocket.Session; /** @author Andrew Potter */ public class FallbackSubscriptionProtocolFactory extends SubscriptionProtocolFactory diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java index d65fd357..95cab618 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java @@ -2,7 +2,7 @@ import java.io.IOException; import java.util.concurrent.atomic.AtomicReference; -import javax.websocket.Session; +import jakarta.websocket.Session; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Subscriber; diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionProtocolFactory.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionProtocolFactory.java index c9b5f086..55b42b05 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionProtocolFactory.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionProtocolFactory.java @@ -2,7 +2,7 @@ import graphql.kickstart.execution.subscriptions.SubscriptionSession; import java.util.function.Consumer; -import javax.websocket.Session; +import jakarta.websocket.Session; public interface WebSocketSubscriptionProtocolFactory { diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionSession.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionSession.java index f41c0dc3..5da0071a 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionSession.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSubscriptionSession.java @@ -3,7 +3,7 @@ import graphql.kickstart.execution.subscriptions.DefaultSubscriptionSession; import graphql.kickstart.execution.subscriptions.GraphQLSubscriptionMapper; import java.util.Map; -import javax.websocket.Session; +import jakarta.websocket.Session; public class WebSocketSubscriptionSession extends DefaultSubscriptionSession { diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/BatchedQueryResponseWriterTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/BatchedQueryResponseWriterTest.groovy index f9a9b369..2e2eebde 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/BatchedQueryResponseWriterTest.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/BatchedQueryResponseWriterTest.groovy @@ -6,9 +6,9 @@ import graphql.kickstart.execution.GraphQLObjectMapper import spock.lang.Specification import spock.lang.Unroll -import javax.servlet.ServletOutputStream -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.ServletOutputStream +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse import java.nio.charset.StandardCharsets class BatchedQueryResponseWriterTest extends Specification { diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy index 6ab5f38c..58003651 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy @@ -21,10 +21,10 @@ import org.springframework.mock.web.MockHttpServletResponse import spock.lang.Shared import spock.lang.Specification -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse -import javax.websocket.Session -import javax.websocket.server.HandshakeRequest +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse +import jakarta.websocket.Session +import jakarta.websocket.server.HandshakeRequest import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletionStage import java.util.concurrent.atomic.AtomicInteger diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriterTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriterTest.groovy index 7a452b18..392146b5 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriterTest.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleAsynchronousQueryResponseWriterTest.groovy @@ -5,8 +5,8 @@ import graphql.kickstart.execution.GraphQLObjectMapper import org.springframework.mock.web.MockAsyncContext import spock.lang.Specification -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse class SingleAsynchronousQueryResponseWriterTest extends Specification { diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy index 0bffe1bb..9640fa5c 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy @@ -6,9 +6,9 @@ import graphql.kickstart.execution.GraphQLObjectMapper import spock.lang.Specification import spock.lang.Unroll -import javax.servlet.ServletOutputStream -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.ServletOutputStream +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse import java.nio.charset.StandardCharsets class SingleQueryResponseWriterTest extends Specification { diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestBatchInputPreProcessor.java b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestBatchInputPreProcessor.java index b0ec39f8..d0f1894a 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestBatchInputPreProcessor.java +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestBatchInputPreProcessor.java @@ -3,8 +3,8 @@ import graphql.kickstart.execution.input.GraphQLBatchedInvocationInput; import graphql.kickstart.servlet.input.BatchInputPreProcessResult; import graphql.kickstart.servlet.input.BatchInputPreProcessor; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public class TestBatchInputPreProcessor implements BatchInputPreProcessor { diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestMultipartPart.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestMultipartPart.groovy index 96cc4062..2a48134f 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestMultipartPart.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestMultipartPart.groovy @@ -1,6 +1,6 @@ package graphql.kickstart.servlet -import javax.servlet.http.Part +import jakarta.servlet.http.Part /** * @author Andrew Potter diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CacheReaderTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CacheReaderTest.groovy index 3d8f5601..947e747d 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CacheReaderTest.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CacheReaderTest.groovy @@ -3,9 +3,9 @@ package graphql.kickstart.servlet.cache import graphql.kickstart.execution.input.GraphQLInvocationInput import spock.lang.Specification -import javax.servlet.ServletOutputStream -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.ServletOutputStream +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse class CacheReaderTest extends Specification { diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CachingHttpRequestInvokerTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CachingHttpRequestInvokerTest.groovy index 9a486036..bd065bc9 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CachingHttpRequestInvokerTest.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/cache/CachingHttpRequestInvokerTest.groovy @@ -11,9 +11,9 @@ import graphql.kickstart.servlet.HttpRequestInvoker import graphql.kickstart.servlet.ListenerHandler import spock.lang.Specification -import javax.servlet.ServletOutputStream -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse +import jakarta.servlet.ServletOutputStream +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse import java.util.concurrent.CompletableFuture class CachingHttpRequestInvokerTest extends Specification { From 2e8b8128e02978776dea08e32e70074fd26a6c2f Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Thu, 17 Nov 2022 10:25:14 +0100 Subject: [PATCH 02/72] jdk 8 -> jdk 11 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f28bfeb2..7f99bbbb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,5 +11,5 @@ LIB_GRAPHQL_JAVA_VER=19.2 LIB_JACKSON_VER=2.13.4 LIB_SLF4J_VER=2.0.2 LIB_LOMBOK_VER=1.18.24 -SOURCE_COMPATIBILITY=1.8 -TARGET_COMPATIBILITY=1.8 +SOURCE_COMPATIBILITY=11 +TARGET_COMPATIBILITY=11 From 4a6ff2490aaaef1229703f27a3a09f202a54de99 Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Fri, 18 Nov 2022 16:41:51 +0100 Subject: [PATCH 03/72] jdk 8 => jdk 11 --- examples/osgi/pom.xml | 4 ++-- graphql-java-servlet/build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/osgi/pom.xml b/examples/osgi/pom.xml index c51bd1e0..a0daab35 100644 --- a/examples/osgi/pom.xml +++ b/examples/osgi/pom.xml @@ -17,8 +17,8 @@ 11.0.0-SNAPSHOT 16.1 4.2.10 - 1.8 - 1.8 +u 11 + 11 10.1.0 diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 0afaea08..e628682e 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -33,7 +33,7 @@ dependencies { // Unit testing testImplementation "org.apache.groovy:groovy-all:4.0.6" - testImplementation "org.spockframework:spock-core:2.1-groovy-3.0" + testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" From 6c312cc41c96412d96593e833582d58cdcbc6de7 Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Fri, 2 Dec 2022 19:58:28 +0100 Subject: [PATCH 04/72] jdk17 --- gradle.properties | 4 ++-- graphql-java-servlet/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7f99bbbb..dc0b44b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,5 +11,5 @@ LIB_GRAPHQL_JAVA_VER=19.2 LIB_JACKSON_VER=2.13.4 LIB_SLF4J_VER=2.0.2 LIB_LOMBOK_VER=1.18.24 -SOURCE_COMPATIBILITY=11 -TARGET_COMPATIBILITY=11 +SOURCE_COMPATIBILITY=17 +TARGET_COMPATIBILITY=17 diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index e628682e..d41a9c04 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,7 +37,7 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:5.3.23' - testRuntimeOnly 'org.springframework:spring-web:5.3.23' + testImplementation 'org.springframework:spring-test:6.0.2' + testRuntimeOnly 'org.springframework:spring-web:6.0.2' testImplementation 'com.google.guava:guava:31.1-jre' } From 12055b03bb4049395ba05e317533e0874a005b51 Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Fri, 2 Dec 2022 22:54:42 +0100 Subject: [PATCH 05/72] fix tests, just call init() without arg instead of init(null) --- .../kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy | 2 +- .../test/groovy/graphql/kickstart/servlet/TestUtils.groovy | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy index a7f9e5da..dde7cb46 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy @@ -1120,7 +1120,7 @@ b throw new TestException() }.build()).build() servlet = GraphQLHttpServlet.with(configuration) - servlet.init(null) + servlet.init() request.setPathInfo('/schema.json') diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestUtils.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestUtils.groovy index 797f5048..684b2cc2 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestUtils.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestUtils.groovy @@ -62,7 +62,7 @@ class TestUtils { .with(contextBuilder) .with(executor()) .build()) - servlet.init(null) + servlet.init() return servlet } @@ -86,7 +86,7 @@ class TestUtils { listeners ) ) - servlet.init(null) + servlet.init() return servlet } From 265ecdf0844afc1c0895b74601047dd0b7f957a7 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 5 Dec 2022 10:32:54 +0000 Subject: [PATCH 06/72] Update version for release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d4b16533..7c609309 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=15.0.0 +version=15.0.1-SNAPSHOT group=com.graphql-java-kickstart PROJECT_NAME=graphql-java-servlet PROJECT_DESC=GraphQL Java Kickstart From 80f05371adab22e755d9ff05ec4c5902956e325d Mon Sep 17 00:00:00 2001 From: oliemansm Date: Mon, 5 Dec 2022 11:58:22 +0100 Subject: [PATCH 07/72] chore: re-interrupt http request thread --- .../java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java index e6c0e462..d5cff75e 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java @@ -116,6 +116,9 @@ private void handle( response.setStatus(STATUS_INTERNAL_SERVER_ERROR); log.error("Cannot handle http request", e); listenerHandler.onError(e); + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } } } From c180ab327f013d2cc490313379f5993747250a2d Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Tue, 6 Dec 2022 13:34:04 +0100 Subject: [PATCH 08/72] docs --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c9b18c11..8fe24c12 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ See [GraphQL Java documentation](https://www.graphql-java.com/documentation/late regarding GraphQL Java itself. We try to stay up to date with GraphQL Java as much as possible. The current version supports - **GraphQL Java 19.1**. + **GraphQL Java 19.3**. -This project requires at least Java 8. +This project requires at least Java 17. ## Installation and getting started From 92e720d004e408a751372de684395a7de24e0709 Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Tue, 6 Dec 2022 13:43:21 +0100 Subject: [PATCH 09/72] docs --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 8fe24c12..8afdfd0d 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,7 @@ This project wraps the Java implementation of GraphQL provided by [GraphQL Java] See [GraphQL Java documentation](https://www.graphql-java.com/documentation/latest/) for more in depth details regarding GraphQL Java itself. -We try to stay up to date with GraphQL Java as much as possible. The current version supports - **GraphQL Java 19.3**. - -This project requires at least Java 17. +We try to stay up to date with GraphQL Java as much as possible. See [gradle.properties](gradle.properties) to see current supported versions. ## Installation and getting started From 5b2cdf2934c4d586c3668ab2fd64f7b4e61636b5 Mon Sep 17 00:00:00 2001 From: eduarddrenth Date: Tue, 6 Dec 2022 13:43:21 +0100 Subject: [PATCH 10/72] docs --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 8fe24c12..8a4d3bff 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,7 @@ This project wraps the Java implementation of GraphQL provided by [GraphQL Java] See [GraphQL Java documentation](https://www.graphql-java.com/documentation/latest/) for more in depth details regarding GraphQL Java itself. -We try to stay up to date with GraphQL Java as much as possible. The current version supports - **GraphQL Java 19.3**. - -This project requires at least Java 17. +We try to stay up to date with GraphQL Java as much as possible. See [gradle.properties](gradle.properties) to see currently supported versions. ## Installation and getting started From f28b00b5e5ec286d4e6fe2c3264e17d3143f9bb9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 23:46:36 +0000 Subject: [PATCH 11/72] fix(deps): update all non-major dependencies to v2.0.6 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7c609309..cf9f92d7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=19.3 LIB_JACKSON_VER=2.14.1 -LIB_SLF4J_VER=2.0.5 +LIB_SLF4J_VER=2.0.6 LIB_LOMBOK_VER=1.18.24 SOURCE_COMPATIBILITY=17 TARGET_COMPATIBILITY=17 From a765a9ed4630451d9a7e37da9a7a9e74713f5dea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 10:43:39 +0000 Subject: [PATCH 12/72] fix(deps): update all non-major dependencies to v6.0.3 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index d41a9c04..2dc1b3a1 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,7 +37,7 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.2' - testRuntimeOnly 'org.springframework:spring-web:6.0.2' + testImplementation 'org.springframework:spring-test:6.0.3' + testRuntimeOnly 'org.springframework:spring-web:6.0.3' testImplementation 'com.google.guava:guava:31.1-jre' } From 827092ec0125a055487e59fac66c52f56bb5bdce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 17:07:43 +0000 Subject: [PATCH 13/72] fix(deps): update all non-major dependencies to v1.5.1 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 2dc1b3a1..4c618341 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -24,8 +24,8 @@ dependencies { // OSGi compileOnly 'org.osgi:org.osgi.core:6.0.0' compileOnly 'org.osgi:org.osgi.service.cm:1.6.1' - compileOnly 'org.osgi:org.osgi.service.component:1.5.0' - compileOnly 'org.osgi:org.osgi.service.component.annotations:1.5.0' + compileOnly 'org.osgi:org.osgi.service.component:1.5.1' + compileOnly 'org.osgi:org.osgi.service.component.annotations:1.5.1' compileOnly 'org.osgi:org.osgi.service.metatype.annotations:1.4.1' compileOnly 'org.osgi:org.osgi.annotation:6.0.0' From 94536cef2a469d3d2624fa9ecea0bee45c4b7b0e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 24 Dec 2022 11:24:53 +0000 Subject: [PATCH 14/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.7 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 4c618341..b7cc0a8f 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:8.3' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.6" + testImplementation "org.apache.groovy:groovy-all:4.0.7" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" From ad051d9df49ba6612e59e0ef7abbb35a275ce783 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Jan 2023 15:32:30 +0000 Subject: [PATCH 15/72] fix(deps): update all non-major dependencies to v6.0.4 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index b7cc0a8f..2341acd6 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,7 +37,7 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.3' - testRuntimeOnly 'org.springframework:spring-web:6.0.3' + testImplementation 'org.springframework:spring-test:6.0.4' + testRuntimeOnly 'org.springframework:spring-web:6.0.4' testImplementation 'com.google.guava:guava:31.1-jre' } From 483c00736368988365a9b241fb5137754f9195e5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Jan 2023 08:05:49 +0000 Subject: [PATCH 16/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.8 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 2341acd6..3988aea5 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:8.3' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.7" + testImplementation "org.apache.groovy:groovy-all:4.0.8" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" From cacd67d40474592345627a33bee636941b648caf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Jan 2023 04:07:05 +0000 Subject: [PATCH 17/72] fix(deps): update all non-major dependencies to v2.14.2 --- gradle.properties | 2 +- graphql-java-kickstart/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index cf9f92d7..facfe3b2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servle PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=19.3 -LIB_JACKSON_VER=2.14.1 +LIB_JACKSON_VER=2.14.2 LIB_SLF4J_VER=2.0.6 LIB_LOMBOK_VER=1.18.24 SOURCE_COMPATIBILITY=17 diff --git a/graphql-java-kickstart/build.gradle b/graphql-java-kickstart/build.gradle index b84079fd..3b62c1ba 100644 --- a/graphql-java-kickstart/build.gradle +++ b/graphql-java-kickstart/build.gradle @@ -14,6 +14,6 @@ dependencies { // JSON api "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER" api "com.fasterxml.jackson.core:jackson-annotations:$LIB_JACKSON_VER" - api "com.fasterxml.jackson.core:jackson-databind:2.14.1" + api "com.fasterxml.jackson.core:jackson-databind:2.14.2" api "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" } From cfbdba1b061cc525e505feee6da70867b804b89b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 3 Feb 2023 05:59:21 +0000 Subject: [PATCH 18/72] fix(deps): update dependency org.projectlombok:lombok to v1.18.26 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index facfe3b2..fe7b7521 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,6 +10,6 @@ PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=19.3 LIB_JACKSON_VER=2.14.2 LIB_SLF4J_VER=2.0.6 -LIB_LOMBOK_VER=1.18.24 +LIB_LOMBOK_VER=1.18.26 SOURCE_COMPATIBILITY=17 TARGET_COMPATIBILITY=17 From 09747cf7cbddf554ef2718c8a3d259663169c71e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 Feb 2023 01:34:22 +0000 Subject: [PATCH 19/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.9 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 3988aea5..60c0f734 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:8.3' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.8" + testImplementation "org.apache.groovy:groovy-all:4.0.9" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" From 132e0bdd9fb97e8a3531826fc76ecba0de728a09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Feb 2023 18:12:38 +0000 Subject: [PATCH 20/72] fix(deps): update all non-major dependencies to v6.0.5 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 60c0f734..d3bc0643 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,7 +37,7 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.4' - testRuntimeOnly 'org.springframework:spring-web:6.0.4' + testImplementation 'org.springframework:spring-test:6.0.5' + testRuntimeOnly 'org.springframework:spring-web:6.0.5' testImplementation 'com.google.guava:guava:31.1-jre' } From 685227ff49d7c962cafad9def09eeee02b237d61 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Feb 2023 13:22:33 +0000 Subject: [PATCH 21/72] chore(deps): update plugin org.sonarqube to v4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b54ad4f1..0641ae23 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ buildscript { plugins { id "biz.aQute.bnd.builder" version "6.4.0" apply false - id "org.sonarqube" version "3.5.0.2730" + id "org.sonarqube" version "4.0.0.2929" id "jacoco" id "io.github.gradle-nexus.publish-plugin" version '1.1.0' } From 47b2ad63a0be7379bdedecc243ed93676e935bf2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 08:45:22 +0000 Subject: [PATCH 22/72] chore(deps): update dependency gradle to v8 --- gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 61608 bytes gradle/wrapper/gradle-wrapper.properties | 3 ++- gradlew | 12 ++++++++---- gradlew.bat | 1 + 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f090a2944b7473328c07c9755baa3196..ccebba7710deaf9f98673a68957ea02138b60d0a 100644 GIT binary patch delta 39304 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 O;LQ#O9OtPYE&l^NyjRr# delta 38549 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 ltSba#rbH)&uY59oK&k!`i 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f42e62f3..761b8f08 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb6..79a61d42 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac diff --git a/gradlew.bat b/gradlew.bat index 53a6b238..6689b85b 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% From 34a03ffe64ef490bc4e5c3224656e6399659f644 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 08:55:57 +0000 Subject: [PATCH 23/72] chore(deps): update all non-major dependencies --- build.gradle | 2 +- graphql-java-servlet/build.gradle | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 0641ae23..ca0f6f45 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ plugins { id "biz.aQute.bnd.builder" version "6.4.0" apply false id "org.sonarqube" version "4.0.0.2929" id "jacoco" - id "io.github.gradle-nexus.publish-plugin" version '1.1.0' + id "io.github.gradle-nexus.publish-plugin" version '1.3.0' } sonarqube { diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index d3bc0643..5d9eb6ec 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,12 +32,12 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:8.3' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.9" + testImplementation "org.apache.groovy:groovy-all:4.0.10" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.5' - testRuntimeOnly 'org.springframework:spring-web:6.0.5' + testImplementation 'org.springframework:spring-test:6.0.6' + testRuntimeOnly 'org.springframework:spring-web:6.0.6' testImplementation 'com.google.guava:guava:31.1-jre' } From 76fb7bd36fac1141d690a9524dc03942737aca13 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Sat, 11 Feb 2023 23:42:16 +0100 Subject: [PATCH 24/72] fix(deps): update graphql-java to v20.0.0 To update graphql-java to version 20.0.0 some changes are necessary: - the signature of DataLoaderDispatcherInstrumentation methods now have the InstrumentationState parameter. The ConfigurableDispatchInstrumentation is aligned to these changes - The SimpleInstrumentation is replaced by SimplePerformantInstrumentation. Now all the codebase uses the new class --- gradle.properties | 2 +- .../execution/GraphQLQueryInvoker.java | 10 +-- .../execution/config/GraphQLBuilder.java | 4 +- .../ConfigurableDispatchInstrumentation.java | 65 +++++++++++-------- .../NoOpInstrumentationProvider.java | 4 +- graphql-java-servlet/build.gradle | 2 +- .../servlet/DataLoaderDispatchingSpec.groovy | 12 ++-- .../servlet/OsgiGraphQLHttpServletSpec.groovy | 4 +- 8 files changed, 57 insertions(+), 46 deletions(-) diff --git a/gradle.properties b/gradle.properties index fe7b7521..12dcffd0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ PROJECT_LICENSE=MIT PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servlet/blob/master/LICENSE.md PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans -LIB_GRAPHQL_JAVA_VER=19.3 +LIB_GRAPHQL_JAVA_VER=20.0 LIB_JACKSON_VER=2.14.2 LIB_SLF4J_VER=2.0.6 LIB_LOMBOK_VER=1.18.26 diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java index 06982331..19370561 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java @@ -2,7 +2,7 @@ import graphql.execution.instrumentation.ChainedInstrumentation; import graphql.execution.instrumentation.Instrumentation; -import graphql.execution.instrumentation.SimpleInstrumentation; +import graphql.execution.instrumentation.SimplePerformantInstrumentation; import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentationOptions; import graphql.execution.preparsed.NoOpPreparsedDocumentProvider; import graphql.execution.preparsed.PreparsedDocumentProvider; @@ -12,7 +12,9 @@ import java.util.List; import java.util.function.Supplier; -/** @author Andrew Potter */ +/** + * @author Andrew Potter + */ public class GraphQLQueryInvoker { private final Supplier getExecutionStrategyProvider; @@ -48,12 +50,12 @@ public static class Builder { private Supplier getExecutionStrategyProvider = DefaultExecutionStrategyProvider::new; - private Supplier getInstrumentation = () -> SimpleInstrumentation.INSTANCE; + private Supplier getInstrumentation = () -> SimplePerformantInstrumentation.INSTANCE; private Supplier getPreparsedDocumentProvider = () -> NoOpPreparsedDocumentProvider.INSTANCE; private Supplier dataLoaderDispatcherInstrumentationOptionsSupplier = - DataLoaderDispatcherInstrumentationOptions::newOptions; + DataLoaderDispatcherInstrumentationOptions::newOptions; public Builder withExecutionStrategyProvider(ExecutionStrategyProvider provider) { return withExecutionStrategyProvider(() -> provider); diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java index f275b48f..7f5c1dcd 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java @@ -4,7 +4,7 @@ import graphql.execution.ExecutionStrategy; import graphql.execution.instrumentation.ChainedInstrumentation; import graphql.execution.instrumentation.Instrumentation; -import graphql.execution.instrumentation.SimpleInstrumentation; +import graphql.execution.instrumentation.SimplePerformantInstrumentation; import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation; import graphql.execution.preparsed.NoOpPreparsedDocumentProvider; import graphql.execution.preparsed.PreparsedDocumentProvider; @@ -20,7 +20,7 @@ public class GraphQLBuilder { () -> NoOpPreparsedDocumentProvider.INSTANCE; @Getter - private Supplier instrumentationSupplier = () -> SimpleInstrumentation.INSTANCE; + private Supplier instrumentationSupplier = () -> SimplePerformantInstrumentation.INSTANCE; private Supplier graphQLBuilderConfigurerSupplier = () -> builder -> {}; diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java index 4a103fa8..23565b2e 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java @@ -35,7 +35,9 @@ public class ConfigurableDispatchInstrumentation extends DataLoaderDispatcherIns private final Function approachFunction; - /** Creates a DataLoaderDispatcherInstrumentation with the default options */ + /** + * Creates a DataLoaderDispatcherInstrumentation with the default options + */ public ConfigurableDispatchInstrumentation( Function approachFunction) { this(DataLoaderDispatcherInstrumentationOptions.newOptions(), approachFunction); @@ -46,8 +48,7 @@ public ConfigurableDispatchInstrumentation( * * @param options the options to control the behaviour */ - public ConfigurableDispatchInstrumentation( - DataLoaderDispatcherInstrumentationOptions options, + public ConfigurableDispatchInstrumentation(DataLoaderDispatcherInstrumentationOptions options, Function approachFunction) { this.options = options; this.approachFunction = approachFunction; @@ -59,26 +60,27 @@ public InstrumentationState createState(InstrumentationCreateStateParameters par return new DataLoaderDispatcherInstrumentationState( registry, approachFunction.apply(registry), - parameters.getExecutionInput().getExecutionId()); + parameters.getExecutionInput().getExecutionId() + ); } @Override - public DataFetcher instrumentDataFetcher( - DataFetcher dataFetcher, InstrumentationFieldFetchParameters parameters) { - DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState(); + public DataFetcher instrumentDataFetcher(DataFetcher dataFetcher, + InstrumentationFieldFetchParameters parameters, InstrumentationState instrumentationState) { + DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( + instrumentationState); if (state.isAggressivelyBatching()) { return dataFetcher; } // // currently only AsyncExecutionStrategy with DataLoader and hence this allows us to "dispatch" - // on every object if its not using aggressive batching for other execution strategies + // on every object if it's not using aggressive batching for other execution strategies // which allows them to work if used. - return (DataFetcher) - environment -> { - Object obj = dataFetcher.get(environment); - doImmediatelyDispatch(state); - return obj; - }; + return (DataFetcher) environment -> { + Object obj = dataFetcher.get(environment); + doImmediatelyDispatch(state); + return obj; + }; } private void doImmediatelyDispatch(DataLoaderDispatcherInstrumentationState state) { @@ -87,12 +89,14 @@ private void doImmediatelyDispatch(DataLoaderDispatcherInstrumentationState stat @Override public InstrumentationContext beginExecuteOperation( - InstrumentationExecuteOperationParameters parameters) { + InstrumentationExecuteOperationParameters parameters, + InstrumentationState instrumentationState) { if (!isDataLoaderCompatible(parameters.getExecutionContext())) { - DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState(); + DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( + instrumentationState); state.setAggressivelyBatching(false); } - return new SimpleInstrumentationContext<>(); + return SimpleInstrumentationContext.noOp(); } private boolean isDataLoaderCompatible(ExecutionContext executionContext) { @@ -111,8 +115,10 @@ private boolean isDataLoaderCompatible(ExecutionContext executionContext) { @Override public ExecutionStrategyInstrumentationContext beginExecutionStrategy( - InstrumentationExecutionStrategyParameters parameters) { - DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState(); + InstrumentationExecutionStrategyParameters parameters, + InstrumentationState instrumentationState) { + DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( + instrumentationState); // // if there are no data loaders, there is nothing to do // @@ -134,36 +140,39 @@ public void onCompleted(ExecutionResult result, Throwable t) { @Override public InstrumentationContext beginFieldFetch( - InstrumentationFieldFetchParameters parameters) { - DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState(); + InstrumentationFieldFetchParameters parameters, InstrumentationState instrumentationState) { + DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( + instrumentationState); // // if there are no data loaders, there is nothing to do // if (state.hasNoDataLoaders()) { - return new SimpleInstrumentationContext<>(); + return SimpleInstrumentationContext.noOp(); } return state.getApproach().beginFieldFetch(parameters); } @Override public CompletableFuture instrumentExecutionResult( - ExecutionResult executionResult, InstrumentationExecutionParameters parameters) { - DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState(); + ExecutionResult executionResult, InstrumentationExecutionParameters parameters, + InstrumentationState instrumentationState) { + DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( + instrumentationState); state.getApproach().removeTracking(parameters.getExecutionInput().getExecutionId()); if (!options.isIncludeStatistics()) { return CompletableFuture.completedFuture(executionResult); } else { Map currentExt = executionResult.getExtensions(); - Map statsMap = - new LinkedHashMap<>(currentExt == null ? Collections.emptyMap() : currentExt); + Map statsMap = new LinkedHashMap<>( + currentExt == null ? Collections.emptyMap() : currentExt); Map dataLoaderStats = buildStatisticsMap(state); statsMap.put("dataloader", dataLoaderStats); log.debug("Data loader stats : {}", dataLoaderStats); return CompletableFuture.completedFuture( - new ExecutionResultImpl( - executionResult.getData(), executionResult.getErrors(), statsMap)); + new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(), + statsMap)); } } diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/NoOpInstrumentationProvider.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/NoOpInstrumentationProvider.java index 0190c731..e43d3f14 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/NoOpInstrumentationProvider.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/NoOpInstrumentationProvider.java @@ -1,13 +1,13 @@ package graphql.kickstart.execution.instrumentation; import graphql.execution.instrumentation.Instrumentation; -import graphql.execution.instrumentation.SimpleInstrumentation; +import graphql.execution.instrumentation.SimplePerformantInstrumentation; import graphql.kickstart.execution.config.InstrumentationProvider; public class NoOpInstrumentationProvider implements InstrumentationProvider { @Override public Instrumentation getInstrumentation() { - return SimpleInstrumentation.INSTANCE; + return SimplePerformantInstrumentation.INSTANCE; } } diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 5d9eb6ec..9e741d03 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -29,7 +29,7 @@ dependencies { compileOnly 'org.osgi:org.osgi.service.metatype.annotations:1.4.1' compileOnly 'org.osgi:org.osgi.annotation:6.0.0' - testImplementation 'io.github.graphql-java:graphql-java-annotations:8.3' + testImplementation 'io.github.graphql-java:graphql-java-annotations:9.1' // Unit testing testImplementation "org.apache.groovy:groovy-all:4.0.10" diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy index 58003651..89f1abe1 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/DataLoaderDispatchingSpec.groovy @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import graphql.ExecutionInput import graphql.execution.instrumentation.ChainedInstrumentation import graphql.execution.instrumentation.Instrumentation -import graphql.execution.instrumentation.SimpleInstrumentation +import graphql.execution.instrumentation.SimplePerformantInstrumentation import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentationOptions import graphql.kickstart.execution.context.ContextSetting import graphql.kickstart.execution.context.DefaultGraphQLContext @@ -14,7 +14,7 @@ import graphql.kickstart.servlet.context.GraphQLServletContextBuilder import graphql.schema.DataFetcher import graphql.schema.DataFetchingEnvironment import org.dataloader.BatchLoader -import org.dataloader.DataLoader +import org.dataloader.DataLoaderFactory import org.dataloader.DataLoaderRegistry import org.springframework.mock.web.MockHttpServletRequest import org.springframework.mock.web.MockHttpServletResponse @@ -59,9 +59,9 @@ class DataLoaderDispatchingSpec extends Specification { def registry() { DataLoaderRegistry registry = new DataLoaderRegistry() - registry.register("A", DataLoader.newDataLoader(batchLoaderWithCounter(fetchCounterA))) - registry.register("B", DataLoader.newDataLoader(batchLoaderWithCounter(fetchCounterB))) - registry.register("C", DataLoader.newDataLoader(batchLoaderWithCounter(fetchCounterC))) + registry.register("A", DataLoaderFactory.newDataLoader(batchLoaderWithCounter(fetchCounterA))) + registry.register("B", DataLoaderFactory.newDataLoader(batchLoaderWithCounter(fetchCounterB))) + registry.register("C", DataLoaderFactory.newDataLoader(batchLoaderWithCounter(fetchCounterC))) registry } @@ -120,7 +120,7 @@ class DataLoaderDispatchingSpec extends Specification { mapper.readValue(response.getContentAsByteArray(), List) } - Instrumentation simpleInstrumentation = new SimpleInstrumentation() + Instrumentation simpleInstrumentation = new SimplePerformantInstrumentation() ChainedInstrumentation chainedInstrumentation = new ChainedInstrumentation(Collections.singletonList(simpleInstrumentation)) def simpleSupplier = { simpleInstrumentation } def chainedSupplier = { chainedInstrumentation } diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/OsgiGraphQLHttpServletSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/OsgiGraphQLHttpServletSpec.groovy index 7556946a..ea4ed23d 100644 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/OsgiGraphQLHttpServletSpec.groovy +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/OsgiGraphQLHttpServletSpec.groovy @@ -5,7 +5,7 @@ import graphql.annotations.annotationTypes.GraphQLField import graphql.annotations.annotationTypes.GraphQLName import graphql.annotations.processor.GraphQLAnnotations import graphql.execution.instrumentation.InstrumentationState -import graphql.execution.instrumentation.SimpleInstrumentation +import graphql.execution.instrumentation.SimplePerformantInstrumentation import graphql.execution.instrumentation.parameters.InstrumentationCreateStateParameters import graphql.kickstart.execution.GraphQLRequest import graphql.kickstart.execution.config.ExecutionStrategyProvider @@ -349,7 +349,7 @@ class OsgiGraphQLHttpServletSpec extends Specification { def "instrumentation provider is bound and unbound"() { setup: def servlet = new OsgiGraphQLHttpServlet() - def instrumentation = new SimpleInstrumentation() + def instrumentation = new SimplePerformantInstrumentation() def instrumentationProvider = Mock(InstrumentationProvider) instrumentationProvider.getInstrumentation() >> instrumentation def request = GraphQLRequest.createIntrospectionRequest() From 592c6bc68e3d2d183aeb625d8d9b1741385ad3e0 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Sun, 12 Feb 2023 17:13:01 +0100 Subject: [PATCH 25/72] fix: linting --- .../execution/GraphQLQueryInvoker.java | 5 +- .../execution/config/GraphQLBuilder.java | 3 +- .../ConfigurableDispatchInstrumentation.java | 58 ++++++++++--------- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java index 19370561..b03f2ec8 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLQueryInvoker.java @@ -50,12 +50,13 @@ public static class Builder { private Supplier getExecutionStrategyProvider = DefaultExecutionStrategyProvider::new; - private Supplier getInstrumentation = () -> SimplePerformantInstrumentation.INSTANCE; + private Supplier getInstrumentation = + () -> SimplePerformantInstrumentation.INSTANCE; private Supplier getPreparsedDocumentProvider = () -> NoOpPreparsedDocumentProvider.INSTANCE; private Supplier dataLoaderDispatcherInstrumentationOptionsSupplier = - DataLoaderDispatcherInstrumentationOptions::newOptions; + DataLoaderDispatcherInstrumentationOptions::newOptions; public Builder withExecutionStrategyProvider(ExecutionStrategyProvider provider) { return withExecutionStrategyProvider(() -> provider); diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java index 7f5c1dcd..aa43deaa 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/config/GraphQLBuilder.java @@ -20,7 +20,8 @@ public class GraphQLBuilder { () -> NoOpPreparsedDocumentProvider.INSTANCE; @Getter - private Supplier instrumentationSupplier = () -> SimplePerformantInstrumentation.INSTANCE; + private Supplier instrumentationSupplier = + () -> SimplePerformantInstrumentation.INSTANCE; private Supplier graphQLBuilderConfigurerSupplier = () -> builder -> {}; diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java index 23565b2e..477071be 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java @@ -35,9 +35,7 @@ public class ConfigurableDispatchInstrumentation extends DataLoaderDispatcherIns private final Function approachFunction; - /** - * Creates a DataLoaderDispatcherInstrumentation with the default options - */ + /** Creates a DataLoaderDispatcherInstrumentation with the default options */ public ConfigurableDispatchInstrumentation( Function approachFunction) { this(DataLoaderDispatcherInstrumentationOptions.newOptions(), approachFunction); @@ -48,7 +46,8 @@ public ConfigurableDispatchInstrumentation( * * @param options the options to control the behaviour */ - public ConfigurableDispatchInstrumentation(DataLoaderDispatcherInstrumentationOptions options, + public ConfigurableDispatchInstrumentation( + DataLoaderDispatcherInstrumentationOptions options, Function approachFunction) { this.options = options; this.approachFunction = approachFunction; @@ -60,15 +59,16 @@ public InstrumentationState createState(InstrumentationCreateStateParameters par return new DataLoaderDispatcherInstrumentationState( registry, approachFunction.apply(registry), - parameters.getExecutionInput().getExecutionId() - ); + parameters.getExecutionInput().getExecutionId()); } @Override - public DataFetcher instrumentDataFetcher(DataFetcher dataFetcher, - InstrumentationFieldFetchParameters parameters, InstrumentationState instrumentationState) { - DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( - instrumentationState); + public DataFetcher instrumentDataFetcher( + DataFetcher dataFetcher, + InstrumentationFieldFetchParameters parameters, + InstrumentationState instrumentationState) { + DataLoaderDispatcherInstrumentationState state = + InstrumentationState.ofState(instrumentationState); if (state.isAggressivelyBatching()) { return dataFetcher; } @@ -76,11 +76,12 @@ public DataFetcher instrumentDataFetcher(DataFetcher dataFetcher, // currently only AsyncExecutionStrategy with DataLoader and hence this allows us to "dispatch" // on every object if it's not using aggressive batching for other execution strategies // which allows them to work if used. - return (DataFetcher) environment -> { - Object obj = dataFetcher.get(environment); - doImmediatelyDispatch(state); - return obj; - }; + return (DataFetcher) + environment -> { + Object obj = dataFetcher.get(environment); + doImmediatelyDispatch(state); + return obj; + }; } private void doImmediatelyDispatch(DataLoaderDispatcherInstrumentationState state) { @@ -92,8 +93,8 @@ public InstrumentationContext beginExecuteOperation( InstrumentationExecuteOperationParameters parameters, InstrumentationState instrumentationState) { if (!isDataLoaderCompatible(parameters.getExecutionContext())) { - DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( - instrumentationState); + DataLoaderDispatcherInstrumentationState state = + InstrumentationState.ofState(instrumentationState); state.setAggressivelyBatching(false); } return SimpleInstrumentationContext.noOp(); @@ -117,8 +118,8 @@ private boolean isDataLoaderCompatible(ExecutionContext executionContext) { public ExecutionStrategyInstrumentationContext beginExecutionStrategy( InstrumentationExecutionStrategyParameters parameters, InstrumentationState instrumentationState) { - DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( - instrumentationState); + DataLoaderDispatcherInstrumentationState state = + InstrumentationState.ofState(instrumentationState); // // if there are no data loaders, there is nothing to do // @@ -141,8 +142,8 @@ public void onCompleted(ExecutionResult result, Throwable t) { @Override public InstrumentationContext beginFieldFetch( InstrumentationFieldFetchParameters parameters, InstrumentationState instrumentationState) { - DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( - instrumentationState); + DataLoaderDispatcherInstrumentationState state = + InstrumentationState.ofState(instrumentationState); // // if there are no data loaders, there is nothing to do // @@ -154,25 +155,26 @@ public InstrumentationContext beginFieldFetch( @Override public CompletableFuture instrumentExecutionResult( - ExecutionResult executionResult, InstrumentationExecutionParameters parameters, + ExecutionResult executionResult, + InstrumentationExecutionParameters parameters, InstrumentationState instrumentationState) { - DataLoaderDispatcherInstrumentationState state = InstrumentationState.ofState( - instrumentationState); + DataLoaderDispatcherInstrumentationState state = + InstrumentationState.ofState(instrumentationState); state.getApproach().removeTracking(parameters.getExecutionInput().getExecutionId()); if (!options.isIncludeStatistics()) { return CompletableFuture.completedFuture(executionResult); } else { Map currentExt = executionResult.getExtensions(); - Map statsMap = new LinkedHashMap<>( - currentExt == null ? Collections.emptyMap() : currentExt); + Map statsMap = + new LinkedHashMap<>(currentExt == null ? Collections.emptyMap() : currentExt); Map dataLoaderStats = buildStatisticsMap(state); statsMap.put("dataloader", dataLoaderStats); log.debug("Data loader stats : {}", dataLoaderStats); return CompletableFuture.completedFuture( - new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(), - statsMap)); + new ExecutionResultImpl( + executionResult.getData(), executionResult.getErrors(), statsMap)); } } From 25a09d85e61481ba8eb946cdd4ef6a3618bce7a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 18 Mar 2023 19:53:58 +0000 Subject: [PATCH 26/72] fix(deps): update all non-major dependencies to v2.0.7 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 12dcffd0..bfaa90cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=20.0 LIB_JACKSON_VER=2.14.2 -LIB_SLF4J_VER=2.0.6 +LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 SOURCE_COMPATIBILITY=17 TARGET_COMPATIBILITY=17 From 369eaf2dece81bc3811567e4a431ef79634e52e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 10:56:33 +0000 Subject: [PATCH 27/72] fix(deps): update all non-major dependencies to v6.0.7 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 9e741d03..fa99835b 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,7 +37,7 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.6' - testRuntimeOnly 'org.springframework:spring-web:6.0.6' + testImplementation 'org.springframework:spring-test:6.0.7' + testRuntimeOnly 'org.springframework:spring-web:6.0.7' testImplementation 'com.google.guava:guava:31.1-jre' } From 4477bb9633cf70c7725f273ed637fc82d734e2d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 04:45:44 +0000 Subject: [PATCH 28/72] fix(deps): update dependency com.graphql-java:graphql-java to v20.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index bfaa90cb..4aad8ea9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ PROJECT_LICENSE=MIT PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servlet/blob/master/LICENSE.md PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans -LIB_GRAPHQL_JAVA_VER=20.0 +LIB_GRAPHQL_JAVA_VER=20.1 LIB_JACKSON_VER=2.14.2 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 From 3ea58a01309d1ea9f1f573f6756adbd0398af93c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Mar 2023 15:18:39 +0000 Subject: [PATCH 29/72] chore(deps): bump jackson-databind Bumps [jackson-databind](https://github.com/FasterXML/jackson) from 2.13.4.1 to 2.13.4.2. - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- examples/osgi/apache-karaf-feature/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/osgi/apache-karaf-feature/pom.xml b/examples/osgi/apache-karaf-feature/pom.xml index d2c59de7..9b52910b 100644 --- a/examples/osgi/apache-karaf-feature/pom.xml +++ b/examples/osgi/apache-karaf-feature/pom.xml @@ -112,7 +112,7 @@ - 2.13.4.1 + 2.13.4.2 From 851cacf8106d067f91e283178be95817f15dc3c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 01:31:47 +0000 Subject: [PATCH 30/72] chore(deps): update all non-major dependencies --- gradle.properties | 4 ++-- gradle/wrapper/gradle-wrapper.jar | Bin 61608 -> 62076 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 7 ++++--- graphql-java-kickstart/build.gradle | 2 +- graphql-java-servlet/build.gradle | 6 +++--- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4aad8ea9..cb52671e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,8 +7,8 @@ PROJECT_LICENSE=MIT PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servlet/blob/master/LICENSE.md PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans -LIB_GRAPHQL_JAVA_VER=20.1 -LIB_JACKSON_VER=2.14.2 +LIB_GRAPHQL_JAVA_VER=20.2 +LIB_JACKSON_VER=2.15.0 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 SOURCE_COMPATIBILITY=17 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ccebba7710deaf9f98673a68957ea02138b60d0a..c1962a79e29d3e0ab67b14947c167a862655af9b 100644 GIT binary patch delta 8979 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 F{TFmrHLU;u delta 8469 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 Date: Mon, 8 May 2023 11:08:37 +0000 Subject: [PATCH 31/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.12 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 2760929f..e53ddf86 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:9.1' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.11" + testImplementation "org.apache.groovy:groovy-all:4.0.12" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" From a42db87dfb923c472457a897aea2083247224105 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Mon, 8 May 2023 13:30:35 +0200 Subject: [PATCH 32/72] chore: optimize release process --- .github/add-module-suffix.sh | 39 +++++++ .github/release.sh | 17 +++ .github/tag-release.sh | 54 ++++++++++ .github/workflows/release-jdk11.yml | 101 ++++++++++++++++++ .../{release.yml => release-jdk17.yml} | 32 +++++- 5 files changed, 239 insertions(+), 4 deletions(-) create mode 100755 .github/add-module-suffix.sh create mode 100755 .github/release.sh create mode 100755 .github/tag-release.sh create mode 100644 .github/workflows/release-jdk11.yml rename .github/workflows/{release.yml => release-jdk17.yml} (75%) diff --git a/.github/add-module-suffix.sh b/.github/add-module-suffix.sh new file mode 100755 index 00000000..ccba294c --- /dev/null +++ b/.github/add-module-suffix.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +MODULE_SUFFIX="${GITHUB_REF##*/}" + +addSuffix() { + local result + result=$(grep include settings.gradle | awk '{print $2}' | tr -d "'" | tr -d ':') + readarray -t <<<"$result" + modules=("${MAPFILE[@]}") + + updateLocalDependencies +} + +updateLocalDependencies() { + for module in "${modules[@]}"; do + cp -rf "$module" "$module"-"$MODULE_SUFFIX" + rm -rf "$module" + + for dependency in "${modules[@]}"; do + sed -i -E "s/project\(('|\"):${dependency}('|\")\)/project\(':${dependency}-${MODULE_SUFFIX}'\)/" "$module"-"$MODULE_SUFFIX"/build.gradle + done + done + + updateGradleSettings +} + +updateGradleSettings() { + for module in "${modules[@]}"; do + echo "Replace ${module} with ${module}-${MODULE_SUFFIX} in settings.gradle" + sed -i -E "s/('|\"):${module}('|\")/':${module}-${MODULE_SUFFIX}'/" settings.gradle + done + + cat settings.gradle +} + +echo "Add suffix '-$MODULE_SUFFIX' to modules" +addSuffix + +ls -lh \ No newline at end of file diff --git a/.github/release.sh b/.github/release.sh new file mode 100755 index 00000000..5303c90b --- /dev/null +++ b/.github/release.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -ev + +BRANCH="${GITHUB_REF##*/}" + +removeSnapshots() { + sed -i 's/-SNAPSHOT//' gradle.properties +} + +echo "Publishing release to Maven Central" +removeSnapshots + +if [[ "${BRANCH}" != "master" ]]; then + .github/add-module-suffix.sh +fi + +./gradlew clean build publishToSonatype closeAndReleaseSonatypeStagingRepository \ No newline at end of file diff --git a/.github/tag-release.sh b/.github/tag-release.sh new file mode 100755 index 00000000..d80c1699 --- /dev/null +++ b/.github/tag-release.sh @@ -0,0 +1,54 @@ +#!/bin/bash +set -ev + +BRANCH="${GITHUB_REF##*/}" + +getVersion() { + ./gradlew properties -q | grep -E "^version" | awk '{print $2}' | tr -d '[:space:]' +} + +removeSnapshots() { + sed -i 's/-SNAPSHOT//' gradle.properties +} + +commitRelease() { + local APP_VERSION + if "${BRANCH}" == "master"; then + APP_VERSION=$(getVersion) + else + APP_VERSION=$(getVersion)-"${BRANCH}" + fi + git commit -a -m "Update version for release" + git tag -a "v${APP_VERSION}" -m "Tag release version" +} + +bumpVersion() { + echo "Bump version number" + local APP_VERSION + APP_VERSION=$(getVersion | xargs) + local SEMANTIC_REGEX='^([0-9]+)\.([0-9]+)(\.([0-9]+))?$' + if [[ ${APP_VERSION} =~ ${SEMANTIC_REGEX} ]]; then + if [[ ${BASH_REMATCH[4]} ]]; then + nextVersion=$((BASH_REMATCH[4] + 1)) + nextVersion="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${nextVersion}-SNAPSHOT" + else + nextVersion=$((BASH_REMATCH[2] + 1)) + nextVersion="${BASH_REMATCH[1]}.${nextVersion}-SNAPSHOT" + fi + + echo "Next version: ${nextVersion}" + sed -i -E "s/^version(\s)?=.*/version=${nextVersion}/" gradle.properties + git commit -a -m "Bumped version for next release" + else + echo "No semantic version and therefore cannot publish to maven repository: '${APP_VERSION}'" + fi +} + +git config --global user.email "actions@github.com" +git config --global user.name "GitHub Actions" + +echo "Deploying release to Maven Central" +removeSnapshots +commitRelease +bumpVersion +git push --follow-tags \ No newline at end of file diff --git a/.github/workflows/release-jdk11.yml b/.github/workflows/release-jdk11.yml new file mode 100644 index 00000000..8c9549d5 --- /dev/null +++ b/.github/workflows/release-jdk11.yml @@ -0,0 +1,101 @@ +name: "Publish JDK11 release" +on: [ workflow_dispatch ] + +jobs: + validation: + name: Gradle Wrapper Validation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: gradle/wrapper-validation-action@v1 + + test: + name: Test run + needs: validation + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Gradle Check + run: ./gradlew --info check + + build: + name: Publish release + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Prepare environment + env: + GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }} + SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} + run: sudo bash -c "echo '$GPG_KEY_CONTENTS' | base64 -d > '$SIGNING_SECRET_KEY_RING_FILE'" + - name: Publish release + env: + SIGNING_KEY_ID: ${{ secrets.GPG_SIGNING_KEY_ID }} + SIGNING_PASSWORD: ${{ secrets.GPG_SIGNING_PASSWORD }} + SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} + OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} + OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} + run: .github/release.sh + + tag: + name: Tag release + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Tag release + run: .github/tag-release.sh \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release-jdk17.yml similarity index 75% rename from .github/workflows/release.yml rename to .github/workflows/release-jdk17.yml index 714b21c1..b3fd79ae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release-jdk17.yml @@ -1,4 +1,4 @@ -name: "Publish release" +name: "Publish JDK17 release" on: [ workflow_dispatch ] jobs: @@ -60,8 +60,6 @@ jobs: key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: | ${{ runner.os }}-${{ env.java-version }}-gradle- - - name: Make gradlew executable - run: chmod +x ./gradlew - name: Prepare environment env: GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }} @@ -74,4 +72,30 @@ jobs: SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} - run: bash github-build.sh + run: .github/release.sh + + tag: + name: Tag release + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 17 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 17 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Tag release + run: .github/tag-release.sh \ No newline at end of file From c11dbd5b6d0276dc010d2da9a015f5384536f7a5 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Mon, 8 May 2023 13:30:49 +0200 Subject: [PATCH 33/72] chore: remove old release script --- github-build.sh | 53 ------------------------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 github-build.sh diff --git a/github-build.sh b/github-build.sh deleted file mode 100644 index 3456ef9d..00000000 --- a/github-build.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -set -ev - -getVersion() { - ./gradlew properties -q | grep -E "^version" | awk '{print $2}' | tr -d '[:space:]' -} - -removeSnapshots() { - sed -i 's/-SNAPSHOT//' gradle.properties -} - -commitRelease() { - local APP_VERSION=$(getVersion) - git commit -a -m "Update version for release" - git tag -a "v${APP_VERSION}" -m "Tag release version" -} - -bumpVersion() { - echo "Bump version number" - local APP_VERSION=$(getVersion | xargs) - local SEMANTIC_REGEX='^([0-9]+)\.([0-9]+)(\.([0-9]+))?$' - if [[ ${APP_VERSION} =~ ${SEMANTIC_REGEX} ]]; then - if [[ ${BASH_REMATCH[4]} ]]; then - nextVersion=$((BASH_REMATCH[4] + 1)) - nextVersion="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${nextVersion}-SNAPSHOT" - else - nextVersion=$((BASH_REMATCH[2] + 1)) - nextVersion="${BASH_REMATCH[1]}.${nextVersion}-SNAPSHOT" - fi - - echo "Next version: ${nextVersion}" - sed -i -E "s/^version(\s)?=.*/version=${nextVersion}/" gradle.properties - else - echo "No semantic version and therefore cannot publish to maven repository: '${APP_VERSION}'" - fi -} - -commitNextVersion() { - git commit -a -m "Update version for release" -} - -git config --global user.email "actions@github.com" -git config --global user.name "GitHub Actions" - -echo "Deploying release to Maven Central" -removeSnapshots - -./gradlew clean build publishToSonatype closeAndReleaseSonatypeStagingRepository - -commitRelease -bumpVersion -commitNextVersion -git push --follow-tags From b974ea9734d16f567ea334291f1649f9d4321b3f Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Mon, 8 May 2023 13:40:16 +0200 Subject: [PATCH 34/72] chore: revert publish release jdk versions --- .github/workflows/release-jdk11.yml | 101 ------------------ .../{release-jdk17.yml => release.yml} | 2 +- 2 files changed, 1 insertion(+), 102 deletions(-) delete mode 100644 .github/workflows/release-jdk11.yml rename .github/workflows/{release-jdk17.yml => release.yml} (99%) diff --git a/.github/workflows/release-jdk11.yml b/.github/workflows/release-jdk11.yml deleted file mode 100644 index 8c9549d5..00000000 --- a/.github/workflows/release-jdk11.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: "Publish JDK11 release" -on: [ workflow_dispatch ] - -jobs: - validation: - name: Gradle Wrapper Validation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: gradle/wrapper-validation-action@v1 - - test: - name: Test run - needs: validation - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 11 - - name: Cache Gradle - uses: actions/cache@v3 - env: - java-version: 11 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-${{ env.java-version }}-gradle- - - name: Make gradlew executable - run: chmod +x ./gradlew - - name: Gradle Check - run: ./gradlew --info check - - build: - name: Publish release - needs: test - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 11 - - name: Cache Gradle - uses: actions/cache@v3 - env: - java-version: 11 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-${{ env.java-version }}-gradle- - - name: Prepare environment - env: - GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }} - SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} - run: sudo bash -c "echo '$GPG_KEY_CONTENTS' | base64 -d > '$SIGNING_SECRET_KEY_RING_FILE'" - - name: Publish release - env: - SIGNING_KEY_ID: ${{ secrets.GPG_SIGNING_KEY_ID }} - SIGNING_PASSWORD: ${{ secrets.GPG_SIGNING_PASSWORD }} - SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} - OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} - OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} - run: .github/release.sh - - tag: - name: Tag release - needs: build - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 11 - - name: Cache Gradle - uses: actions/cache@v3 - env: - java-version: 11 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-${{ env.java-version }}-gradle- - - name: Tag release - run: .github/tag-release.sh \ No newline at end of file diff --git a/.github/workflows/release-jdk17.yml b/.github/workflows/release.yml similarity index 99% rename from .github/workflows/release-jdk17.yml rename to .github/workflows/release.yml index b3fd79ae..b1a277dd 100644 --- a/.github/workflows/release-jdk17.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: "Publish JDK17 release" +name: "Publish release" on: [ workflow_dispatch ] jobs: From ca50c17acc1a890dd159eee212396219b0350a07 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Mon, 8 May 2023 16:06:41 +0200 Subject: [PATCH 35/72] feat: add snapshot suffix workflow --- .github/workflows/snapshot-suffix.yml | 74 +++++++++++++++++++++++++++ gradle.properties | 2 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/snapshot-suffix.yml diff --git a/.github/workflows/snapshot-suffix.yml b/.github/workflows/snapshot-suffix.yml new file mode 100644 index 00000000..ad9646d7 --- /dev/null +++ b/.github/workflows/snapshot-suffix.yml @@ -0,0 +1,74 @@ +name: "Publish snapshot with suffix" +on: + push: + branches: + - javax + - jakarta + +jobs: + validation: + name: Gradle Wrapper Validation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: gradle/wrapper-validation-action@v1 + + test: + name: Test run + needs: validation + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Gradle Check + run: ./gradlew --info check + + build: + name: Publish snapshot + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Add suffix to modules + run: .github/add-module-suffix.sh + - name: Gradle Publish Snapshot + if: env.OSS_USER_TOKEN_KEY != null + env: + OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} + OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} + run: ./gradlew clean build publish -x test \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index cb52671e..c5145408 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,4 +12,4 @@ LIB_JACKSON_VER=2.15.0 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 SOURCE_COMPATIBILITY=17 -TARGET_COMPATIBILITY=17 +TARGET_COMPATIBILITY=17 \ No newline at end of file From a938d6667b4046d4a6f112a26bd9f7b84ce54d94 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Tue, 9 May 2023 18:28:32 +0200 Subject: [PATCH 36/72] fix(#516): add origin check to websockets --- .../servlet/GraphQLConfiguration.java | 16 +++++++-- .../servlet/GraphQLWebsocketServlet.java | 36 +++++++++++++++---- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java index f009889e..9877ce5a 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java @@ -36,6 +36,7 @@ public class GraphQLConfiguration { private final ContextSetting contextSetting; private final GraphQLResponseCacheManager responseCacheManager; @Getter private final Executor asyncExecutor; + @Getter private final List allowedOrigins; private HttpRequestHandler requestHandler; private GraphQLConfiguration( @@ -49,9 +50,11 @@ private GraphQLConfiguration( ContextSetting contextSetting, Supplier batchInputPreProcessor, GraphQLResponseCacheManager responseCacheManager, - Executor asyncExecutor) { + Executor asyncExecutor, + List allowedOrigins) { this.invocationInputFactory = invocationInputFactory; this.asyncExecutor = asyncExecutor; + this.allowedOrigins = allowedOrigins; this.graphQLInvoker = graphQLInvoker != null ? graphQLInvoker : queryInvoker.toGraphQLInvoker(); this.objectMapper = objectMapper; this.listeners = listeners; @@ -148,6 +151,7 @@ public static class Builder { private int asyncMaxPoolSize = 200; private Executor asyncExecutor; private AsyncTaskDecorator asyncTaskDecorator; + private List allowedOrigins = new ArrayList<>(); private Builder(GraphQLInvocationInputFactory.Builder invocationInputFactoryBuilder) { this.invocationInputFactoryBuilder = invocationInputFactoryBuilder; @@ -249,6 +253,13 @@ public Builder with(AsyncTaskDecorator asyncTaskDecorator) { return this; } + public Builder allowedOrigins(List allowedOrigins) { + if (allowedOrigins != null) { + this.allowedOrigins.addAll(allowedOrigins); + } + return this; + } + private Executor getAsyncExecutor() { if (asyncExecutor != null) { return asyncExecutor; @@ -279,7 +290,8 @@ public GraphQLConfiguration build() { contextSetting, batchInputPreProcessorSupplier, responseCacheManager, - getAsyncTaskExecutor()); + getAsyncTaskExecutor(), + allowedOrigins); } } } diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java index cd22aede..ab88ac16 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java @@ -1,6 +1,7 @@ package graphql.kickstart.servlet; import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.stream.Collectors.toList; @@ -65,6 +66,7 @@ public class GraphQLWebsocketServlet extends Endpoint { private final AtomicBoolean isShuttingDown = new AtomicBoolean(false); private final AtomicBoolean isShutDown = new AtomicBoolean(false); private final Object cacheLock = new Object(); + private final List allowedOrigins; public GraphQLWebsocketServlet(GraphQLConfiguration configuration) { this(configuration, null); @@ -77,21 +79,23 @@ public GraphQLWebsocketServlet( configuration.getGraphQLInvoker(), configuration.getInvocationInputFactory(), configuration.getObjectMapper(), - connectionListeners); + connectionListeners, + configuration.getAllowedOrigins()); } public GraphQLWebsocketServlet( GraphQLInvoker graphQLInvoker, GraphQLSubscriptionInvocationInputFactory invocationInputFactory, GraphQLObjectMapper graphQLObjectMapper) { - this(graphQLInvoker, invocationInputFactory, graphQLObjectMapper, null); + this(graphQLInvoker, invocationInputFactory, graphQLObjectMapper, null, emptyList()); } public GraphQLWebsocketServlet( GraphQLInvoker graphQLInvoker, GraphQLSubscriptionInvocationInputFactory invocationInputFactory, GraphQLObjectMapper graphQLObjectMapper, - Collection connectionListeners) { + Collection connectionListeners, + List allowedOrigins) { List listeners = new ArrayList<>(); if (connectionListeners != null) { connectionListeners.stream() @@ -114,12 +118,10 @@ public GraphQLWebsocketServlet( Stream.of(fallbackSubscriptionProtocolFactory)) .map(SubscriptionProtocolFactory::getProtocol) .collect(toList()); + this.allowedOrigins = allowedOrigins; } public GraphQLWebsocketServlet( - GraphQLInvoker graphQLInvoker, - GraphQLSubscriptionInvocationInputFactory invocationInputFactory, - GraphQLObjectMapper graphQLObjectMapper, List subscriptionProtocolFactory, SubscriptionProtocolFactory fallbackSubscriptionProtocolFactory) { @@ -132,6 +134,8 @@ public GraphQLWebsocketServlet( Stream.of(fallbackSubscriptionProtocolFactory)) .map(SubscriptionProtocolFactory::getProtocol) .collect(toList()); + + this.allowedOrigins = emptyList(); } @Override @@ -202,6 +206,26 @@ private void closeUnexpectedly(Session session, Throwable t) { } } + public boolean checkOrigin(String originHeaderValue) { + if (originHeaderValue == null || originHeaderValue.isBlank()) { + return allowedOrigins.isEmpty(); + } + String originToCheck = trimTrailingSlash(originHeaderValue); + if (!allowedOrigins.isEmpty()) { + if (allowedOrigins.contains("*")) { + return true; + } + return allowedOrigins.stream() + .map(this::trimTrailingSlash) + .anyMatch(originToCheck::equalsIgnoreCase); + } + return true; + } + + private String trimTrailingSlash(String origin) { + return (origin.endsWith("/") ? origin.substring(0, origin.length() - 1) : origin); + } + public void modifyHandshake( ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) { sec.getUserProperties().put(HANDSHAKE_REQUEST_KEY, request); From 060f75327b709cb36cf56c246ae43ee78b1b6279 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Tue, 9 May 2023 19:07:16 +0200 Subject: [PATCH 37/72] fix(#516): add check origin tests --- .../GraphQLWebsocketServletSpec.groovy | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy new file mode 100644 index 00000000..e4074455 --- /dev/null +++ b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy @@ -0,0 +1,83 @@ +package graphql.kickstart.servlet + +import spock.lang.Specification + +class GraphQLWebsocketServletSpec extends Specification { + + def "checkOrigin without any allowed origins allows given origin"() { + given: "a websocket servlet with no allowed origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).build()) + + when: "we check origin http://localhost:8080" + def allowed = servlet.checkOrigin("http://localhost:8080") + + then: + allowed + } + + def "checkOrigin without any allowed origins allows when no origin given"() { + given: "a websocket servlet with no allowed origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).build()) + + when: "we check origin null" + def allowed = servlet.checkOrigin(null) + + then: + allowed + } + + def "checkOrigin without any allowed origins allows when origin is empty"() { + given: "a websocket servlet with no allowed origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).build()) + + when: "we check origin null" + def allowed = servlet.checkOrigin(" ") + + then: + allowed + } + + def "checkOrigin with allow all origins allows given origin"() { + given: "a websocket servlet with allow all origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("*")).build()) + + when: "we check origin http://localhost:8080" + def allowed = servlet.checkOrigin("http://localhost:8080") + + then: + allowed + } + + def "checkOrigin with specific allowed origins allows given origin"() { + given: "a websocket servlet with allow all origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("http://localhost:8080")).build()) + + when: "we check origin http://localhost:8080" + def allowed = servlet.checkOrigin("http://localhost:8080") + + then: + allowed + } + + def "checkOrigin with specific allowed origins allows given origin with trailing slash"() { + given: "a websocket servlet with allow all origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("http://localhost:8080")).build()) + + when: "we check origin http://localhost:8080/" + def allowed = servlet.checkOrigin("http://localhost:8080/") + + then: + allowed + } + + def "checkOrigin with specific allowed origins with trailing slash allows given origin without trailing slash"() { + given: "a websocket servlet with allow all origins" + def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("http://localhost:8080/")).build()) + + when: "we check origin http://localhost:8080" + def allowed = servlet.checkOrigin("http://localhost:8080") + + then: + allowed + } +} From d947467a7f6c19aeb699c55e7d9a48bce672909e Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Tue, 9 May 2023 19:42:40 +0200 Subject: [PATCH 38/72] chore: update version to 15.1.0 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index c5145408..d482aa8a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=15.0.1-SNAPSHOT +version=15.1.0-SNAPSHOT group=com.graphql-java-kickstart PROJECT_NAME=graphql-java-servlet PROJECT_DESC=GraphQL Java Kickstart @@ -12,4 +12,4 @@ LIB_JACKSON_VER=2.15.0 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 SOURCE_COMPATIBILITY=17 -TARGET_COMPATIBILITY=17 \ No newline at end of file +TARGET_COMPATIBILITY=17 From f02694d7fa1b9b2e87f277786860bad28e93f9a6 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Wed, 10 May 2023 14:13:06 +0200 Subject: [PATCH 39/72] fix(#516): revert check origin test --- .../servlet/GraphQLConfiguration.java | 16 +--- .../servlet/GraphQLWebsocketServlet.java | 33 +------- .../GraphQLWebsocketServletSpec.groovy | 83 ------------------- 3 files changed, 5 insertions(+), 127 deletions(-) delete mode 100644 graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java index 9877ce5a..f009889e 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLConfiguration.java @@ -36,7 +36,6 @@ public class GraphQLConfiguration { private final ContextSetting contextSetting; private final GraphQLResponseCacheManager responseCacheManager; @Getter private final Executor asyncExecutor; - @Getter private final List allowedOrigins; private HttpRequestHandler requestHandler; private GraphQLConfiguration( @@ -50,11 +49,9 @@ private GraphQLConfiguration( ContextSetting contextSetting, Supplier batchInputPreProcessor, GraphQLResponseCacheManager responseCacheManager, - Executor asyncExecutor, - List allowedOrigins) { + Executor asyncExecutor) { this.invocationInputFactory = invocationInputFactory; this.asyncExecutor = asyncExecutor; - this.allowedOrigins = allowedOrigins; this.graphQLInvoker = graphQLInvoker != null ? graphQLInvoker : queryInvoker.toGraphQLInvoker(); this.objectMapper = objectMapper; this.listeners = listeners; @@ -151,7 +148,6 @@ public static class Builder { private int asyncMaxPoolSize = 200; private Executor asyncExecutor; private AsyncTaskDecorator asyncTaskDecorator; - private List allowedOrigins = new ArrayList<>(); private Builder(GraphQLInvocationInputFactory.Builder invocationInputFactoryBuilder) { this.invocationInputFactoryBuilder = invocationInputFactoryBuilder; @@ -253,13 +249,6 @@ public Builder with(AsyncTaskDecorator asyncTaskDecorator) { return this; } - public Builder allowedOrigins(List allowedOrigins) { - if (allowedOrigins != null) { - this.allowedOrigins.addAll(allowedOrigins); - } - return this; - } - private Executor getAsyncExecutor() { if (asyncExecutor != null) { return asyncExecutor; @@ -290,8 +279,7 @@ public GraphQLConfiguration build() { contextSetting, batchInputPreProcessorSupplier, responseCacheManager, - getAsyncTaskExecutor(), - allowedOrigins); + getAsyncTaskExecutor()); } } } diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java index ab88ac16..38381adf 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/GraphQLWebsocketServlet.java @@ -1,7 +1,6 @@ package graphql.kickstart.servlet; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.stream.Collectors.toList; @@ -66,7 +65,6 @@ public class GraphQLWebsocketServlet extends Endpoint { private final AtomicBoolean isShuttingDown = new AtomicBoolean(false); private final AtomicBoolean isShutDown = new AtomicBoolean(false); private final Object cacheLock = new Object(); - private final List allowedOrigins; public GraphQLWebsocketServlet(GraphQLConfiguration configuration) { this(configuration, null); @@ -79,23 +77,21 @@ public GraphQLWebsocketServlet( configuration.getGraphQLInvoker(), configuration.getInvocationInputFactory(), configuration.getObjectMapper(), - connectionListeners, - configuration.getAllowedOrigins()); + connectionListeners); } public GraphQLWebsocketServlet( GraphQLInvoker graphQLInvoker, GraphQLSubscriptionInvocationInputFactory invocationInputFactory, GraphQLObjectMapper graphQLObjectMapper) { - this(graphQLInvoker, invocationInputFactory, graphQLObjectMapper, null, emptyList()); + this(graphQLInvoker, invocationInputFactory, graphQLObjectMapper, null); } public GraphQLWebsocketServlet( GraphQLInvoker graphQLInvoker, GraphQLSubscriptionInvocationInputFactory invocationInputFactory, GraphQLObjectMapper graphQLObjectMapper, - Collection connectionListeners, - List allowedOrigins) { + Collection connectionListeners) { List listeners = new ArrayList<>(); if (connectionListeners != null) { connectionListeners.stream() @@ -118,7 +114,6 @@ public GraphQLWebsocketServlet( Stream.of(fallbackSubscriptionProtocolFactory)) .map(SubscriptionProtocolFactory::getProtocol) .collect(toList()); - this.allowedOrigins = allowedOrigins; } public GraphQLWebsocketServlet( @@ -134,8 +129,6 @@ public GraphQLWebsocketServlet( Stream.of(fallbackSubscriptionProtocolFactory)) .map(SubscriptionProtocolFactory::getProtocol) .collect(toList()); - - this.allowedOrigins = emptyList(); } @Override @@ -206,26 +199,6 @@ private void closeUnexpectedly(Session session, Throwable t) { } } - public boolean checkOrigin(String originHeaderValue) { - if (originHeaderValue == null || originHeaderValue.isBlank()) { - return allowedOrigins.isEmpty(); - } - String originToCheck = trimTrailingSlash(originHeaderValue); - if (!allowedOrigins.isEmpty()) { - if (allowedOrigins.contains("*")) { - return true; - } - return allowedOrigins.stream() - .map(this::trimTrailingSlash) - .anyMatch(originToCheck::equalsIgnoreCase); - } - return true; - } - - private String trimTrailingSlash(String origin) { - return (origin.endsWith("/") ? origin.substring(0, origin.length() - 1) : origin); - } - public void modifyHandshake( ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) { sec.getUserProperties().put(HANDSHAKE_REQUEST_KEY, request); diff --git a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy deleted file mode 100644 index e4074455..00000000 --- a/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/GraphQLWebsocketServletSpec.groovy +++ /dev/null @@ -1,83 +0,0 @@ -package graphql.kickstart.servlet - -import spock.lang.Specification - -class GraphQLWebsocketServletSpec extends Specification { - - def "checkOrigin without any allowed origins allows given origin"() { - given: "a websocket servlet with no allowed origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).build()) - - when: "we check origin http://localhost:8080" - def allowed = servlet.checkOrigin("http://localhost:8080") - - then: - allowed - } - - def "checkOrigin without any allowed origins allows when no origin given"() { - given: "a websocket servlet with no allowed origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).build()) - - when: "we check origin null" - def allowed = servlet.checkOrigin(null) - - then: - allowed - } - - def "checkOrigin without any allowed origins allows when origin is empty"() { - given: "a websocket servlet with no allowed origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).build()) - - when: "we check origin null" - def allowed = servlet.checkOrigin(" ") - - then: - allowed - } - - def "checkOrigin with allow all origins allows given origin"() { - given: "a websocket servlet with allow all origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("*")).build()) - - when: "we check origin http://localhost:8080" - def allowed = servlet.checkOrigin("http://localhost:8080") - - then: - allowed - } - - def "checkOrigin with specific allowed origins allows given origin"() { - given: "a websocket servlet with allow all origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("http://localhost:8080")).build()) - - when: "we check origin http://localhost:8080" - def allowed = servlet.checkOrigin("http://localhost:8080") - - then: - allowed - } - - def "checkOrigin with specific allowed origins allows given origin with trailing slash"() { - given: "a websocket servlet with allow all origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("http://localhost:8080")).build()) - - when: "we check origin http://localhost:8080/" - def allowed = servlet.checkOrigin("http://localhost:8080/") - - then: - allowed - } - - def "checkOrigin with specific allowed origins with trailing slash allows given origin without trailing slash"() { - given: "a websocket servlet with allow all origins" - def servlet = new GraphQLWebsocketServlet(GraphQLConfiguration.with(TestUtils.createGraphQlSchema()).allowedOrigins(List.of("http://localhost:8080/")).build()) - - when: "we check origin http://localhost:8080" - def allowed = servlet.checkOrigin("http://localhost:8080") - - then: - allowed - } -} From ebbd81406995b9ac54b303ec4e753f06a8e879c4 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Wed, 10 May 2023 14:30:39 +0200 Subject: [PATCH 40/72] feat: limit scope of servlet-api libs fixes #490 --- graphql-java-servlet/build.gradle | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index e53ddf86..27b2ffce 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -16,9 +16,9 @@ dependencies { api(project(':graphql-java-kickstart')) // Servlet - api 'jakarta.servlet:jakarta.servlet-api:6.0.0' - api 'jakarta.websocket:jakarta.websocket-api:2.1.0' - api 'jakarta.websocket:jakarta.websocket-client-api:2.1.0' + compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0' + compileOnly 'jakarta.websocket:jakarta.websocket-api:2.1.0' + compileOnly 'jakarta.websocket:jakarta.websocket-client-api:2.1.0' implementation "org.slf4j:slf4j-api:$LIB_SLF4J_VER" // OSGi @@ -40,4 +40,7 @@ dependencies { testImplementation 'org.springframework:spring-test:6.0.8' testRuntimeOnly 'org.springframework:spring-web:6.0.8' testImplementation 'com.google.guava:guava:31.1-jre' + testImplementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' + testImplementation 'jakarta.websocket:jakarta.websocket-api:2.1.0' + testImplementation 'jakarta.websocket:jakarta.websocket-client-api:2.1.0' } From 6e56f628e9e9af033eadced1eb81137645572650 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 May 2023 16:19:04 +0000 Subject: [PATCH 41/72] fix(deps): update all non-major dependencies to v6.0.9 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 27b2ffce..3a118f00 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,8 +37,8 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.8' - testRuntimeOnly 'org.springframework:spring-web:6.0.8' + testImplementation 'org.springframework:spring-test:6.0.9' + testRuntimeOnly 'org.springframework:spring-web:6.0.9' testImplementation 'com.google.guava:guava:31.1-jre' testImplementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' testImplementation 'jakarta.websocket:jakarta.websocket-api:2.1.0' From c88ea7efd6046f1311f6f12bd8c07c3d387a7954 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Thu, 11 May 2023 12:53:03 +0200 Subject: [PATCH 42/72] ci: build and publish javax flavour The 'release' github action has a new job to build the javax flavour of this project. This job has three main steps: - Replace all the jakarta imports and dependencies with the javax ones - Downgrade springframework dependency to the version 5.* - Using jdk 11 to build the project and publish it The cold migration from jakarta to javax is done via a new bash script `.github/replaceJakartaWithJavax.sh` that uses mainly the sed command to perform the replacement operations. In gradle.properties the SOURCE_COMPATIBILITY and the TARGET_COMPATIBILITY constants are downgraded to 11 in order to allow the users to use the latest version of this library even in projects where the jdk11 is mandatory. Updated the README with a brief explanation of the difference between the two flavours of this project. --- .github/add-module-suffix.sh | 2 +- .github/release.sh | 6 ++-- .github/replaceJakartaWithJavax.sh | 28 ++++++++++++++++++ .github/tag-release.sh | 6 ++-- .github/workflows/release.yml | 47 +++++++++++++++++++++++++++--- README.md | 15 +++++++++- build.gradle | 5 ++++ gradle.properties | 8 +++-- graphql-java-servlet/build.gradle | 16 +++++----- 9 files changed, 111 insertions(+), 22 deletions(-) create mode 100755 .github/replaceJakartaWithJavax.sh diff --git a/.github/add-module-suffix.sh b/.github/add-module-suffix.sh index ccba294c..d7da229e 100755 --- a/.github/add-module-suffix.sh +++ b/.github/add-module-suffix.sh @@ -1,6 +1,6 @@ #!/bin/bash -MODULE_SUFFIX="${GITHUB_REF##*/}" +MODULE_SUFFIX="${1}" addSuffix() { local result diff --git a/.github/release.sh b/.github/release.sh index 5303c90b..31cd0d3f 100755 --- a/.github/release.sh +++ b/.github/release.sh @@ -1,7 +1,7 @@ #!/bin/bash set -ev -BRANCH="${GITHUB_REF##*/}" +FLAVOUR="${1}" removeSnapshots() { sed -i 's/-SNAPSHOT//' gradle.properties @@ -10,8 +10,8 @@ removeSnapshots() { echo "Publishing release to Maven Central" removeSnapshots -if [[ "${BRANCH}" != "master" ]]; then - .github/add-module-suffix.sh +if [ -n "${FLAVOUR}" ]; then + .github/add-module-suffix.sh $FLAVOUR fi ./gradlew clean build publishToSonatype closeAndReleaseSonatypeStagingRepository \ No newline at end of file diff --git a/.github/replaceJakartaWithJavax.sh b/.github/replaceJakartaWithJavax.sh new file mode 100755 index 00000000..e6f8d7ee --- /dev/null +++ b/.github/replaceJakartaWithJavax.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Set jdk11 as source and target +sed -i 's/SOURCE_COMPATIBILITY=.*/SOURCE_COMPATIBILITY=11/' gradle.properties +sed -i 's/TARGET_COMPATIBILITY=.*/TARGET_COMPATIBILITY=11/' gradle.properties + +# Replace jakarta imports and dependencies with javax +grep -rl 'import jakarta' ./graphql-java-servlet | xargs sed -i 's/import jakarta/import javax/g' +sed -i 's/.*jakarta.websocket:jakarta.websocket-client-api.*//' graphql-java-servlet/build.gradle +sed -i \ + 's/jakarta.servlet:jakarta.servlet-api.*/javax.servlet:javax.servlet-api:$LIB_JAVAX_SERVLET"/' \ + graphql-java-servlet/build.gradle +sed -i \ + 's/jakarta.websocket.*/javax.websocket:javax.websocket-api:$LIB_JAVAX_WEBSOCKET"/' \ + graphql-java-servlet/build.gradle + +# Final check if there are something else to replace +grep -rl 'jakarta' ./graphql-java-servlet | xargs sed -i 's/jakarta/javax/g' + +# Set the version 5 for spring framework +sed -i \ + 's/org.springframework:spring-test.*/org.springframework:spring-test:$LIB_SPRINGFRAMEWORK_5"/' \ + graphql-java-servlet/build.gradle +sed -i \ + 's/org.springframework:spring-web.*/org.springframework:spring-web:$LIB_SPRINGFRAMEWORK_5"/' \ + graphql-java-servlet/build.gradle + +echo "Replaced jakarta occurrences with javax" \ No newline at end of file diff --git a/.github/tag-release.sh b/.github/tag-release.sh index d80c1699..4c1101d2 100755 --- a/.github/tag-release.sh +++ b/.github/tag-release.sh @@ -1,7 +1,7 @@ #!/bin/bash set -ev -BRANCH="${GITHUB_REF##*/}" +FLAVOUR="${1}" getVersion() { ./gradlew properties -q | grep -E "^version" | awk '{print $2}' | tr -d '[:space:]' @@ -13,10 +13,10 @@ removeSnapshots() { commitRelease() { local APP_VERSION - if "${BRANCH}" == "master"; then + if [ -z "${FLAVOUR}" ]; then APP_VERSION=$(getVersion) else - APP_VERSION=$(getVersion)-"${BRANCH}" + APP_VERSION=$(getVersion)-"${FLAVOUR}" fi git commit -a -m "Update version for release" git tag -a "v${APP_VERSION}" -m "Tag release version" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b1a277dd..15d0a5e1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,8 +37,8 @@ jobs: - name: Gradle Check run: ./gradlew --info check - build: - name: Publish release + build-jakarta: + name: Publish release jakarta needs: test runs-on: ubuntu-latest steps: @@ -74,9 +74,48 @@ jobs: OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} run: .github/release.sh + build-javax: + name: Publish release javax + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Prepare environment + env: + GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }} + SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} + run: sudo bash -c "echo '$GPG_KEY_CONTENTS' | base64 -d > '$SIGNING_SECRET_KEY_RING_FILE'" + - name: Replace jakarta with javax + run: .github/replaceJakartaWithJavax.sh + - name: Publish release + env: + SIGNING_KEY_ID: ${{ secrets.GPG_SIGNING_KEY_ID }} + SIGNING_PASSWORD: ${{ secrets.GPG_SIGNING_PASSWORD }} + SIGNING_SECRET_KEY_RING_FILE: ${{ secrets.GPG_SIGNING_SECRET_KEY_RING_FILE }} + OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} + OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} + run: .github/release.sh javax tag: name: Tag release - needs: build + needs: [ build-jakarta, build-javax ] runs-on: ubuntu-latest steps: - name: Checkout @@ -98,4 +137,4 @@ jobs: restore-keys: | ${{ runner.os }}-${{ env.java-version }}-gradle- - name: Tag release - run: .github/tag-release.sh \ No newline at end of file + run: .github/tag-release.sh diff --git a/README.md b/README.md index 8a4d3bff..7eb41698 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,20 @@ This project wraps the Java implementation of GraphQL provided by [GraphQL Java] See [GraphQL Java documentation](https://www.graphql-java.com/documentation/latest/) for more in depth details regarding GraphQL Java itself. -We try to stay up to date with GraphQL Java as much as possible. See [gradle.properties](gradle.properties) to see currently supported versions. +We try to stay up to date with GraphQL Java as much as possible maintaining the retro-compatibility +with javax and Springframework 5. + +On each release we publish two flavours of this project: + - the main one is using `jakarta` and Springframework `6.*` + - the legacy one is using `javax` and Springframework `5.*` + +On maven central you can distinguish them from the version because the `javax` flavor has the +suffix `-javax`. + +Both of them also supports legacy projects that can compile with older JDK versions: the oldest +supported one is the `11`. + +See [gradle.properties](gradle.properties) to see currently supported versions. ## Installation and getting started diff --git a/build.gradle b/build.gradle index ca0f6f45..9e655f65 100644 --- a/build.gradle +++ b/build.gradle @@ -76,6 +76,11 @@ subprojects { targetCompatibility = TARGET_COMPATIBILITY } + compileTestJava { + sourceCompatibility = 17 + targetCompatibility = 17 + } + compileJava.dependsOn(processResources) test { diff --git a/gradle.properties b/gradle.properties index d482aa8a..d2e89c8b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,5 +11,9 @@ LIB_GRAPHQL_JAVA_VER=20.2 LIB_JACKSON_VER=2.15.0 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 -SOURCE_COMPATIBILITY=17 -TARGET_COMPATIBILITY=17 +# These constants are necessary to the automatic release of javax flavour +LIB_JAVAX_SERVLET=4.0.1 +LIB_JAVAX_WEBSOCKET=1.1 +LIB_SPRINGFRAMEWORK_5=5.3.25 +SOURCE_COMPATIBILITY=11 +TARGET_COMPATIBILITY=11 diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 3a118f00..08d734e7 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -16,9 +16,9 @@ dependencies { api(project(':graphql-java-kickstart')) // Servlet - compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0' - compileOnly 'jakarta.websocket:jakarta.websocket-api:2.1.0' - compileOnly 'jakarta.websocket:jakarta.websocket-client-api:2.1.0' + compileOnly "jakarta.servlet:jakarta.servlet-api:6.0.0" + compileOnly "jakarta.websocket:jakarta.websocket-api:2.1.0" + compileOnly "jakarta.websocket:jakarta.websocket-client-api:2.1.0" implementation "org.slf4j:slf4j-api:$LIB_SLF4J_VER" // OSGi @@ -37,10 +37,10 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation 'org.springframework:spring-test:6.0.9' - testRuntimeOnly 'org.springframework:spring-web:6.0.9' + testImplementation "org.springframework:spring-test:6.0.9" + testRuntimeOnly "org.springframework:spring-web:6.0.9" testImplementation 'com.google.guava:guava:31.1-jre' - testImplementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' - testImplementation 'jakarta.websocket:jakarta.websocket-api:2.1.0' - testImplementation 'jakarta.websocket:jakarta.websocket-client-api:2.1.0' + testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" + testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.0" + testImplementation "jakarta.websocket:jakarta.websocket-client-api:2.1.0" } From 2782c250f095f8fdf41ece0b0afc54d4f34087c5 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Fri, 12 May 2023 15:40:04 +0200 Subject: [PATCH 43/72] chore: fix typo in osgi/pom.xml --- examples/osgi/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/osgi/pom.xml b/examples/osgi/pom.xml index a0daab35..b8729ff1 100644 --- a/examples/osgi/pom.xml +++ b/examples/osgi/pom.xml @@ -17,7 +17,7 @@ 11.0.0-SNAPSHOT 16.1 4.2.10 -u 11 + 11 11 From 74099ef7c3e9cc90057215663e2c3e95b0354111 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Sat, 13 May 2023 22:12:54 +0200 Subject: [PATCH 44/72] ci: merge publishing snapshot actions - Refactored bash scripts to accept only javax flavour - Removed snapshot-suffix.yml action - Added test-javax jobs in release action --- ...d-module-suffix.sh => add-javax-suffix.sh} | 12 ++- .github/release.sh | 4 +- .github/tag-release.sh | 8 +- .github/workflows/release.yml | 38 +++++++++- .github/workflows/snapshot-suffix.yml | 74 ------------------ .github/workflows/snapshot.yml | 76 +++++++++++++++++-- 6 files changed, 113 insertions(+), 99 deletions(-) rename .github/{add-module-suffix.sh => add-javax-suffix.sh} (60%) delete mode 100644 .github/workflows/snapshot-suffix.yml diff --git a/.github/add-module-suffix.sh b/.github/add-javax-suffix.sh similarity index 60% rename from .github/add-module-suffix.sh rename to .github/add-javax-suffix.sh index d7da229e..447b060f 100755 --- a/.github/add-module-suffix.sh +++ b/.github/add-javax-suffix.sh @@ -1,7 +1,5 @@ #!/bin/bash -MODULE_SUFFIX="${1}" - addSuffix() { local result result=$(grep include settings.gradle | awk '{print $2}' | tr -d "'" | tr -d ':') @@ -13,11 +11,11 @@ addSuffix() { updateLocalDependencies() { for module in "${modules[@]}"; do - cp -rf "$module" "$module"-"$MODULE_SUFFIX" + cp -rf "$module" "$module"-javax rm -rf "$module" for dependency in "${modules[@]}"; do - sed -i -E "s/project\(('|\"):${dependency}('|\")\)/project\(':${dependency}-${MODULE_SUFFIX}'\)/" "$module"-"$MODULE_SUFFIX"/build.gradle + sed -i -E "s/project\(('|\"):${dependency}('|\")\)/project\(':${dependency}-javax'\)/" "$module"-"javax"/build.gradle done done @@ -26,14 +24,14 @@ updateLocalDependencies() { updateGradleSettings() { for module in "${modules[@]}"; do - echo "Replace ${module} with ${module}-${MODULE_SUFFIX} in settings.gradle" - sed -i -E "s/('|\"):${module}('|\")/':${module}-${MODULE_SUFFIX}'/" settings.gradle + echo "Replace ${module} with ${module}-javax in settings.gradle" + sed -i -E "s/('|\"):${module}('|\")/':${module}-javax'/" settings.gradle done cat settings.gradle } -echo "Add suffix '-$MODULE_SUFFIX' to modules" +echo "Add suffix -javax to modules" addSuffix ls -lh \ No newline at end of file diff --git a/.github/release.sh b/.github/release.sh index 31cd0d3f..008a6d3a 100755 --- a/.github/release.sh +++ b/.github/release.sh @@ -10,8 +10,8 @@ removeSnapshots() { echo "Publishing release to Maven Central" removeSnapshots -if [ -n "${FLAVOUR}" ]; then - .github/add-module-suffix.sh $FLAVOUR +if [ "${FLAVOUR}" == 'javax' ]; then + .github/add-javax-suffix.sh fi ./gradlew clean build publishToSonatype closeAndReleaseSonatypeStagingRepository \ No newline at end of file diff --git a/.github/tag-release.sh b/.github/tag-release.sh index 4c1101d2..a0628629 100755 --- a/.github/tag-release.sh +++ b/.github/tag-release.sh @@ -1,8 +1,6 @@ #!/bin/bash set -ev -FLAVOUR="${1}" - getVersion() { ./gradlew properties -q | grep -E "^version" | awk '{print $2}' | tr -d '[:space:]' } @@ -13,11 +11,7 @@ removeSnapshots() { commitRelease() { local APP_VERSION - if [ -z "${FLAVOUR}" ]; then - APP_VERSION=$(getVersion) - else - APP_VERSION=$(getVersion)-"${FLAVOUR}" - fi + APP_VERSION=$(getVersion) git commit -a -m "Update version for release" git tag -a "v${APP_VERSION}" -m "Tag release version" } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 15d0a5e1..386a307a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,8 +9,8 @@ jobs: - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 - test: - name: Test run + test-jakarta: + name: Test run jakarta needs: validation runs-on: ubuntu-latest steps: @@ -39,7 +39,7 @@ jobs: build-jakarta: name: Publish release jakarta - needs: test + needs: test-jakarta runs-on: ubuntu-latest steps: - name: Checkout @@ -74,9 +74,39 @@ jobs: OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} run: .github/release.sh + test-javax: + name: Test run javax + needs: validation + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Replace jakarta with javax + run: .github/replaceJakartaWithJavax.sh + - name: Gradle Check + run: ./gradlew --info check + build-javax: name: Publish release javax - needs: test + needs: test-javax runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/snapshot-suffix.yml b/.github/workflows/snapshot-suffix.yml deleted file mode 100644 index ad9646d7..00000000 --- a/.github/workflows/snapshot-suffix.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: "Publish snapshot with suffix" -on: - push: - branches: - - javax - - jakarta - -jobs: - validation: - name: Gradle Wrapper Validation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: gradle/wrapper-validation-action@v1 - - test: - name: Test run - needs: validation - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 11 - - name: Cache Gradle - uses: actions/cache@v3 - env: - java-version: 11 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-${{ env.java-version }}-gradle- - - name: Make gradlew executable - run: chmod +x ./gradlew - - name: Gradle Check - run: ./gradlew --info check - - build: - name: Publish snapshot - needs: test - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 11 - - name: Cache Gradle - uses: actions/cache@v3 - env: - java-version: 11 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-${{ env.java-version }}-gradle- - - name: Add suffix to modules - run: .github/add-module-suffix.sh - - name: Gradle Publish Snapshot - if: env.OSS_USER_TOKEN_KEY != null - env: - OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} - OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} - run: ./gradlew clean build publish -x test \ No newline at end of file diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 8993506c..01009342 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -12,8 +12,8 @@ jobs: - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 - test: - name: Test run + test-jakarta: + name: Test run jakarta needs: validation runs-on: ubuntu-latest steps: @@ -40,9 +40,9 @@ jobs: - name: Gradle Check run: ./gradlew --info check - build: - name: Publish snapshot - needs: test + build-jakarta: + name: Publish snapshot jakarta + needs: test-jakarta runs-on: ubuntu-latest steps: - name: Checkout @@ -72,6 +72,72 @@ jobs: OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} run: ./gradlew clean build publish -x test + test-javax: + name: Test run javax + needs: validation + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Replace jakarta with javax + run: .github/replaceJakartaWithJavax.sh + - name: Gradle Check + run: ./gradlew --info check + + build-javax: + name: Publish snapshot javax + needs: test-javax + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 11 + - name: Cache Gradle + uses: actions/cache@v3 + env: + java-version: 11 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-${{ env.java-version }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-${{ env.java-version }}-gradle- + - name: Make gradlew executable + run: chmod +x ./gradlew + - name: Replace jakarta with javax + run: .github/replaceJakartaWithJavax.sh + - name: Add suffix to modules + run: .github/add-javax-suffix.sh + - name: Gradle Publish Snapshot + if: env.OSS_USER_TOKEN_KEY != null + env: + OSS_USER_TOKEN_KEY: ${{ secrets.OSS_USER_TOKEN_KEY }} + OSS_USER_TOKEN_PASS: ${{ secrets.OSS_USER_TOKEN_PASS }} + run: ./gradlew clean build publish -x test + sonar: name: Sonar analysis needs: validation From 8688d964666d89f569073a886b7e6e2ef992340d Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Sat, 13 May 2023 23:52:21 +0200 Subject: [PATCH 45/72] chore: use constants for test source and target compatibily --- build.gradle | 4 ++-- gradle.properties | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 9e655f65..6e30d917 100644 --- a/build.gradle +++ b/build.gradle @@ -77,8 +77,8 @@ subprojects { } compileTestJava { - sourceCompatibility = 17 - targetCompatibility = 17 + sourceCompatibility = SOURCE_COMPATIBILITY_TEST + targetCompatibility = TARGET_COMPATIBILITY_TEST } compileJava.dependsOn(processResources) diff --git a/gradle.properties b/gradle.properties index d2e89c8b..dce5ce06 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,3 +17,5 @@ LIB_JAVAX_WEBSOCKET=1.1 LIB_SPRINGFRAMEWORK_5=5.3.25 SOURCE_COMPATIBILITY=11 TARGET_COMPATIBILITY=11 +SOURCE_COMPATIBILITY_TEST=17 +TARGET_COMPATIBILITY_TEST=17 From 9fa225707f2ac8496b819b111c4a827202a9e443 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 02:07:40 +0000 Subject: [PATCH 46/72] fix(deps): update all non-major dependencies to v2.15.1 --- gradle.properties | 2 +- graphql-java-kickstart/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index d482aa8a..6a2d3649 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servle PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=20.2 -LIB_JACKSON_VER=2.15.0 +LIB_JACKSON_VER=2.15.1 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.26 SOURCE_COMPATIBILITY=17 diff --git a/graphql-java-kickstart/build.gradle b/graphql-java-kickstart/build.gradle index b6639991..4634c57d 100644 --- a/graphql-java-kickstart/build.gradle +++ b/graphql-java-kickstart/build.gradle @@ -14,6 +14,6 @@ dependencies { // JSON api "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER" api "com.fasterxml.jackson.core:jackson-annotations:$LIB_JACKSON_VER" - api "com.fasterxml.jackson.core:jackson-databind:2.15.0" + api "com.fasterxml.jackson.core:jackson-databind:2.15.1" api "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" } From 7cc2f6537df2cf8215885406e8928ce7e2f78a72 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 May 2023 01:32:00 +0000 Subject: [PATCH 47/72] fix(deps): update dependency org.projectlombok:lombok to v1.18.28 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6a2d3649..3536ec0a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,6 +10,6 @@ PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=20.2 LIB_JACKSON_VER=2.15.1 LIB_SLF4J_VER=2.0.7 -LIB_LOMBOK_VER=1.18.26 +LIB_LOMBOK_VER=1.18.28 SOURCE_COMPATIBILITY=17 TARGET_COMPATIBILITY=17 From 4cd2e0a14f37da43c3dde4bd97f21fd00922ae16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 12:48:24 +0000 Subject: [PATCH 48/72] chore(deps): update all non-major dependencies --- build.gradle | 2 +- gradle.properties | 4 ++-- graphql-java-kickstart/build.gradle | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index ca0f6f45..28634e72 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ buildscript { plugins { id "biz.aQute.bnd.builder" version "6.4.0" apply false - id "org.sonarqube" version "4.0.0.2929" + id "org.sonarqube" version "4.2.1.3168" id "jacoco" id "io.github.gradle-nexus.publish-plugin" version '1.3.0' } diff --git a/gradle.properties b/gradle.properties index 3536ec0a..12e6a39f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,8 +7,8 @@ PROJECT_LICENSE=MIT PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servlet/blob/master/LICENSE.md PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans -LIB_GRAPHQL_JAVA_VER=20.2 -LIB_JACKSON_VER=2.15.1 +LIB_GRAPHQL_JAVA_VER=20.4 +LIB_JACKSON_VER=2.15.2 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.28 SOURCE_COMPATIBILITY=17 diff --git a/graphql-java-kickstart/build.gradle b/graphql-java-kickstart/build.gradle index 4634c57d..a888793d 100644 --- a/graphql-java-kickstart/build.gradle +++ b/graphql-java-kickstart/build.gradle @@ -14,6 +14,6 @@ dependencies { // JSON api "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER" api "com.fasterxml.jackson.core:jackson-annotations:$LIB_JACKSON_VER" - api "com.fasterxml.jackson.core:jackson-databind:2.15.1" + api "com.fasterxml.jackson.core:jackson-databind:2.15.2" api "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" } From 7dc5b995ec795d943076f13f72d2bcbf41f42d20 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Jun 2023 13:36:28 +0000 Subject: [PATCH 49/72] fix(deps): update dependency com.google.guava:guava to v32 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 08d734e7..992a37a4 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -39,7 +39,7 @@ dependencies { testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" testImplementation "org.springframework:spring-test:6.0.9" testRuntimeOnly "org.springframework:spring-web:6.0.9" - testImplementation 'com.google.guava:guava:31.1-jre' + testImplementation 'com.google.guava:guava:32.0.1-jre' testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.0" testImplementation "jakarta.websocket:jakarta.websocket-client-api:2.1.0" From 81510b280b07d34c41956f791d357f929f6fb85e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 12:57:25 +0000 Subject: [PATCH 50/72] fix(deps): update all non-major dependencies to v6.0.10 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 992a37a4..ed0c8530 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,8 +37,8 @@ dependencies { testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation "org.springframework:spring-test:6.0.9" - testRuntimeOnly "org.springframework:spring-web:6.0.9" + testImplementation "org.springframework:spring-test:6.0.10" + testRuntimeOnly "org.springframework:spring-web:6.0.10" testImplementation 'com.google.guava:guava:32.0.1-jre' testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.0" From eb37b603919d3bd3902b3debad36894e71193ba3 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Tue, 20 Jun 2023 21:57:38 +0200 Subject: [PATCH 51/72] doc: update README.md describing all the released flavours --- README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7eb41698..b7645893 100644 --- a/README.md +++ b/README.md @@ -22,17 +22,53 @@ regarding GraphQL Java itself. We try to stay up to date with GraphQL Java as much as possible maintaining the retro-compatibility with javax and Springframework 5. -On each release we publish two flavours of this project: - - the main one is using `jakarta` and Springframework `6.*` - - the legacy one is using `javax` and Springframework `5.*` +On each release we publish three flavours of this project: + - [latest jakarta](#jakarta-and-springframework-6) + - [jakarta5](#jakarta5) + - [javax](#javax-and-springframework-5) + +All of them also supports legacy projects that can compile with older JDK versions: the minimum JDK +version supported is the `11`. -On maven central you can distinguish them from the version because the `javax` flavor has the -suffix `-javax`. +## Jakarta and Springframework 6.* +This is the main flavour using the latest version of `Jakarta` (currently the `6.*`) and the latest +version of `Springframework` (currently the `6.*`). All the codebase can be found in the branch: +`master` -Both of them also supports legacy projects that can compile with older JDK versions: the oldest -supported one is the `11`. +```xml + + com.graphql-java-kickstart + graphql-java-servlet + ${graphql-java-servlet.version} + +``` + +## Jakarta5 +This flavour use the `jakarta` version `5.*` and it is meant to be used for all the projects that +are already migrated to jakarta, but they are waiting that `jakarta6` will become more broadly used. +All the codebase can be found in the branch: `jakarta5` + +```xml + + com.graphql-java-kickstart + graphql-java-servlet-jakarta5 + ${graphql-java-servlet-jakarta5.version} + +``` + +## Javax and Springframework 5.* +This is the legacy flavour using the `javax` dependency and the version `5.*` of `Springframework` +(since it is still broadly used by a lot of projects). All the codebase can be found in the branch: +`master` + +```xml + + com.graphql-java-kickstart + graphql-java-servlet-javax + ${graphql-java-servlet.version} + +``` -See [gradle.properties](gradle.properties) to see currently supported versions. ## Installation and getting started From beb79dff58c822a55a04172356061272ac58d512 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jun 2023 08:51:57 +0000 Subject: [PATCH 52/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.13 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index ed0c8530..747d6cc5 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:9.1' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.12" + testImplementation "org.apache.groovy:groovy-all:4.0.13" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "cglib:cglib-nodep:3.3.0" testRuntimeOnly "org.objenesis:objenesis:3.3" From 1a8ca3cb4f6179fb4247c279ca8cc12edef94068 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jun 2023 14:36:26 +0000 Subject: [PATCH 53/72] fix(deps): update all non-major dependencies to v2.1.1 --- graphql-java-servlet/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 747d6cc5..a8b234bd 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -17,8 +17,8 @@ dependencies { // Servlet compileOnly "jakarta.servlet:jakarta.servlet-api:6.0.0" - compileOnly "jakarta.websocket:jakarta.websocket-api:2.1.0" - compileOnly "jakarta.websocket:jakarta.websocket-client-api:2.1.0" + compileOnly "jakarta.websocket:jakarta.websocket-api:2.1.1" + compileOnly "jakarta.websocket:jakarta.websocket-client-api:2.1.1" implementation "org.slf4j:slf4j-api:$LIB_SLF4J_VER" // OSGi @@ -41,6 +41,6 @@ dependencies { testRuntimeOnly "org.springframework:spring-web:6.0.10" testImplementation 'com.google.guava:guava:32.0.1-jre' testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" - testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.0" - testImplementation "jakarta.websocket:jakarta.websocket-client-api:2.1.0" + testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.1" + testImplementation "jakarta.websocket:jakarta.websocket-client-api:2.1.1" } From c30f5f165343be8dea4b8a4969ed6eec9f996834 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 02:23:57 +0000 Subject: [PATCH 54/72] fix(deps): update dependency com.graphql-java:graphql-java to v21 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ced13971..bf8f3f6e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ PROJECT_LICENSE=MIT PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servlet/blob/master/LICENSE.md PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans -LIB_GRAPHQL_JAVA_VER=20.4 +LIB_GRAPHQL_JAVA_VER=21.0 LIB_JACKSON_VER=2.15.2 LIB_SLF4J_VER=2.0.7 LIB_LOMBOK_VER=1.18.28 From ce3eb047435f2c2754a0a1b4fe9fea753555425e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 14:48:05 +0000 Subject: [PATCH 55/72] chore(deps): update actions/checkout action to v4 --- .github/workflows/pull-request.yml | 6 +++--- .github/workflows/release.yml | 12 ++++++------ .github/workflows/snapshot.yml | 12 ++++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 6f5bc79e..921ee3aa 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -8,7 +8,7 @@ jobs: name: Gradle Wrapper Validation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: gradle/wrapper-validation-action@v1 test: @@ -22,7 +22,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -56,7 +56,7 @@ jobs: env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 if: env.SONAR_TOKEN != null with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 386a307a..b99274e4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,7 +6,7 @@ jobs: name: Gradle Wrapper Validation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: gradle/wrapper-validation-action@v1 test-jakarta: @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -43,7 +43,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -80,7 +80,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -110,7 +110,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -149,7 +149,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 01009342..afd3d5a3 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -9,7 +9,7 @@ jobs: name: Gradle Wrapper Validation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: gradle/wrapper-validation-action@v1 test-jakarta: @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -46,7 +46,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -78,7 +78,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -108,7 +108,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Java uses: actions/setup-java@v3 with: @@ -143,7 +143,7 @@ jobs: needs: validation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 17 From 5a754535acecec39ff6db59c5a7318981d870b4d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 16:27:16 +0000 Subject: [PATCH 56/72] chore(deps): update actions/setup-java action to v4 --- .github/workflows/pull-request.yml | 4 ++-- .github/workflows/release.yml | 10 +++++----- .github/workflows/snapshot.yml | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 921ee3aa..2841212b 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -24,7 +24,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: ${{ matrix.java }} @@ -62,7 +62,7 @@ jobs: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 17 if: env.SONAR_TOKEN != null - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b99274e4..4e6bddf9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 @@ -45,7 +45,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 @@ -82,7 +82,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 11 @@ -112,7 +112,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 11 @@ -151,7 +151,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index afd3d5a3..f3044005 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -20,7 +20,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 @@ -48,7 +48,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 @@ -80,7 +80,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 11 @@ -110,7 +110,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 11 @@ -147,7 +147,7 @@ jobs: with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 From 8ef75403c4899d703f1573870fd74b4b8ce48629 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Tue, 19 Dec 2023 09:12:49 +0100 Subject: [PATCH 57/72] chore(deps): replace cglib with byte-buddy (#543) - Replaced cglib with byte-buddy since cglib is deprecated - Updated gradle version to 8.5 With these two bumps the build does not fail anymore --- gradle/wrapper/gradle-wrapper.properties | 3 ++- graphql-java-servlet/build.gradle | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8707e8b5..e6aba251 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index a8b234bd..f9931a5e 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -34,7 +34,7 @@ dependencies { // Unit testing testImplementation "org.apache.groovy:groovy-all:4.0.13" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" - testRuntimeOnly "cglib:cglib-nodep:3.3.0" + testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.9" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" testImplementation "org.springframework:spring-test:6.0.10" From 72fb360d623ca2415d810bb1eab3789a90763e63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 09:26:59 +0100 Subject: [PATCH 58/72] fix(deps): update all non-major dependencies (#533) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle | 2 +- gradle.properties | 8 ++++---- graphql-java-kickstart/build.gradle | 2 +- graphql-java-servlet/build.gradle | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 6312f30d..e1bc3bae 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ buildscript { plugins { id "biz.aQute.bnd.builder" version "6.4.0" apply false - id "org.sonarqube" version "4.2.1.3168" + id "org.sonarqube" version "4.4.1.3373" id "jacoco" id "io.github.gradle-nexus.publish-plugin" version '1.3.0' } diff --git a/gradle.properties b/gradle.properties index bf8f3f6e..c91093f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,10 +7,10 @@ PROJECT_LICENSE=MIT PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servlet/blob/master/LICENSE.md PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans -LIB_GRAPHQL_JAVA_VER=21.0 -LIB_JACKSON_VER=2.15.2 -LIB_SLF4J_VER=2.0.7 -LIB_LOMBOK_VER=1.18.28 +LIB_GRAPHQL_JAVA_VER=21.3 +LIB_JACKSON_VER=2.16.0 +LIB_SLF4J_VER=2.0.9 +LIB_LOMBOK_VER=1.18.30 # These constants are necessary to the automatic release of javax flavour LIB_JAVAX_SERVLET=4.0.1 LIB_JAVAX_WEBSOCKET=1.1 diff --git a/graphql-java-kickstart/build.gradle b/graphql-java-kickstart/build.gradle index a888793d..73d22f41 100644 --- a/graphql-java-kickstart/build.gradle +++ b/graphql-java-kickstart/build.gradle @@ -14,6 +14,6 @@ dependencies { // JSON api "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER" api "com.fasterxml.jackson.core:jackson-annotations:$LIB_JACKSON_VER" - api "com.fasterxml.jackson.core:jackson-databind:2.15.2" + api "com.fasterxml.jackson.core:jackson-databind:2.16.0" api "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" } diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index f9931a5e..2965a3e7 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,14 +32,14 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:9.1' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.13" + testImplementation "org.apache.groovy:groovy-all:4.0.16" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" - testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.9" + testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.10" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation "org.springframework:spring-test:6.0.10" - testRuntimeOnly "org.springframework:spring-web:6.0.10" - testImplementation 'com.google.guava:guava:32.0.1-jre' + testImplementation "org.springframework:spring-test:6.1.2" + testRuntimeOnly "org.springframework:spring-web:6.1.2" + testImplementation 'com.google.guava:guava:32.1.3-jre' testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.1" testImplementation "jakarta.websocket:jakarta.websocket-client-api:2.1.1" From c9d2c234d5377b9a0f6e23e638b0b91d6ba924ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:36:50 +0100 Subject: [PATCH 59/72] fix(deps): update dependency com.google.guava:guava to v33 (#542) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 2965a3e7..8e7363ed 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -39,7 +39,7 @@ dependencies { testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" testImplementation "org.springframework:spring-test:6.1.2" testRuntimeOnly "org.springframework:spring-web:6.1.2" - testImplementation 'com.google.guava:guava:32.1.3-jre' + testImplementation 'com.google.guava:guava:33.0.0-jre' testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.1" testImplementation "jakarta.websocket:jakarta.websocket-client-api:2.1.1" From b105690f544134d844e4333d68806838a5a3ce75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:57:05 +0000 Subject: [PATCH 60/72] fix(deps): update dependency net.bytebuddy:byte-buddy to v1.14.11 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 8e7363ed..eb7a6767 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -34,7 +34,7 @@ dependencies { // Unit testing testImplementation "org.apache.groovy:groovy-all:4.0.16" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" - testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.10" + testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.11" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" testImplementation "org.springframework:spring-test:6.1.2" From 471381489da290cf95960c4cd96e1a5cc17b0beb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 09:27:06 +0100 Subject: [PATCH 61/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.17 (#545) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index eb7a6767..5e8458ba 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:9.1' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.16" + testImplementation "org.apache.groovy:groovy-all:4.0.17" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.11" testRuntimeOnly "org.objenesis:objenesis:3.3" From e3fb2c918722c30118ca8fd0b5eba8102d979a6f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 24 Dec 2023 06:58:30 +0000 Subject: [PATCH 62/72] fix(deps): update all non-major dependencies to v2.16.1 --- gradle.properties | 2 +- graphql-java-kickstart/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index c91093f3..5134de37 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-java-servle PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=21.3 -LIB_JACKSON_VER=2.16.0 +LIB_JACKSON_VER=2.16.1 LIB_SLF4J_VER=2.0.9 LIB_LOMBOK_VER=1.18.30 # These constants are necessary to the automatic release of javax flavour diff --git a/graphql-java-kickstart/build.gradle b/graphql-java-kickstart/build.gradle index 73d22f41..aca09040 100644 --- a/graphql-java-kickstart/build.gradle +++ b/graphql-java-kickstart/build.gradle @@ -14,6 +14,6 @@ dependencies { // JSON api "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER" api "com.fasterxml.jackson.core:jackson-annotations:$LIB_JACKSON_VER" - api "com.fasterxml.jackson.core:jackson-databind:2.16.0" + api "com.fasterxml.jackson.core:jackson-databind:2.16.1" api "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" } From 321214aed2ff9ffb6ecb97a399d591740dfb48ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Dec 2023 22:58:15 +0000 Subject: [PATCH 63/72] fix(deps): update all non-major dependencies to v2.0.10 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5134de37..89f5e078 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=21.3 LIB_JACKSON_VER=2.16.1 -LIB_SLF4J_VER=2.0.9 +LIB_SLF4J_VER=2.0.10 LIB_LOMBOK_VER=1.18.30 # These constants are necessary to the automatic release of javax flavour LIB_JAVAX_SERVLET=4.0.1 From 3be19070e61be3b89deaf150437e22df0490fb7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 23:11:25 +0000 Subject: [PATCH 64/72] fix(deps): update all non-major dependencies to v2.0.11 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 89f5e078..ae0678e3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=21.3 LIB_JACKSON_VER=2.16.1 -LIB_SLF4J_VER=2.0.10 +LIB_SLF4J_VER=2.0.11 LIB_LOMBOK_VER=1.18.30 # These constants are necessary to the automatic release of javax flavour LIB_JAVAX_SERVLET=4.0.1 From eee4d25e3cb2cca052b15a843e850a71f6897c4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:35:44 +0000 Subject: [PATCH 65/72] fix(deps): update all non-major dependencies to v6.1.3 --- graphql-java-servlet/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 5e8458ba..f3cfd581 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -37,8 +37,8 @@ dependencies { testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.11" testRuntimeOnly "org.objenesis:objenesis:3.3" testImplementation "org.slf4j:slf4j-simple:$LIB_SLF4J_VER" - testImplementation "org.springframework:spring-test:6.1.2" - testRuntimeOnly "org.springframework:spring-web:6.1.2" + testImplementation "org.springframework:spring-test:6.1.3" + testRuntimeOnly "org.springframework:spring-web:6.1.3" testImplementation 'com.google.guava:guava:33.0.0-jre' testImplementation "jakarta.servlet:jakarta.servlet-api:6.0.0" testImplementation "jakarta.websocket:jakarta.websocket-api:2.1.1" From dc4bf67d05ab11e70e5364412dc91f2b4f05f94a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 06:51:40 +0000 Subject: [PATCH 66/72] fix(deps): update dependency org.apache.groovy:groovy-all to v4.0.18 --- graphql-java-servlet/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index f3cfd581..431dae5b 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -32,7 +32,7 @@ dependencies { testImplementation 'io.github.graphql-java:graphql-java-annotations:9.1' // Unit testing - testImplementation "org.apache.groovy:groovy-all:4.0.17" + testImplementation "org.apache.groovy:groovy-all:4.0.18" testImplementation "org.spockframework:spock-core:2.3-groovy-4.0" testRuntimeOnly "net.bytebuddy:byte-buddy:1.14.11" testRuntimeOnly "org.objenesis:objenesis:3.3" From 201f9c4cd0608ad6313afa2ed8375e25e805547f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 17:39:51 +0100 Subject: [PATCH 67/72] chore(deps): update actions/cache action to v4 (#551) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/pull-request.yml | 6 +++--- .github/workflows/release.yml | 10 +++++----- .github/workflows/snapshot.yml | 12 ++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 2841212b..2b27e499 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -29,7 +29,7 @@ jobs: distribution: 'zulu' java-version: ${{ matrix.java }} - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: ${{ matrix.java }} with: @@ -68,14 +68,14 @@ jobs: java-version: 17 - name: Cache SonarCloud packages if: env.SONAR_TOKEN != null - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Gradle packages if: env.SONAR_TOKEN != null - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4e6bddf9..0b79973e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,7 +22,7 @@ jobs: distribution: 'zulu' java-version: 17 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 17 with: @@ -50,7 +50,7 @@ jobs: distribution: 'zulu' java-version: 17 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 17 with: @@ -87,7 +87,7 @@ jobs: distribution: 'zulu' java-version: 11 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 11 with: @@ -118,7 +118,7 @@ jobs: java-version: 11 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 11 with: @@ -156,7 +156,7 @@ jobs: distribution: 'zulu' java-version: 17 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 17 with: diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index f3044005..715a590d 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -25,7 +25,7 @@ jobs: distribution: 'zulu' java-version: 17 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 17 with: @@ -53,7 +53,7 @@ jobs: distribution: 'zulu' java-version: 17 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 17 with: @@ -85,7 +85,7 @@ jobs: distribution: 'zulu' java-version: 11 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 11 with: @@ -115,7 +115,7 @@ jobs: distribution: 'zulu' java-version: 11 - name: Cache Gradle - uses: actions/cache@v3 + uses: actions/cache@v4 env: java-version: 11 with: @@ -152,13 +152,13 @@ jobs: distribution: 'zulu' java-version: 17 - name: Cache SonarCloud packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Gradle packages - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} From 7140858dee8cb0dd5d7c41d6f5b3ad3b51803469 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 22:05:30 +0000 Subject: [PATCH 68/72] chore(deps): update gradle/wrapper-validation-action action to v2 --- .github/workflows/pull-request.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/snapshot.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 2b27e499..ee349157 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: gradle/wrapper-validation-action@v1 + - uses: gradle/wrapper-validation-action@v2 test: name: Test run diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0b79973e..23a7a341 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: gradle/wrapper-validation-action@v1 + - uses: gradle/wrapper-validation-action@v2 test-jakarta: name: Test run jakarta diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 715a590d..e68b3d1a 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: gradle/wrapper-validation-action@v1 + - uses: gradle/wrapper-validation-action@v2 test-jakarta: name: Test run jakarta From 47a4076796b9e74523929f26f97f8b721a5a5cd6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 22:11:36 +0100 Subject: [PATCH 69/72] chore(deps): update dependency gradle to v8.6 (#554) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Federico Rispo --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e6aba251..2ea3535d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 0501d351dc2770073f5441fd20f58e4b80379385 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 03:17:04 +0000 Subject: [PATCH 70/72] fix(deps): update all non-major dependencies to v2.0.12 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ae0678e3..4a947b7e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ PROJECT_DEV_ID=oliemansm PROJECT_DEV_NAME=Michiel Oliemans LIB_GRAPHQL_JAVA_VER=21.3 LIB_JACKSON_VER=2.16.1 -LIB_SLF4J_VER=2.0.11 +LIB_SLF4J_VER=2.0.12 LIB_LOMBOK_VER=1.18.30 # These constants are necessary to the automatic release of javax flavour LIB_JAVAX_SERVLET=4.0.1 From 1b5ca47c85c22648fdb1d5a579ef99e9f23dce24 Mon Sep 17 00:00:00 2001 From: Federico Rispo Date: Fri, 9 Feb 2024 12:20:36 +0100 Subject: [PATCH 71/72] chore: bump version to 15.2.0 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4a947b7e..8cc062b7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=15.1.0-SNAPSHOT +version=15.2.0-SNAPSHOT group=com.graphql-java-kickstart PROJECT_NAME=graphql-java-servlet PROJECT_DESC=GraphQL Java Kickstart From 879137262a9f772f8390dcc4d830b32294ffe2a0 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 9 Feb 2024 11:29:07 +0000 Subject: [PATCH 72/72] Update version for release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8cc062b7..fca679ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=15.2.0-SNAPSHOT +version=15.2.0 group=com.graphql-java-kickstart PROJECT_NAME=graphql-java-servlet PROJECT_DESC=GraphQL Java Kickstart