Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Spring 6 HTTP interface #5370

Merged
merged 17 commits into from
Mar 26, 2024
Merged
9 changes: 9 additions & 0 deletions dependencies.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1191,9 +1191,18 @@ module = "org.slf4j:slf4j-api"
version.ref = "slf4j2"
javadocs = "https://www.javadoc.io/doc/org.slf4j/slf4j-api/2.0.7/"

[libraries.spring6-context]
module = "org.springframework:spring-context"
version.ref = "spring6"
[libraries.spring6-test]
module = "org.springframework:spring-test"
version.ref = "spring6"
[libraries.spring6-web]
module = "org.springframework:spring-web"
version.ref = "spring6"
[libraries.spring6-webflux]
module = "org.springframework:spring-webflux"
version.ref = "spring6"

[libraries.spring-boot2-actuator-autoconfigure]
module = "org.springframework.boot:spring-boot-actuator-autoconfigure"
Expand Down
1 change: 1 addition & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ includeWithFlags ':spring:boot3-autoconfigure', 'java17', 'publish', 'r
includeWithFlags ':spring:boot3-starter', 'java17', 'publish', 'relocate'
includeWithFlags ':spring:boot3-webflux-autoconfigure', 'java17', 'publish', 'relocate'
includeWithFlags ':spring:boot3-webflux-starter', 'java17', 'publish', 'relocate'
includeWithFlags ':spring:spring6', 'java17', 'publish', 'relocate'

includeWithFlags ':dropwizard1', 'java', 'publish', 'relocate', 'no_aggregation'
includeWithFlags ':dropwizard2', 'java', 'publish', 'relocate'
Expand Down
11 changes: 11 additions & 0 deletions spring/boot2-webflux-autoconfigure/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,20 @@ task copyBoot3Sources(type: Copy) {
into "${project.ext.genSrcDir}/main/java"
}

task copySpring6Sources(type: Copy) {
from("${rootProject.projectDir}/spring/spring6/src/main/java") {
include '**/ArmeriaClientHttpRequest.java'
include '**/ArmeriaClientHttpResponse.java'
include '**/DataBufferFactoryWrapper.java'
}

into "${project.ext.genSrcDir}/main/java"
}

