diff --git a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java
index a70fc4f293..0fa0868019 100644
--- a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java
+++ b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerHttpRequest.java
@@ -103,6 +103,15 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
return this.cookies;
}
+
+ /**
+ * Shortcut to wrap the request with a {@code MockServerWebExchange}.
+ */
+ public MockServerWebExchange toExchange() {
+ return new MockServerWebExchange(this);
+ }
+
+
// Static builder methods
/**
@@ -199,8 +208,8 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
/**
- * Defines a builder that adds headers to the request.
- * @param the builder subclass
+ * Request builder exposing properties not related to the body.
+ * @param the builder sub-class
*/
public interface BaseBuilder> {
@@ -290,6 +299,12 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
* @see BodyBuilder#body(String)
*/
MockServerHttpRequest build();
+
+ /**
+ * Shortcut for:
+ * {@code build().toExchange()}
+ */
+ MockServerWebExchange toExchange();
}
/**
@@ -466,6 +481,11 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
public MockServerHttpRequest build() {
return body(Flux.empty());
}
+
+ @Override
+ public MockServerWebExchange toExchange() {
+ return build().toExchange();
+ }
}
}
\ No newline at end of file
diff --git a/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerWebExchange.java b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerWebExchange.java
new file mode 100644
index 0000000000..59400c4bed
--- /dev/null
+++ b/spring-test/src/main/java/org/springframework/mock/http/server/reactive/MockServerWebExchange.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2002-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.mock.http.server.reactive;
+
+import org.springframework.web.server.ServerWebExchangeDecorator;
+import org.springframework.web.server.adapter.DefaultServerWebExchange;
+import org.springframework.web.server.session.DefaultWebSessionManager;
+
+/**
+ * {@code ServerWebExchange} for use in tests.
+ *
+ *
Effectively a wrapper around {@link DefaultServerWebExchange} plugged in + * with {@link MockServerHttpRequest} and {@link MockServerHttpResponse}. + * + *
Typically used via {@link MockServerHttpRequest#toExchange()}.
+ *
+ * @author Rossen Stoyanchev
+ * @since 5.0
+ */
+public class MockServerWebExchange extends ServerWebExchangeDecorator {
+
+
+ public MockServerWebExchange(MockServerHttpRequest request) {
+ super(new DefaultServerWebExchange(
+ request, new MockServerHttpResponse(), new DefaultWebSessionManager()));
+ }
+
+
+ @Override
+ public MockServerHttpResponse getResponse() {
+ return (MockServerHttpResponse) super.getResponse();
+ }
+
+}
diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java b/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java
index 051bbfe138..8fff812e53 100644
--- a/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java
+++ b/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java
@@ -44,7 +44,6 @@ import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebSession;
-import org.springframework.web.server.session.DefaultWebSessionManager;
import org.springframework.web.server.session.WebSessionManager;
/**
@@ -82,14 +81,6 @@ public class DefaultServerWebExchange implements ServerWebExchange {
private volatile boolean notModified;
- /**
- * Constructor with a request and response only.
- * By default creates a session manager of type {@link DefaultWebSessionManager}.
- */
- public DefaultServerWebExchange(ServerHttpRequest request, ServerHttpResponse response) {
- this(request, response, new DefaultWebSessionManager());
- }
-
/**
* Alternate constructor with a WebSessionManager parameter.
*/
diff --git a/spring-web/src/test/java/org/springframework/mock/http/server/reactive/test/MockServerHttpRequest.java b/spring-web/src/test/java/org/springframework/mock/http/server/reactive/test/MockServerHttpRequest.java
index 709e6d3039..1873ee9709 100644
--- a/spring-web/src/test/java/org/springframework/mock/http/server/reactive/test/MockServerHttpRequest.java
+++ b/spring-web/src/test/java/org/springframework/mock/http/server/reactive/test/MockServerHttpRequest.java
@@ -103,6 +103,15 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
return this.cookies;
}
+
+ /**
+ * Shortcut to wrap the request with a {@code MockServerWebExchange}.
+ */
+ public MockServerWebExchange toExchange() {
+ return new MockServerWebExchange(this);
+ }
+
+
// Static builder methods
/**
@@ -199,8 +208,8 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
/**
- * Defines a builder that adds headers to the request.
- * @param the builder subclass
+ * Request builder exposing properties not related to the body.
+ * @param the builder sub-class
*/
public interface BaseBuilder> {
@@ -219,6 +228,12 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
*/
B cookie(String path, HttpCookie... cookie);
+ /**
+ * Add the given cookies.
+ * @param cookies the cookies.
+ */
+ B cookies(MultiValueMap Effectively a wrapper around {@link DefaultServerWebExchange} plugged in
+ * with {@link MockServerHttpRequest} and {@link MockServerHttpResponse}.
+ *
+ * Typically used via {@link MockServerHttpRequest#toExchange()}.
+ *
+ * @author Rossen Stoyanchev
+ * @since 5.0
+ */
+public class MockServerWebExchange extends ServerWebExchangeDecorator {
+
+
+ public MockServerWebExchange(MockServerHttpRequest request) {
+ super(new DefaultServerWebExchange(
+ request, new MockServerHttpResponse(), new DefaultWebSessionManager()));
+ }
+
+
+ @Override
+ public MockServerHttpResponse getResponse() {
+ return (MockServerHttpResponse) super.getResponse();
+ }
+
+}
+ * {@code build().toExchange()}
+ */
+ MockServerWebExchange toExchange();
}
/**
@@ -360,6 +387,12 @@ public class MockServerHttpRequest extends AbstractServerHttpRequest {
return this;
}
+ @Override
+ public BodyBuilder cookies(MultiValueMap