diff --git a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java index 81cfe7ee7e..1e260f26d4 100644 --- a/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java +++ b/spring-aop/src/main/java/org/springframework/aop/interceptor/AsyncExecutionInterceptor.java @@ -98,6 +98,7 @@ public class AsyncExecutionInterceptor extends AsyncExecutionAspectSupport imple * otherwise. */ @Override + @Nullable public Object invoke(final MethodInvocation invocation) throws Throwable { Class targetClass = (invocation.getThis() != null ? AopUtils.getTargetClass(invocation.getThis()) : null); Method specificMethod = ClassUtils.getMostSpecificMethod(invocation.getMethod(), targetClass); diff --git a/spring-aop/src/main/java/org/springframework/aop/support/DelegatePerTargetObjectIntroductionInterceptor.java b/spring-aop/src/main/java/org/springframework/aop/support/DelegatePerTargetObjectIntroductionInterceptor.java index 52353a52a8..9ad7781f99 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/DelegatePerTargetObjectIntroductionInterceptor.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/DelegatePerTargetObjectIntroductionInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * 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. @@ -24,6 +24,7 @@ import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.DynamicIntroductionAdvice; import org.springframework.aop.IntroductionInterceptor; import org.springframework.aop.ProxyMethodInvocation; +import org.springframework.lang.Nullable; import org.springframework.util.ReflectionUtils; /** @@ -85,6 +86,7 @@ public class DelegatePerTargetObjectIntroductionInterceptor extends Introduction * method, which handles introduced interfaces and forwarding to the target. */ @Override + @Nullable public Object invoke(MethodInvocation mi) throws Throwable { if (isMethodOnIntroducedInterface(mi)) { Object delegate = getIntroductionDelegateFor(mi.getThis()); diff --git a/spring-aop/src/main/java/org/springframework/aop/support/DelegatingIntroductionInterceptor.java b/spring-aop/src/main/java/org/springframework/aop/support/DelegatingIntroductionInterceptor.java index ce8c4043df..8f9abf1647 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/DelegatingIntroductionInterceptor.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/DelegatingIntroductionInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * 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. @@ -21,6 +21,7 @@ import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.DynamicIntroductionAdvice; import org.springframework.aop.IntroductionInterceptor; import org.springframework.aop.ProxyMethodInvocation; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -100,6 +101,7 @@ public class DelegatingIntroductionInterceptor extends IntroductionInfoSupport * method, which handles introduced interfaces and forwarding to the target. */ @Override + @Nullable public Object invoke(MethodInvocation mi) throws Throwable { if (isMethodOnIntroducedInterface(mi)) { // Using the following method rather than direct reflection, we diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheInterceptor.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheInterceptor.java index ab5878293b..dd516ce3f9 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheInterceptor.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheInterceptor.java @@ -22,6 +22,8 @@ import java.lang.reflect.Method; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; +import org.springframework.lang.Nullable; + /** * AOP Alliance MethodInterceptor for declarative cache * management using the common Spring caching infrastructure @@ -42,6 +44,7 @@ import org.aopalliance.intercept.MethodInvocation; public class CacheInterceptor extends CacheAspectSupport implements MethodInterceptor, Serializable { @Override + @Nullable public Object invoke(final MethodInvocation invocation) throws Throwable { Method method = invocation.getMethod(); diff --git a/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java b/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java index 178240fe10..9cee7dd3ad 100644 --- a/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java +++ b/spring-context/src/main/java/org/springframework/ejb/access/AbstractSlsbInvokerInterceptor.java @@ -187,6 +187,7 @@ public abstract class AbstractSlsbInvokerInterceptor extends JndiObjectLocator * {@link #invokeInContext}. */ @Override + @Nullable public Object invoke(MethodInvocation invocation) throws Throwable { Context ctx = (this.exposeAccessContext ? getJndiTemplate().getContext() : null); try { diff --git a/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java b/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java index 984750caa5..ae53ff49f5 100644 --- a/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java +++ b/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java @@ -354,6 +354,7 @@ public class MBeanClientInterceptor * @see #handleConnectFailure */ @Override + @Nullable public Object invoke(MethodInvocation invocation) throws Throwable { // Lazily connect to MBeanServer if necessary. synchronized (this.preparationMonitor) { diff --git a/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerClientInterceptor.java b/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerClientInterceptor.java index 4b0c08602a..d90bbe6f0d 100644 --- a/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerClientInterceptor.java +++ b/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerClientInterceptor.java @@ -192,6 +192,7 @@ public class JmsInvokerClientInterceptor implements MethodInterceptor, Initializ @Override + @Nullable public Object invoke(MethodInvocation methodInvocation) throws Throwable { if (AopUtils.isToStringMethod(methodInvocation.getMethod())) { return "JMS invoker proxy for queue [" + this.queue + "]"; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java index ebb6f8110c..50f2d05647 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java @@ -420,8 +420,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager conHolder.setTimeoutInSeconds(timeoutToUse); } if (logger.isDebugEnabled()) { - logger.debug("Exposing JPA transaction as JDBC transaction [" + - conHolder.getConnectionHandle() + "]"); + logger.debug("Exposing JPA transaction as JDBC transaction [" + conHandle + "]"); } TransactionSynchronizationManager.bindResource(getDataSource(), conHolder); txObject.setConnectionHolder(conHolder); @@ -601,13 +600,16 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager // Remove the JDBC connection holder from the thread, if exposed. if (getDataSource() != null && txObject.hasConnectionHolder()) { TransactionSynchronizationManager.unbindResource(getDataSource()); - try { - getJpaDialect().releaseJdbcConnection(txObject.getConnectionHolder().getConnectionHandle(), - txObject.getEntityManagerHolder().getEntityManager()); - } - catch (Exception ex) { - // Just log it, to keep a transaction-related exception. - logger.error("Could not close JDBC connection after transaction", ex); + ConnectionHandle conHandle = txObject.getConnectionHolder().getConnectionHandle(); + if (conHandle != null) { + try { + getJpaDialect().releaseJdbcConnection(conHandle, + txObject.getEntityManagerHolder().getEntityManager()); + } + catch (Exception ex) { + // Just log it, to keep a transaction-related exception. + logger.error("Could not close JDBC connection after transaction", ex); + } } } diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionInterceptor.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionInterceptor.java index d1704eaae8..9b74694d30 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionInterceptor.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionInterceptor.java @@ -27,6 +27,7 @@ import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.BeanFactory; +import org.springframework.lang.Nullable; import org.springframework.transaction.PlatformTransactionManager; /** @@ -86,6 +87,7 @@ public class TransactionInterceptor extends TransactionAspectSupport implements @Override + @Nullable public Object invoke(final MethodInvocation invocation) throws Throwable { // Work out the target class: may be {@code null}. // The TransactionAttributeSource should be passed the target class diff --git a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsAsyncClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsAsyncClientHttpRequestFactory.java index 9ab94ff514..1a45e9f923 100644 --- a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsAsyncClientHttpRequestFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsAsyncClientHttpRequestFactory.java @@ -33,7 +33,6 @@ import org.apache.http.protocol.HttpContext; import org.springframework.beans.factory.InitializingBean; import org.springframework.http.HttpMethod; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -51,7 +50,6 @@ import org.springframework.util.Assert; public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsClientHttpRequestFactory implements AsyncClientHttpRequestFactory, InitializingBean { - @Nullable private HttpAsyncClient asyncClient; @@ -72,7 +70,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC */ public HttpComponentsAsyncClientHttpRequestFactory(HttpAsyncClient asyncClient) { super(); - setAsyncClient(asyncClient); + this.asyncClient = asyncClient; } /** @@ -82,7 +80,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC */ public HttpComponentsAsyncClientHttpRequestFactory(CloseableHttpAsyncClient asyncClient) { super(); - setAsyncClient(asyncClient); + this.asyncClient = asyncClient; } /** @@ -94,7 +92,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC */ public HttpComponentsAsyncClientHttpRequestFactory(HttpClient httpClient, HttpAsyncClient asyncClient) { super(httpClient); - setAsyncClient(asyncClient); + this.asyncClient = asyncClient; } /** @@ -107,7 +105,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC CloseableHttpClient httpClient, CloseableHttpAsyncClient asyncClient) { super(httpClient); - setAsyncClient(asyncClient); + this.asyncClient = asyncClient; } @@ -128,7 +126,6 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC * @since 4.3.10 * @see #getHttpClient() */ - @Nullable public HttpAsyncClient getAsyncClient() { return this.asyncClient; } @@ -150,7 +147,7 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC */ @Deprecated public CloseableHttpAsyncClient getHttpAsyncClient() { - Assert.state(this.asyncClient == null || this.asyncClient instanceof CloseableHttpAsyncClient, + Assert.state(this.asyncClient instanceof CloseableHttpAsyncClient, "No CloseableHttpAsyncClient - use getAsyncClient() instead"); return (CloseableHttpAsyncClient) this.asyncClient; } @@ -163,7 +160,6 @@ public class HttpComponentsAsyncClientHttpRequestFactory extends HttpComponentsC private HttpAsyncClient startAsyncClient() { HttpAsyncClient client = getAsyncClient(); - Assert.state(client != null, "No HttpAsyncClient set"); if (client instanceof CloseableHttpAsyncClient) { CloseableHttpAsyncClient closeableAsyncClient = (CloseableHttpAsyncClient) client; if (!closeableAsyncClient.isRunning()) { diff --git a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java index a387a625bc..27815f69a9 100644 --- a/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java @@ -59,7 +59,6 @@ import org.springframework.util.Assert; */ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequestFactory, DisposableBean { - @Nullable private HttpClient httpClient; @Nullable @@ -82,7 +81,7 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest * @param httpClient the HttpClient instance to use for this request factory */ public HttpComponentsClientHttpRequestFactory(HttpClient httpClient) { - setHttpClient(httpClient); + this.httpClient = httpClient; } @@ -99,7 +98,6 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest * Return the {@code HttpClient} used for * {@linkplain #createRequest(URI, HttpMethod) synchronous execution}. */ - @Nullable public HttpClient getHttpClient() { return this.httpClient; } @@ -156,7 +154,6 @@ public class HttpComponentsClientHttpRequestFactory implements ClientHttpRequest @Override public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { HttpClient client = getHttpClient(); - Assert.state(client != null, "No HttpClient set"); HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri); postProcessHttpRequest(httpRequest); diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java index 2517730325..ddc506f205 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java @@ -43,6 +43,7 @@ import org.springframework.util.MimeType; */ public class Jackson2JsonEncoder extends AbstractJackson2Encoder { + @Nullable private final PrettyPrinter ssePrettyPrinter; diff --git a/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java b/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java index ad299222d3..1969fdec21 100644 --- a/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java +++ b/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java @@ -494,6 +494,7 @@ public class JaxWsPortClientInterceptor extends LocalJaxWsServiceFactory @Override + @Nullable public Object invoke(MethodInvocation invocation) throws Throwable { if (AopUtils.isToStringMethod(invocation.getMethod())) { return "JAX-WS proxy for port [" + getPortName() + "] of service [" + getServiceName() + "]"; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java index c10b22ccb8..8e5edbf952 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java @@ -753,6 +753,7 @@ public class MvcUriComponentsBuilder { } @Override + @Nullable public Object invoke(org.aopalliance.intercept.MethodInvocation inv) throws Throwable { return intercept(inv.getThis(), inv.getMethod(), inv.getArguments(), null); }