Browse Source

Polishing

pull/1953/head
Juergen Hoeller 7 years ago
parent
commit
90a4740279
  1. 43
      spring-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java
  2. 51
      spring-web/src/main/java/org/springframework/http/client/reactive/ReactorResourceFactory.java
  3. 8
      spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java

43
spring-expression/src/test/java/org/springframework/expression/spel/SpelCompilationCoverageTests.java

@ -692,7 +692,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests { @@ -692,7 +692,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
}
@Test
public void ternaryWithBooleanReturn() { // SPR-12271
public void ternaryWithBooleanReturn_SPR12271() {
expression = parser.parseExpression("T(Boolean).TRUE?'abc':'def'");
assertEquals("abc", expression.getValue());
assertCanCompile(expression);
@ -4199,7 +4199,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests { @@ -4199,7 +4199,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
}
@Test
public void propertyReferenceVisibility() { // SPR-12771
public void propertyReferenceVisibility_SPR12771() {
StandardEvaluationContext ctx = new StandardEvaluationContext();
ctx.setVariable("httpServletRequest", HttpServlet3RequestFactory.getOne());
// Without a fix compilation was inserting a checkcast to a private type
@ -4898,7 +4898,6 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests { @@ -4898,7 +4898,6 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertIsCompiled(exp);
}
@Test
public void elvisOperator_SPR17214() throws Exception {
SpelParserConfiguration spc = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, null);
@ -4947,22 +4946,6 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests { @@ -4947,22 +4946,6 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertNull(expression.getValue(rh));
}
public static class RecordHolder {
public void add(String key, Long value) {
record.put(key, value);
}
public long get(String key) {
return record.get(key);
}
public Map<String,Long> record = new HashMap<>();
public LongHolder expression = new LongHolder();
}
public static class LongHolder {
public Long someLong = 3L;
}
@Test
public void ternaryOperator_SPR15192() {
SpelParserConfiguration configuration = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, null);
@ -6125,4 +6108,26 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests { @@ -6125,4 +6108,26 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
}
}
public static class RecordHolder {
public Map<String,Long> record = new HashMap<>();
public LongHolder expression = new LongHolder();
public void add(String key, Long value) {
record.put(key, value);
}
public long get(String key) {
return record.get(key);
}
}
public static class LongHolder {
public Long someLong = 3L;
}
}

51
spring-web/src/main/java/org/springframework/http/client/reactive/ReactorResourceFactory.java

@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.http.client.reactive;
import java.util.function.Consumer;
@ -45,19 +46,16 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean @@ -45,19 +46,16 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean
@Nullable
private Consumer<HttpResources> globalResourcesConsumer;
private Supplier<ConnectionProvider> connectionProviderSupplier = () -> ConnectionProvider.elastic("webflux");
private Supplier<LoopResources> loopResourcesSupplier = () -> LoopResources.create("webflux-http");
@Nullable
private ConnectionProvider connectionProvider;
@Nullable
private LoopResources loopResources;
private boolean manageConnectionProvider = false;
private boolean manageLoopResources = false;
@ -76,6 +74,14 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean @@ -76,6 +74,14 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean
this.useGlobalResources = useGlobalResources;
}
/**
* Whether this factory exposes the global
* {@link reactor.netty.http.HttpResources HttpResources} holder.
*/
public boolean isUseGlobalResources() {
return this.useGlobalResources;
}
/**
* Add a Consumer for configuring the global Reactor Netty resources on
* startup. When this option is used, {@link #setUseGlobalResources} is also
@ -97,7 +103,7 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean @@ -97,7 +103,7 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean
* {@link #setConnectionProvider(ConnectionProvider)} is set.
* @param supplier the supplier to use
*/
public void setConnectionProviderSupplier(@Nullable Supplier<ConnectionProvider> supplier) {
public void setConnectionProviderSupplier(Supplier<ConnectionProvider> supplier) {
this.connectionProviderSupplier = supplier;
}
@ -109,7 +115,7 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean @@ -109,7 +115,7 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean
* {@link #setLoopResources(LoopResources)} is set.
* @param supplier the supplier to use
*/
public void setLoopResourcesSupplier(@Nullable Supplier<LoopResources> supplier) {
public void setLoopResourcesSupplier(Supplier<LoopResources> supplier) {
this.loopResourcesSupplier = supplier;
}
@ -118,50 +124,41 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean @@ -118,50 +124,41 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean
* {@link ConnectionProvider} instance.
* @param connectionProvider the connection provider to use as is
*/
public void setConnectionProvider(@Nullable ConnectionProvider connectionProvider) {
public void setConnectionProvider(ConnectionProvider connectionProvider) {
this.connectionProvider = connectionProvider;
}
/**
* Use this option when you want to provide an externally managed
* {@link LoopResources} instance.
* @param loopResources the loop resources to use as is
*/
public void setLoopResources(@Nullable LoopResources loopResources) {
this.loopResources = loopResources;
}
/**
* Whether this factory exposes the global
* {@link reactor.netty.http.HttpResources HttpResources} holder.
* Return the configured {@link ConnectionProvider}.
*/
public boolean isUseGlobalResources() {
return this.useGlobalResources;
public ConnectionProvider getConnectionProvider() {
Assert.state(this.connectionProvider != null, "ConnectionProvider not initialized yet");
return this.connectionProvider;
}
/**
* Return the configured {@link ConnectionProvider}.
* Use this option when you want to provide an externally managed
* {@link LoopResources} instance.
* @param loopResources the loop resources to use as is
*/
public ConnectionProvider getConnectionProvider() {
Assert.notNull(this.connectionProvider, "ConnectionProvider not initialized yet via InitializingBean.");
return this.connectionProvider;
public void setLoopResources(LoopResources loopResources) {
this.loopResources = loopResources;
}
/**
* Return the configured {@link LoopResources}.
*/
public LoopResources getLoopResources() {
Assert.notNull(this.loopResources, "LoopResources not initialized yet via InitializingBean.");
Assert.state(this.loopResources != null, "LoopResources not initialized yet");
return this.loopResources;
}
@Override
public void afterPropertiesSet() throws Exception {
public void afterPropertiesSet() {
if (this.useGlobalResources) {
Assert.isTrue(this.loopResources == null && this.connectionProvider == null,
"'useGlobalResources' is mutually exclusive with explicitly configured resources.");
"'useGlobalResources' is mutually exclusive with explicitly configured resources");
HttpResources httpResources = HttpResources.get();
if (this.globalResourcesConsumer != null) {
this.globalResourcesConsumer.accept(httpResources);

8
spring-web/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java

@ -156,7 +156,7 @@ public class ServletHttpHandlerAdapter implements Servlet { @@ -156,7 +156,7 @@ public class ServletHttpHandlerAdapter implements Servlet {
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
// Check for existing error attribute first
if (DispatcherType.ASYNC.equals(request.getDispatcherType())) {
Throwable ex = (Throwable) request.getAttribute(WRITE_ERROR_ATTRIBUTE_NAME);
throw new ServletException("Failed to create response content", ex);
@ -179,9 +179,7 @@ public class ServletHttpHandlerAdapter implements Servlet { @@ -179,9 +179,7 @@ public class ServletHttpHandlerAdapter implements Servlet {
return;
}
ServerHttpResponse httpResponse =
createResponse(((HttpServletResponse) response), asyncContext, httpRequest);
ServerHttpResponse httpResponse = createResponse(((HttpServletResponse) response), asyncContext, httpRequest);
if (httpRequest.getMethod() == HttpMethod.HEAD) {
httpResponse = new HttpHeadResponseDecorator(httpResponse);
}
@ -247,7 +245,6 @@ public class ServletHttpHandlerAdapter implements Servlet { @@ -247,7 +245,6 @@ public class ServletHttpHandlerAdapter implements Servlet {
private final String logPrefix;
public HandlerResultAsyncListener(AtomicBoolean isCompleted, ServletServerHttpRequest httpRequest) {
this.isCompleted = isCompleted;
this.logPrefix = httpRequest.getLogPrefix();
@ -288,7 +285,6 @@ public class ServletHttpHandlerAdapter implements Servlet { @@ -288,7 +285,6 @@ public class ServletHttpHandlerAdapter implements Servlet {
private final String logPrefix;
public HandlerResultSubscriber(
AsyncContext asyncContext, AtomicBoolean isCompleted, ServletServerHttpRequest httpRequest) {

Loading…
Cancel
Save