diff --git a/build.gradle b/build.gradle index d1966db3..af14b524 100644 --- a/build.gradle +++ b/build.gradle @@ -21,10 +21,8 @@ buildscript { repositories { mavenLocal() mavenCentral() - jcenter() -// maven { url "https://dl.bintray.com/graphql-java-kickstart/releases" } -// maven { url "https://plugins.gradle.org/m2/" } -// maven { url 'https://repo.spring.io/plugins-release' } + maven { url "https://plugins.gradle.org/m2/" } + maven { url 'https://repo.spring.io/plugins-release' } } dependencies { classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.+" @@ -36,14 +34,13 @@ plugins { id 'net.researchgate.release' version '2.7.0' id 'io.franzbecker.gradle-lombok' version '3.2.0' apply false id "com.jfrog.artifactory" version "4.11.0" apply false - id "biz.aQute.bnd.builder" version "5.0.0" apply false + id "biz.aQute.bnd.builder" version "6.3.1" apply false } subprojects { apply plugin: 'idea' apply plugin: 'java' // 要执行子build.gradle中的uploadArchives,得加入maven插件 - apply plugin: 'maven' apply plugin: 'maven-publish' apply plugin: "com.jfrog.bintray" apply plugin: 'io.franzbecker.gradle-lombok' @@ -52,9 +49,7 @@ subprojects { repositories { mavenLocal() mavenCentral() - jcenter() - maven { url "https://dl.bintray.com/graphql-java-kickstart/releases" } - maven { url "https://oss.jfrog.org/artifactory/oss-snapshot-local" } + maven { url "https://oss.sonatype.org/content/repositories/snapshots" } maven { url "https://repo.spring.io/libs-milestone" } } @@ -73,133 +68,42 @@ subprojects { compileJava.dependsOn(processResources) lombok { - version = "1.18.4" + version = "1.18.24" sha256 = "" } + task sourcesJar(type: Jar) { + from sourceSets.main.allJava + archiveClassifier = 'sources' + } - if (!it.name.startsWith('example')) { - - jar { - from "LICENSE.md" - } - - task sourcesJar(type: Jar) { - dependsOn classes - classifier 'sources' - from sourceSets.main.allSource - } - - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir - } - - artifacts { - archives sourcesJar - archives javadocJar - } - + afterEvaluate { publishing { publications { - mainProjectPublication(MavenPublication) { - version version - from components.java - - artifact sourcesJar { - classifier "sources" - } - artifact javadocJar { - classifier "javadoc" - } - - pom.withXml { - asNode().children().last() + { - resolveStrategy = Closure.DELEGATE_FIRST - name PROJECT_NAME - description 'relay.js-compatible GraphQL servlet' - url 'https://github.com/graphql-java-kickstart/graphql-java-servlet' - inceptionYear '2016' - - scm { - url 'https://github.com/graphql-java-kickstart/graphql-java-servlet' - connection 'scm:https://github.com/graphql-java-kickstart/graphql-java-servlet.git' - developerConnection 'scm:git://github.com/graphql-java-kickstart/graphql-java-servlet.git' - } - - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - - developers { - developer { - id 'yrashk' - name 'Yurii Rashkovskii' - email 'yrashk@gmail.com' - } - developer { - id 'apottere' - name 'Andrew Potter' - email 'apottere@gmail.com' - } - } + snapshot(MavenPublication) { + versionMapping { + usage('java-api') { + fromResolutionOf('runtimeClasspath') + } + usage('java-runtime') { + fromResolutionResult() } - // https://discuss.gradle.org/t/maven-publish-plugin-generated-pom-making-dependency-scope-runtime/7494/10 - asNode().dependencies.'*'.findAll() { - it.scope.text() == 'runtime' && project.configurations.compile.allDependencies.find { dep -> - dep.name == it.artifactId.text() - } - }.each { it.scope*.value = 'compile'} } + groupId = 'com.graphql-java-kickstart' + version = version + artifact sourcesJar + from components.java } } - } - - bintray { - user = System.env.BINTRAY_USER ?: project.findProperty('BINTRAY_USER') ?: '' - key = System.env.BINTRAY_PASS ?: project.findProperty('BINTRAY_PASS') ?: '' - publications = ['mainProjectPublication'] - publish = true - pkg { - repo = 'releases' - name = PROJECT_NAME - desc = PROJECT_DESC - licenses = [PROJECT_LICENSE] - vcsUrl = PROJECT_GIT_REPO_URL - userOrg = 'graphql-java-kickstart' - version { - name = project.version - mavenCentralSync { - close = '1' + repositories { + maven { + name = "snapshot" + credentials { + username = System.env.NEXUS_USERNAME ?: project.findProperty('NEXUS_PASSWORD') ?: '' + password = System.env.NEXUS_PASSWORD ?: project.findProperty('NEXUS_PASSWORD') ?: '' } - } - } - } - - artifactory { - contextUrl = 'https://oss.jfrog.org' - publish { - repository { - repoKey = 'oss-snapshot-local' - - username = System.env.BINTRAY_USER ?: System.getProperty('BINTRAY_USER') - password = System.env.BINTRAY_PASS ?: System.getProperty('BINTRAY_PASS') - - maven = true - } - defaults { - publications 'maven' - publishArtifacts = true - publishPom = true - } - } - resolve { - repository { - repoKey = 'jcenter' + allowInsecureProtocol true + url = 'https://nexus.8btc-ops.com/repository/maven-snapshots/' } } } diff --git a/gradle.properties b/gradle.properties index 1f95087e..c63c09f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version = 9.1.0.OnePiece.1 +version = 9.1.0.2-SNAPSHOT group = com.graphql-java-kickstart PROJECT_NAME = graphql-java-servlet @@ -12,7 +12,9 @@ PROJECT_DEV_NAME = Andrew Potter LIB_GRAPHQL_JAVA_VER = 14.1 LIB_JACKSON_VER = 2.10.0 -SOURCE_COMPATIBILITY = 1.8 -TARGET_COMPATIBILITY = 1.8 +SOURCE_COMPATIBILITY = 17 +TARGET_COMPATIBILITY = 17 GRADLE_WRAPPER_VER = 6.0.1 +LIB_SLF4J_VER = 2.0.2 +systemProp.org.gradle.internal.publish.checksums.insecure=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5f8ff30a..cf4fad0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Thu Nov 14 18:53:34 CET 2019 -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/graphql-java-kickstart/build.gradle b/graphql-java-kickstart/build.gradle index 72dc7c6f..a6d318a3 100644 --- a/graphql-java-kickstart/build.gradle +++ b/graphql-java-kickstart/build.gradle @@ -4,13 +4,15 @@ jar { bndfile = 'bnd.bnd' } +apply plugin: 'java-library-distribution' + dependencies { // GraphQL - compile "com.graphql-java:graphql-java:$LIB_GRAPHQL_JAVA_VER" + api "com.graphql-java:graphql-java:$LIB_GRAPHQL_JAVA_VER" // JSON - compile "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER" - compile "com.fasterxml.jackson.core:jackson-annotations:$LIB_JACKSON_VER" - compile "com.fasterxml.jackson.core:jackson-databind:$LIB_JACKSON_VER" - compile "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" -} + 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:$LIB_JACKSON_VER" + api "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$LIB_JACKSON_VER" +} \ No newline at end of file diff --git a/graphql-java-servlet/build.gradle b/graphql-java-servlet/build.gradle index 9c1c794d..fce7290d 100644 --- a/graphql-java-servlet/build.gradle +++ b/graphql-java-servlet/build.gradle @@ -1,6 +1,5 @@ buildscript { repositories { - jcenter() mavenCentral() } } @@ -17,8 +16,10 @@ dependencies { api(project(':graphql-java-kickstart')) // Servlet - compile 'javax.servlet:javax.servlet-api:3.1.0' - compile '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 compileOnly 'org.osgi:org.osgi.core:6.0.0' @@ -28,15 +29,15 @@ dependencies { compileOnly 'org.osgi:org.osgi.service.metatype.annotations:1.3.0' compileOnly 'org.osgi:org.osgi.annotation:6.0.0' - testCompile 'io.github.graphql-java:graphql-java-annotations:5.2' + testImplementation 'io.github.graphql-java:graphql-java-annotations:5.2' // Unit testing - testCompile "org.codehaus.groovy:groovy-all:2.4.1" - testCompile "org.spockframework:spock-core:1.1-groovy-2.4-rc-3" - testRuntime "cglib:cglib-nodep:3.2.4" - testRuntime "org.objenesis:objenesis:2.5.1" - testCompile 'org.slf4j:slf4j-simple:1.7.24' - testCompile 'org.springframework:spring-test:4.3.7.RELEASE' - testRuntime 'org.springframework:spring-web:4.3.7.RELEASE' - testCompile 'com.google.guava:guava:24.1.1-jre' + testImplementation "org.apache.groovy:groovy-all:4.0.6" + 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.2' + testRuntimeOnly 'org.springframework:spring-web:6.0.2' + testImplementation 'com.google.guava:guava:31.1-jre' } \ No newline at end of file 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 4a054703..0c0df77a 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 @@ -17,11 +17,11 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; -import javax.servlet.AsyncContext; -import javax.servlet.Servlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.Servlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; /** 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 bfa669a4..328d4051 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.Iterator; 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; @RequiredArgsConstructor 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 4a765e4e..ab532f4a 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 bda36185..33e16685 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 ea000fa8..93fa283b 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 a5bc51ee..d7283147 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 84c5a399..e59c2f73 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 3c2b6b54..192fcdb8 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 98148d57..30c97696 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 758d2f8e..64a29f52 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,7 +1,7 @@ package graphql.kickstart.servlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; 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 f040747d..b71fa8f8 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 @@ -9,8 +9,8 @@ import graphql.kickstart.execution.input.GraphQLInvocationInput; import graphql.kickstart.execution.input.GraphQLSingleInvocationInput; 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/OsgiGraphQLHttpServlet.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/OsgiGraphQLHttpServlet.java index 2826a017..8242872e 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 @@ -50,7 +50,7 @@ import java.util.concurrent.TimeUnit; @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) 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 7139b2fa..105dc69d 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 @@ -4,8 +4,8 @@ import graphql.kickstart.execution.GraphQLObjectMapper; import java.io.IOException; import java.util.Objects; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; 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 620c38f9..16154141 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 @@ -7,9 +7,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 417cad69..d506bc61 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 @@ -6,8 +6,8 @@ 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; @RequiredArgsConstructor class SingleQueryResponseWriter implements QueryResponseWriter { 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 6dd80140..32659acd 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 41589cde..5e3d0d9e 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; public class ApolloScalars { 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 2e656f74..681b33db 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 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 788f398a..e609bcd8 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/config/DefaultGraphQLSchemaServletProvider.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/config/DefaultGraphQLSchemaServletProvider.java index 4aa8f25a..67f76e05 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 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 c3efdd46..c9b378b0 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 2190aa5f..51bb28e4 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 org.dataloader.DataLoaderRegistry; import javax.security.auth.Subject; -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 java.util.List; import java.util.Map; import java.util.stream.Collectors; 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 7aa93f88..84dd0655 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 @@ -2,10 +2,10 @@ import graphql.kickstart.execution.context.DefaultGraphQLContextBuilder; import graphql.kickstart.execution.context.GraphQLContext; -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. 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 bb76b409..99a0aafe 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 @@ -2,8 +2,8 @@ import graphql.kickstart.execution.context.DefaultGraphQLContext; import javax.security.auth.Subject; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; import org.dataloader.DataLoaderRegistry; public class DefaultGraphQLWebSocketContext extends DefaultGraphQLContext implements GraphQLWebSocketContext { 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 0e8e9adb..5d8db285 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 @@ -1,9 +1,9 @@ package graphql.kickstart.servlet.context; import graphql.kickstart.execution.context.GraphQLContext; -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 java.util.List; import java.util.Map; 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 41e1ed39..d9d8ac1b 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.GraphQLContext; 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 4654f567..4f3751ad 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.GraphQLContext; -import javax.websocket.Session; -import javax.websocket.server.HandshakeRequest; +import jakarta.websocket.Session; +import jakarta.websocket.server.HandshakeRequest; import java.util.Optional; public interface GraphQLWebSocketContext extends GraphQLContext { 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 03550a23..26bf03b4 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 d26886c2..f13d7404 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 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 c929ba10..109e4e3e 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 2082cd54..27500d0a 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 0e825e90..b11f58f3 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 1c261168..15236f5e 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 @@ -17,10 +17,10 @@ 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 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 73bc4a3e..fdc69ca4 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 @@ -2,8 +2,8 @@ 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. 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 78dc46f7..8d963d5f 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 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 a7dec57b..36f012ec 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 ad9c890e..b59b04a4 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 2c3aebaa..a3e98bea 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/AbstractGraphQLHttpServletSpec.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy index deb610ab..f6a41839 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 @@ -5,9 +5,9 @@ import graphql.Scalars import graphql.execution.ExecutionStepInfo import graphql.execution.MergedField import graphql.execution.reactive.SingleSubscriberPublisher +import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory import graphql.language.Field import graphql.schema.GraphQLNonNull -import graphql.kickstart.servlet.input.GraphQLInvocationInputFactory import org.springframework.mock.web.MockHttpServletRequest import org.springframework.mock.web.MockHttpServletResponse import spock.lang.Shared @@ -127,23 +127,24 @@ class AbstractGraphQLHttpServletSpec extends Specification { getResponseContent().data.echo == "special char á" } - def "async query over HTTP GET starts async request"() { + def "disabling async support on request over HTTP GET does not start async request"() { setup: servlet = TestUtils.createDefaultServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env -> - AtomicReference> publisherRef = new AtomicReference<>(); + AtomicReference> publisherRef = new AtomicReference<>() publisherRef.set(new SingleSubscriberPublisher<>({ subscription -> - publisherRef.get().offer(env.arguments.arg) + publisherRef.get().offer((String) env.arguments.arg) publisherRef.get().noMoreData() })) return publisherRef.get() - }, true) + }) request.addParameter('query', 'query { echo(arg:"test") }') + request.setAsyncSupported(false) when: servlet.doGet(request, response) then: - request.asyncStarted == true + request.asyncContext == null } def "query over HTTP GET with variables returns data"() { @@ -313,27 +314,6 @@ class AbstractGraphQLHttpServletSpec extends Specification { getBatchedResponseContent()[1].data.echo == "test" } - def "deferred query over HTTP GET"() { - setup: - request.addParameter('query', 'query { echo(arg:"test") @defer }') - - when: - servlet.doGet(request, response) - - then: - response.getStatus() == STATUS_OK - response.getContentType() == CONTENT_TYPE_SERVER_SENT_EVENTS - getSubscriptionResponseContent()[0].data.echo == null - - when: - subscriptionLatch.await(1, TimeUnit.SECONDS) - - then: - def content = getSubscriptionResponseContent() - content[1].data == "test" - content[1].path == ["echo"] - } - def "Batch Execution Handler allows limiting batches and sending error messages."() { setup: servlet = TestUtils.createBatchCustomizedServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env -> @@ -442,25 +422,45 @@ class AbstractGraphQLHttpServletSpec extends Specification { getResponseContent().data.echo == "test" } - def "async query over HTTP POST starts async request"() { + def "query over HTTP POST multiline body returns data"() { + setup: + request.setContent(""" + query { object { +a +b + } }""".bytes) + request.setMethod("POST") + request.contentType = "application/graphql" + + when: + servlet.doPost(request, response) + + then: + response.getStatus() == STATUS_OK + response.getContentType() == CONTENT_TYPE_JSON_UTF8 + getResponseContent().data.object.b == null + } + + def "disabling async support on request over HTTP POST does not start async request"() { setup: servlet = TestUtils.createDefaultServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env -> - AtomicReference> publisherRef = new AtomicReference<>(); + AtomicReference> publisherRef = new AtomicReference<>() publisherRef.set(new SingleSubscriberPublisher<>({ subscription -> - publisherRef.get().offer(env.arguments.arg) + publisherRef.get().offer((String) env.arguments.arg) publisherRef.get().noMoreData() })) return publisherRef.get() - }, true) + }) request.setContent(mapper.writeValueAsBytes([ query: 'query { echo(arg:"test") }' ])) + request.setAsyncSupported(false) when: servlet.doPost(request, response) then: - request.asyncStarted == true + request.asyncContext == null } def "query over HTTP POST body with graphql contentType returns data"() { @@ -755,6 +755,22 @@ class AbstractGraphQLHttpServletSpec extends Specification { getResponseContent().data.echoFiles == ["test", "test again"] } + def "errors while accessing file from the request"() { + setup: + request = Spy(MockHttpServletRequest) + request.setMethod("POST") + request.setContentType("multipart/form-data, boundary=test") + // See https://github.com/apache/tomcat/blob/main/java/org/apache/catalina/connector/Request.java#L2775...L2791 + request.getParts() >> { throw new IllegalStateException() } + + when: + servlet.doPost(request, response) + + then: + response.getStatus() == STATUS_BAD_REQUEST + response.getContentLength() == 0 + } + def "batched query over HTTP POST body returns data"() { setup: request.setContent('[{ "query": "query { echo(arg:\\"test\\") }" }, { "query": "query { echo(arg:\\"test\\") }" }]'.bytes) @@ -1098,69 +1114,13 @@ class AbstractGraphQLHttpServletSpec extends Specification { getSubscriptionResponseContent()[1].data.echo == "Second\n\ntest" } - def "defer query over HTTP POST"() { - setup: - request.setContent('{"query": "subscription Subscription($arg: String!) { echo(arg: $arg) }", "operationName": "Subscription", "variables": {"arg": "test"}}'.bytes) - request.setAsyncSupported(true) - request.setMethod("POST") - - when: - servlet.doPost(request, response) - then: - response.getStatus() == STATUS_OK - response.getContentType() == CONTENT_TYPE_SERVER_SENT_EVENTS - - when: - subscriptionLatch.await(1, TimeUnit.SECONDS) - then: - getSubscriptionResponseContent()[0].data.echo == "First\n\ntest" - getSubscriptionResponseContent()[1].data.echo == "Second\n\ntest" - } - - def "deferred query that takes longer than initial results, should still be sent second"() { - setup: - servlet = TestUtils.createDefaultServlet({ env -> - if (env.getField().name == "a") { - Thread.sleep(1000) - } - env.arguments.arg - }) - request.setContent(mapper.writeValueAsBytes([ - query: ''' - { - object { - a(arg: "Hello") - b(arg: "World") @defer - } - } - ''' - ])) - request.setAsyncSupported(true) - request.setMethod("POST") - - when: - servlet.doPost(request, response) - - then: - response.getStatus() == STATUS_OK - response.getContentType() == CONTENT_TYPE_SERVER_SENT_EVENTS - getSubscriptionResponseContent()[0].data.object.a == "Hello" // a has a Thread.sleep - - when: - subscriptionLatch.await(1, TimeUnit.SECONDS) - - then: - def content = getSubscriptionResponseContent() - content[1].data == "World" - content[1].path == ["object", "b"] - } - def "errors before graphql schema execution return internal server error"() { setup: - servlet = SimpleGraphQLHttpServlet.newBuilder(GraphQLInvocationInputFactory.newBuilder { + GraphQLConfiguration configuration = GraphQLConfiguration.with(GraphQLInvocationInputFactory.newBuilder { throw new TestException() }.build()).build() - servlet.init(null) + servlet = GraphQLHttpServlet.with(configuration) + servlet.init() request.setPathInfo('/schema.json') @@ -1168,8 +1128,7 @@ class AbstractGraphQLHttpServletSpec extends Specification { servlet.doGet(request, response) then: - noExceptionThrown() - response.getStatus() == STATUS_ERROR + response.getStatus() == STATUS_BAD_REQUEST } def "errors while data fetching are masked in the response"() { 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 9f3a49b4..815ecb17 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 @@ -20,10 +20,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/SingleQueryResponseWriterTest.groovy b/graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy index 4c7a6ca9..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 @@ -3,38 +3,37 @@ package graphql.kickstart.servlet import com.fasterxml.jackson.databind.ObjectMapper import graphql.ExecutionResultImpl import graphql.kickstart.execution.GraphQLObjectMapper -import org.codehaus.groovy.runtime.StringBufferWriter import spock.lang.Specification import spock.lang.Unroll -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 { @Unroll def "should write utf8 results into the response with content #result"() { given: - def graphQLObjectMapperMock = GraphQLObjectMapper.newBuilder().withObjectMapperProvider({ new ObjectMapper() }).build() - graphQLObjectMapperMock.getJacksonMapper() >> new ObjectMapper() + def graphQLObjectMapperMock = GraphQLObjectMapper.newBuilder().withObjectMapperProvider({ new ObjectMapper() }).build() + graphQLObjectMapperMock.getJacksonMapper() >> new ObjectMapper() - def requestMock = Mock(HttpServletRequest) - def responseMock = Mock(HttpServletResponse) + def requestMock = Mock(HttpServletRequest) + def responseMock = Mock(HttpServletResponse) + responseMock.getOutputStream() >> Mock(ServletOutputStream) - def responseContentBuffer = new StringBuffer() - responseMock.getWriter() >> new PrintWriter(new StringBufferWriter(responseContentBuffer)) - 1 * responseMock.setContentLength(expectedContentLenght) - 1 * responseMock.setCharacterEncoding("UTF-8") + 1 * responseMock.setContentLength(expectedContentLenght) + 1 * responseMock.setCharacterEncoding(StandardCharsets.UTF_8.name()) + 1 * responseMock.getOutputStream().write(expectedResponseContent.getBytes(StandardCharsets.UTF_8)) expect: - def writer = new SingleQueryResponseWriter(new ExecutionResultImpl(result, []), graphQLObjectMapperMock) - writer.write(requestMock, responseMock) - - responseContentBuffer.toString() == expectedResponseContent + def writer = new SingleQueryResponseWriter(new ExecutionResultImpl(result, []), graphQLObjectMapperMock) + writer.write(requestMock, responseMock) where: - result || expectedContentLenght | expectedResponseContent - [testValue: "abcde"] || 30 | """{"data":{"testValue":"abcde"}}""" - [testValue: "äöüüöß"] || 37 | """{"data":{"testValue":"äöüüöß"}}""" + result || expectedContentLenght | expectedResponseContent + [testValue: "abcde"] || 30 | """{"data":{"testValue":"abcde"}}""" + [testValue: "äöüüöß"] || 37 | """{"data":{"testValue":"äöüüöß"}}""" } } 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 0ec38690..fcefd120 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 @@ -4,8 +4,8 @@ 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 639fd2dc..1e8367e6 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 import java.nio.charset.StandardCharsets /**