// Copy the main and test sources from ':spring:boot3-webflux-autoconfigure'.
task generateSources(type: Copy) {
dependsOn(tasks.copyBoot3Sources)
dependsOn(tasks.copySpring6Sources)
from("${"${rootProject.projectDir}/spring/boot3-webflux-autoconfigure"}/src") {
exclude '**/AbstractServerHttpResponseVersionSpecific.java'
exclude '**/AbstractServerHttpRequestVersionSpecific.java'
Expand Down
1 change: 1 addition & 0 deletions spring/boot3-webflux-autoconfigure/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ dependencies {
// To let a user choose between thrift and thrift0.9.
compileOnly project(':thrift0.18')
implementation project(':logback')
implementation project(':spring:spring6')

api libs.spring.boot3.starter.webflux
api libs.jakarta.inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClient.Builder;

import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

/**
* An auto-configuration for Armeria-based {@link WebClient}.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
import com.linecorp.armeria.client.WebClient;
import com.linecorp.armeria.client.WebClientBuilder;
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.spring.internal.client.ArmeriaClientHttpRequest;
import com.linecorp.armeria.spring.internal.client.ArmeriaClientHttpResponse;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import reactor.core.publisher.Mono;

Expand Down Expand Up @@ -105,7 +108,7 @@ private ArmeriaClientHttpRequest createRequest(HttpMethod method, URI uri) {
checkArgument(!Strings.isNullOrEmpty(path), "path is undefined: %s", uri);
final String pathAndQuery = Strings.isNullOrEmpty(query) ? path : path + '?' + query;

return new ArmeriaClientHttpRequest(webClient, method, pathAndQuery, uri, factoryWrapper);
return new ArmeriaClientHttpRequest(webClient, method, pathAndQuery, uri, factoryWrapper, null);
}

private CompletableFuture<ArmeriaClientHttpResponse> createResponse(HttpResponse response) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.linecorp.armeria.common.MediaType;
import com.linecorp.armeria.common.annotation.Nullable;
import com.linecorp.armeria.server.ServiceRequestContext;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import reactor.core.publisher.Mono;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import com.linecorp.armeria.spring.ArmeriaSettings;
import com.linecorp.armeria.spring.InternalServices;
import com.linecorp.armeria.spring.MetricCollectingServiceConfigurator;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import io.micrometer.core.instrument.MeterRegistry;
import io.netty.handler.ssl.ClientAuth;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import com.linecorp.armeria.common.RequestTarget;
import com.linecorp.armeria.common.annotation.Nullable;
import com.linecorp.armeria.server.ServiceRequestContext;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import io.netty.handler.codec.http.cookie.ServerCookieDecoder;
import reactor.core.publisher.Flux;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import com.linecorp.armeria.common.stream.AbortedStreamException;
import com.linecorp.armeria.common.stream.CancelledSubscriptionException;
import com.linecorp.armeria.server.ServiceRequestContext;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.buffer.DataBufferFactory;

import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

/**
* A configuration class which creates an {@link DataBufferFactoryWrapper}.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,14 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.net.URI;
import java.util.List;
import java.util.Map.Entry;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpCookie;
import org.springframework.http.HttpMethod;
Expand All @@ -38,6 +36,11 @@
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.common.HttpStatus;
import com.linecorp.armeria.common.RequestHeaders;
import com.linecorp.armeria.server.Route;
import com.linecorp.armeria.server.ServerBuilder;
import com.linecorp.armeria.spring.internal.client.ArmeriaClientHttpRequest;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;
import com.linecorp.armeria.testing.junit5.server.ServerExtension;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
Expand All @@ -47,17 +50,28 @@ class ArmeriaClientHttpRequestTest {

private static final String TEST_PATH_AND_QUERY = "/index.html?q=1";

@RegisterExtension
static final ServerExtension server = new ServerExtension() {
@Override
protected void configure(ServerBuilder sb) {
sb.service(Route.ofCatchAll(), (ctx, req) -> HttpResponse.of(HttpStatus.OK));
}
};
static WebClient webClient;

@BeforeAll
public static void beforeClass() {
webClient = mock(WebClient.class);
when(webClient.execute((HttpRequest) any())).thenReturn(HttpResponse.of(HttpStatus.OK));
webClient = WebClient.builder()
.decorator((delegate, ctx, req) -> {
return HttpResponse.of(HttpStatus.OK);
})
.build();
}

private static ArmeriaClientHttpRequest request() {
return new ArmeriaClientHttpRequest(webClient, HttpMethod.GET, TEST_PATH_AND_QUERY,
URI.create("http://localhost"), DataBufferFactoryWrapper.DEFAULT);
URI.create("http://localhost"), DataBufferFactoryWrapper.DEFAULT,
null);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
import com.linecorp.armeria.common.HttpStatus;
import com.linecorp.armeria.common.ResponseHeaders;
import com.linecorp.armeria.common.stream.CancelledSubscriptionException;
import com.linecorp.armeria.spring.internal.client.ArmeriaClientHttpResponse;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import io.netty.util.concurrent.ImmediateEventExecutor;
import reactor.core.publisher.Flux;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import com.linecorp.armeria.common.stream.CancelledSubscriptionException;
import com.linecorp.armeria.common.util.EventLoopGroups;
import com.linecorp.armeria.server.ServiceRequestContext;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import com.linecorp.armeria.common.ResponseHeaders;
import com.linecorp.armeria.common.stream.CancelledSubscriptionException;
import com.linecorp.armeria.server.ServiceRequestContext;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import io.netty.buffer.PooledByteBufAllocator;
import reactor.core.publisher.Flux;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.springframework.core.io.buffer.NettyDataBufferFactory;

import com.linecorp.armeria.common.HttpData;
import com.linecorp.armeria.spring.internal.common.DataBufferFactoryWrapper;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
Expand Down
5 changes: 5 additions & 0 deletions spring/spring6/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
dependencies {
api(libs.spring6.webflux)
testImplementation(libs.spring6.context)
testImplementation(libs.spring6.test)
}
Loading
Loading