diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index 279107726a..8fa8bc1b0a 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -124,7 +124,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp /** Resolution strategy for expressions in bean definition values */ private BeanExpressionResolver beanExpressionResolver; - /** Spring 3.0 ConversionService to use instead of PropertyEditors */ + /** Spring ConversionService to use instead of PropertyEditors */ private ConversionService conversionService; /** Custom PropertyEditorRegistrars to apply to the beans of this factory */ @@ -160,9 +160,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp private final Map mergedBeanDefinitions = new ConcurrentHashMap(64); - /** - * Names of beans that have already been created at least once - */ + /** Names of beans that have already been created at least once */ private final Set alreadyCreated = Collections.newSetFromMap(new ConcurrentHashMap(64)); /** Names of beans that are currently in creation */ diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBean.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBean.java index 6ba38dcaf9..936139f3a2 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBean.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -86,8 +86,8 @@ import org.springframework.util.CollectionUtils; * @see org.quartz.impl.StdSchedulerFactory * @see org.springframework.transaction.interceptor.TransactionProxyFactoryBean */ -public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean, BeanNameAware, - ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle { +public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean, + BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle { public static final String PROP_THREAD_COUNT = "org.quartz.threadPool.threadCount"; @@ -707,7 +707,7 @@ public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBe //--------------------------------------------------------------------- - // Implementation of Lifecycle interface + // Implementation of SmartLifecycle interface //--------------------------------------------------------------------- @Override diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java index 387e6d5719..377c4c9972 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigUtils.java @@ -311,14 +311,15 @@ public class AnnotationConfigUtils { static Set attributesForRepeatable(AnnotationMetadata metadata, Class containerClass, Class annotationClass) { + return attributesForRepeatable(metadata, containerClass.getName(), annotationClass.getName()); } @SuppressWarnings("unchecked") static Set attributesForRepeatable(AnnotationMetadata metadata, String containerClassName, String annotationClassName) { - Set result = new LinkedHashSet(); + Set result = new LinkedHashSet(); addAttributesIfNotNull(result, metadata.getAnnotationAttributes(annotationClassName, false)); Map container = metadata.getAnnotationAttributes(containerClassName, false); @@ -330,8 +331,7 @@ public class AnnotationConfigUtils { return Collections.unmodifiableSet(result); } - private static void addAttributesIfNotNull(Set result, - Map attributes) { + private static void addAttributesIfNotNull(Set result, Map attributes) { if (attributes != null) { result.add(AnnotationAttributes.fromMap(attributes)); } diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java index 7733b98b87..6e019b38dd 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -94,19 +94,18 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. } @Override - @SuppressWarnings("rawtypes") public void validate(Object target, Errors errors, Object... validationHints) { if (this.targetValidator != null) { - Set groups = new LinkedHashSet(); + Set> groups = new LinkedHashSet>(); if (validationHints != null) { for (Object hint : validationHints) { if (hint instanceof Class) { - groups.add((Class) hint); + groups.add((Class) hint); } } } processConstraintViolations( - this.targetValidator.validate(target, groups.toArray(new Class[groups.size()])), errors); + this.targetValidator.validate(target, groups.toArray(new Class[groups.size()])), errors); } } diff --git a/spring-core/src/main/java/org/springframework/util/CompositeIterator.java b/spring-core/src/main/java/org/springframework/util/CompositeIterator.java index 2ce1e5306f..dea6f292a0 100644 --- a/spring-core/src/main/java/org/springframework/util/CompositeIterator.java +++ b/spring-core/src/main/java/org/springframework/util/CompositeIterator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -13,46 +13,48 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.util; import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; +import java.util.LinkedHashSet; import java.util.NoSuchElementException; +import java.util.Set; /** - * Iterator that combines multiple other iterators. - * This implementation maintains a list of iterators which are invoked in sequence until all iterators are exhausted. + * Composite iterator that combines multiple other iterators, + * as registered via {@link #add(Iterator)}. + * + *

This implementation maintains a linked set of iterators + * which are invoked in sequence until all iterators are exhausted. + * * @author Erwin Vervaet + * @author Juergen Hoeller + * @since 3.0 */ public class CompositeIterator implements Iterator { - private List> iterators = new LinkedList>(); + private final Set> iterators = new LinkedHashSet>(); private boolean inUse = false; - /** - * Create a new composite iterator. Add iterators using the {@link #add(Iterator)} method. - */ - public CompositeIterator() { - } /** * Add given iterator to this composite. */ public void add(Iterator iterator) { - Assert.state(!inUse, "You can no longer add iterator to a composite iterator that's already in use"); - if (iterators.contains(iterator)) { + Assert.state(!this.inUse, "You can no longer add iterators to a composite iterator that's already in use"); + if (this.iterators.contains(iterator)) { throw new IllegalArgumentException("You cannot add the same iterator twice"); } - iterators.add(iterator); + this.iterators.add(iterator); } @Override public boolean hasNext() { - inUse = true; - for (Iterator> it = iterators.iterator(); it.hasNext();) { - if (it.next().hasNext()) { + this.inUse = true; + for (Iterator iterator : this.iterators) { + if (iterator.hasNext()) { return true; } } @@ -61,18 +63,18 @@ public class CompositeIterator implements Iterator { @Override public E next() { - inUse = true; - for (Iterator> it = iterators.iterator(); it.hasNext();) { - Iterator iterator = it.next(); + this.inUse = true; + for (Iterator iterator : this.iterators) { if (iterator.hasNext()) { return iterator.next(); } } - throw new NoSuchElementException("Exhausted all iterators"); + throw new NoSuchElementException("All iterators exhausted"); } @Override public void remove() { - throw new UnsupportedOperationException("Remove is not supported"); + throw new UnsupportedOperationException("CompositeIterator does not support remove()"); } + } diff --git a/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java b/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java index e0b7e028f8..3bb6471f67 100644 --- a/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java +++ b/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java @@ -224,23 +224,23 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen @Override public V get(Object key) { Reference reference = getReference(key, Restructure.WHEN_NECESSARY); - Entry entry = (reference == null ? null : reference.get()); + Entry entry = (reference != null ? reference.get() : null); return (entry != null ? entry.getValue() : null); } @Override public boolean containsKey(Object key) { Reference reference = getReference(key, Restructure.WHEN_NECESSARY); - Entry entry = (reference == null ? null : reference.get()); + Entry entry = (reference != null ? reference.get() : null); return (entry != null && ObjectUtils.nullSafeEquals(entry.getKey(), key)); } /** - * Returns a {@link Reference} to the {@link Entry} for the specified {@code key} or - * {@code null} if not found. + * Return a {@link Reference} to the {@link Entry} for the specified {@code key}, + * or {@code null} if not found. * @param key the key (can be {@code null}) * @param restructure types of restructure allowed during this call - * @return the reference or {@code null} + * @return the reference, or {@code null} if not found */ protected final Reference getReference(Object key, Restructure restructure) { int hash = getHash(key); @@ -400,14 +400,10 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen */ public static enum ReferenceType { - /** - * Use {@link SoftReference}s. - */ + /** Use {@link SoftReference}s */ SOFT, - /** - * Use {@link WeakReference}s. - */ + /** Use {@link WeakReference}s */ WEAK } @@ -462,8 +458,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen } /** - * Apply an update operation to this segment. The segment will be locked - * during update. + * Apply an update operation to this segment. + * The segment will be locked during the update. * @param hash the hash of the key * @param key the key * @param task the update operation @@ -474,7 +470,7 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen if (task.hasOption(TaskOption.RESTRUCTURE_BEFORE)) { restructureIfNecessary(resize); } - if (task.hasOption(TaskOption.SKIP_IF_EMPTY) && (this.count == 0)) { + if (task.hasOption(TaskOption.SKIP_IF_EMPTY) && this.count == 0) { return task.execute(null, null, null); } lock(); @@ -482,12 +478,12 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen final int index = getIndex(hash, this.references); final Reference head = this.references[index]; Reference reference = findInChain(head, key, hash); - Entry entry = (reference == null ? null : reference.get()); + Entry entry = (reference != null ? reference.get() : null); Entries entries = new Entries() { @Override public void add(V value) { @SuppressWarnings("unchecked") - Entry newEntry = new Entry((K)key, value); + Entry newEntry = new Entry((K) key, value); Reference newReference = Segment.this.referenceManager.createReference(newEntry, hash, head); Segment.this.references[index] = newReference; Segment.this.count++; @@ -514,7 +510,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen try { setReferences(createReferenceArray(this.initialSize)); this.count = 0; - } finally { + } + finally { unlock(); } } @@ -545,16 +542,16 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen // Recalculate taking into account count inside lock and items that // will be purged - needsResize = ((countAfterRestructure > 0) && (countAfterRestructure >= this.resizeThreshold)); + needsResize = (countAfterRestructure > 0 && countAfterRestructure >= this.resizeThreshold); boolean resizing = false; int restructureSize = this.references.length; - if (allowResize && needsResize && (restructureSize < MAXIMUM_SEGMENT_SIZE)) { + if (allowResize && needsResize && restructureSize < MAXIMUM_SEGMENT_SIZE) { restructureSize <<= 1; resizing = true; } // Either create a new table or reuse the existing one - Reference[] restructured = (resizing ? createReferenceArray(restructureSize) : this.references); + Reference[] restructured = (resizing ? createReferenceArray(restructureSize) : this.references); // Restructure for (int i = 0; i < this.references.length; i++) { @@ -578,7 +575,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen setReferences(restructured); } this.count = Math.max(countAfterRestructure, 0); - } finally { + } + finally { unlock(); } } @@ -606,7 +604,7 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen } private int getIndex(int hash, Reference[] references) { - return hash & (references.length - 1); + return (hash & (references.length - 1)); } /** @@ -700,27 +698,26 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen @Override public String toString() { - return this.key + "=" + this.value; + return (this.key + "=" + this.value); } @Override @SuppressWarnings("rawtypes") - public final boolean equals(Object o) { - if (o == this) { + public final boolean equals(Object other) { + if (this == other) { return true; } - if (o != null && o instanceof Map.Entry) { - Map.Entry other = (Map.Entry) o; - return ObjectUtils.nullSafeEquals(getKey(), other.getKey()) - && ObjectUtils.nullSafeEquals(getValue(), other.getValue()); + if (!(other instanceof Map.Entry)) { + return false; } - return false; + Map.Entry otherEntry = (Map.Entry) other; + return (ObjectUtils.nullSafeEquals(getKey(), otherEntry.getKey()) && + ObjectUtils.nullSafeEquals(getValue(), otherEntry.getValue())); } @Override public final int hashCode() { - return ObjectUtils.nullSafeHashCode(this.key) - ^ ObjectUtils.nullSafeHashCode(this.value); + return (ObjectUtils.nullSafeHashCode(this.key) ^ ObjectUtils.nullSafeHashCode(this.value)); } } @@ -802,7 +799,7 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen if (o != null && o instanceof Map.Entry) { Map.Entry entry = (java.util.Map.Entry) o; Reference reference = ConcurrentReferenceHashMap.this.getReference(entry.getKey(), Restructure.NEVER); - Entry other = (reference == null ? null : reference.get()); + Entry other = (reference != null ? reference.get() : null); if (other != null) { return ObjectUtils.nullSafeEquals(entry.getValue(), other.getValue()); } @@ -855,7 +852,7 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen @Override public boolean hasNext() { getNextIfNecessary(); - return this.next != null; + return (this.next != null); } @Override @@ -987,7 +984,6 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen enqueue(); clear(); } - } @@ -1021,7 +1017,6 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen enqueue(); clear(); } - } } diff --git a/spring-core/src/test/java/org/springframework/util/CompositeIteratorTests.java b/spring-core/src/test/java/org/springframework/util/CompositeIteratorTests.java index d27cb93109..124bc04a3f 100644 --- a/spring-core/src/test/java/org/springframework/util/CompositeIteratorTests.java +++ b/spring-core/src/test/java/org/springframework/util/CompositeIteratorTests.java @@ -1,3 +1,19 @@ +/* + * Copyright 2002-2014 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.util; import java.util.Arrays; @@ -5,29 +21,36 @@ import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; -import junit.framework.TestCase; +import org.junit.Test; + +import static org.junit.Assert.*; + /** * Test case for {@link CompositeIterator}. * * @author Erwin Vervaet + * @author Juergen Hoeller */ -public class CompositeIteratorTests extends TestCase { +public class CompositeIteratorTests { + @Test public void testNoIterators() { - CompositeIterator it = new CompositeIterator(); + CompositeIterator it = new CompositeIterator(); assertFalse(it.hasNext()); try { it.next(); fail(); - } catch (NoSuchElementException e) { + } + catch (NoSuchElementException ex) { // expected } } + @Test public void testSingleIterator() { - CompositeIterator it = new CompositeIterator(); - it.add(Arrays.asList(new String[] { "0", "1" }).iterator()); + CompositeIterator it = new CompositeIterator(); + it.add(Arrays.asList("0", "1").iterator()); for (int i = 0; i < 2; i++) { assertTrue(it.hasNext()); assertEquals(String.valueOf(i), it.next()); @@ -36,16 +59,18 @@ public class CompositeIteratorTests extends TestCase { try { it.next(); fail(); - } catch (NoSuchElementException e) { + } + catch (NoSuchElementException ex) { // expected } } + @Test public void testMultipleIterators() { - CompositeIterator it = new CompositeIterator(); - it.add(Arrays.asList(new String[] { "0", "1" }).iterator()); - it.add(Arrays.asList(new String[] { "2" }).iterator()); - it.add(Arrays.asList(new String[] { "3", "4" }).iterator()); + CompositeIterator it = new CompositeIterator(); + it.add(Arrays.asList("0", "1").iterator()); + it.add(Arrays.asList("2").iterator()); + it.add(Arrays.asList("3", "4").iterator()); for (int i = 0; i < 5; i++) { assertTrue(it.hasNext()); assertEquals(String.valueOf(i), it.next()); @@ -54,43 +79,49 @@ public class CompositeIteratorTests extends TestCase { try { it.next(); fail(); - } catch (NoSuchElementException e) { + } + catch (NoSuchElementException ex) { // expected } } + @Test public void testInUse() { - List list = Arrays.asList(new String[] { "0", "1" }); - CompositeIterator it = new CompositeIterator(); + List list = Arrays.asList("0", "1"); + CompositeIterator it = new CompositeIterator(); it.add(list.iterator()); it.hasNext(); try { it.add(list.iterator()); fail(); - } catch (IllegalStateException e) { + } + catch (IllegalStateException ex) { // expected } - it = new CompositeIterator(); + it = new CompositeIterator(); it.add(list.iterator()); it.next(); try { it.add(list.iterator()); fail(); - } catch (IllegalStateException e) { + } + catch (IllegalStateException ex) { // expected } } + @Test public void testDuplicateIterators() { - List list = Arrays.asList(new String[] { "0", "1" }); - Iterator iterator = list.iterator(); - CompositeIterator it = new CompositeIterator(); + List list = Arrays.asList("0", "1"); + Iterator iterator = list.iterator(); + CompositeIterator it = new CompositeIterator(); it.add(iterator); it.add(list.iterator()); try { it.add(iterator); fail(); - } catch (IllegalArgumentException e) { + } + catch (IllegalArgumentException ex) { // expected } } diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java index f7170925bb..ab67e4bf4c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -58,7 +58,7 @@ import org.springframework.util.ClassUtils; * @see #doShutdown() */ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccessor - implements SmartLifecycle, BeanNameAware, DisposableBean { + implements BeanNameAware, DisposableBean, SmartLifecycle { private String clientId; diff --git a/spring-web/src/main/java/org/springframework/http/client/SimpleBufferingAsyncClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/SimpleBufferingAsyncClientHttpRequest.java index f38221ca5b..7b5304a8a6 100644 --- a/spring-web/src/main/java/org/springframework/http/client/SimpleBufferingAsyncClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/SimpleBufferingAsyncClientHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -37,7 +37,7 @@ import org.springframework.util.concurrent.ListenableFuture; * * @author Arjen Poutsma * @since 3.0 - * @see org.springframework.http.client.SimpleClientHttpRequestFactory#createRequest(java.net.URI, org.springframework.http.HttpMethod) + * @see org.springframework.http.client.SimpleClientHttpRequestFactory#createRequest */ final class SimpleBufferingAsyncClientHttpRequest extends AbstractBufferingAsyncClientHttpRequest { @@ -47,13 +47,16 @@ final class SimpleBufferingAsyncClientHttpRequest extends AbstractBufferingAsync private final AsyncListenableTaskExecutor taskExecutor; + SimpleBufferingAsyncClientHttpRequest(HttpURLConnection connection, boolean outputStreaming, AsyncListenableTaskExecutor taskExecutor) { + this.connection = connection; this.outputStreaming = outputStreaming; this.taskExecutor = taskExecutor; } + @Override public HttpMethod getMethod() { return HttpMethod.valueOf(this.connection.getRequestMethod()); @@ -72,7 +75,8 @@ final class SimpleBufferingAsyncClientHttpRequest extends AbstractBufferingAsync @Override protected ListenableFuture executeInternal( final HttpHeaders headers, final byte[] bufferedOutput) throws IOException { - return taskExecutor.submitListenable(new Callable() { + + return this.taskExecutor.submitListenable(new Callable() { @Override public ClientHttpResponse call() throws Exception { for (Map.Entry> entry : headers.entrySet()) { @@ -81,11 +85,9 @@ final class SimpleBufferingAsyncClientHttpRequest extends AbstractBufferingAsync connection.addRequestProperty(headerName, headerValue); } } - if (connection.getDoOutput() && outputStreaming) { connection.setFixedLengthStreamingMode(bufferedOutput.length); } - connection.connect(); if (connection.getDoOutput()) { FileCopyUtils.copy(bufferedOutput, connection.getOutputStream()); diff --git a/spring-web/src/main/java/org/springframework/http/client/SimpleStreamingAsyncClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/SimpleStreamingAsyncClientHttpRequest.java index 6681196d8c..34ba8911f2 100644 --- a/spring-web/src/main/java/org/springframework/http/client/SimpleStreamingAsyncClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/SimpleStreamingAsyncClientHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -33,13 +33,12 @@ import org.springframework.util.concurrent.ListenableFuture; /** * {@link org.springframework.http.client.ClientHttpRequest} implementation that uses - * standard J2SE facilities to execute streaming requests. Created via the {@link + * standard Java facilities to execute streaming requests. Created via the {@link * org.springframework.http.client.SimpleClientHttpRequestFactory}. * * @author Arjen Poutsma - * @see org.springframework.http.client.SimpleClientHttpRequestFactory#createRequest(java.net.URI, - * org.springframework.http.HttpMethod) * @since 3.0 + * @see org.springframework.http.client.SimpleClientHttpRequestFactory#createRequest */ final class SimpleStreamingAsyncClientHttpRequest extends AbstractAsyncClientHttpRequest { @@ -53,14 +52,17 @@ final class SimpleStreamingAsyncClientHttpRequest extends AbstractAsyncClientHtt private final AsyncListenableTaskExecutor taskExecutor; + SimpleStreamingAsyncClientHttpRequest(HttpURLConnection connection, int chunkSize, boolean outputStreaming, AsyncListenableTaskExecutor taskExecutor) { + this.connection = connection; this.chunkSize = chunkSize; this.outputStreaming = outputStreaming; this.taskExecutor = taskExecutor; } + @Override public HttpMethod getMethod() { return HttpMethod.valueOf(this.connection.getRequestMethod()); @@ -106,9 +108,8 @@ final class SimpleStreamingAsyncClientHttpRequest extends AbstractAsyncClientHtt } @Override - protected ListenableFuture executeInternal(final HttpHeaders headers) - throws IOException { - return taskExecutor.submitListenable(new Callable() { + protected ListenableFuture executeInternal(final HttpHeaders headers) throws IOException { + return this.taskExecutor.submitListenable(new Callable() { @Override public ClientHttpResponse call() throws Exception { try { diff --git a/spring-web/src/main/java/org/springframework/remoting/httpinvoker/HttpInvokerClientInterceptor.java b/spring-web/src/main/java/org/springframework/remoting/httpinvoker/HttpInvokerClientInterceptor.java index 285ec33f72..6144c786c8 100644 --- a/spring-web/src/main/java/org/springframework/remoting/httpinvoker/HttpInvokerClientInterceptor.java +++ b/spring-web/src/main/java/org/springframework/remoting/httpinvoker/HttpInvokerClientInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -139,7 +139,7 @@ public class HttpInvokerClientInterceptor extends RemoteInvocationBasedAccessor } RemoteInvocation invocation = createRemoteInvocation(methodInvocation); - RemoteInvocationResult result = null; + RemoteInvocationResult result; try { result = executeRequest(invocation, methodInvocation); } diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java index 23faf37860..676464f166 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/RequestMapping.java @@ -370,7 +370,7 @@ public @interface RequestMapping { * all requests with a {@code Accept} other than "text/plain". *

Supported at the type level as well as at the method level! * When used at the type level, all method-level mappings override - * this consumes restriction. + * this produces restriction. * @see org.springframework.http.MediaType */ String[] produces() default {}; diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index 4565eebfdc..37e7d3a992 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -231,7 +231,7 @@ public class UriComponentsBuilder { builder.scheme((scheme != null) ? scheme.toLowerCase() : scheme); builder.userInfo(m.group(4)); String host = m.group(5); - if(StringUtils.hasLength(scheme) && !StringUtils.hasLength(host)) { + if (StringUtils.hasLength(scheme) && !StringUtils.hasLength(host)) { throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL"); } builder.host(host); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java index c4acf15b58..843b703749 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/support/AnnotationConfigDispatcherServletInitializerTests.java @@ -224,7 +224,7 @@ public class AnnotationConfigDispatcherServletInitializerTests { @Override protected Class[] getServletConfigClasses() { - return new Class[]{MyConfiguration.class}; + return new Class[] {MyConfiguration.class}; } @Override @@ -254,16 +254,12 @@ public class AnnotationConfigDispatcherServletInitializerTests { } - private static class MyBean { + public static class MyBean { } @Configuration - @SuppressWarnings("unused") - private static class MyConfiguration { - - public MyConfiguration() { - } + public static class MyConfiguration { @Bean public MyBean bean() { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java index a485620e51..87237923aa 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -34,6 +34,7 @@ import javax.websocket.HandshakeResponse; import javax.websocket.WebSocketContainer; import org.springframework.core.task.AsyncListenableTaskExecutor; +import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.core.task.TaskExecutor; import org.springframework.http.HttpHeaders; import org.springframework.util.Assert; @@ -58,7 +59,7 @@ public class StandardWebSocketClient extends AbstractWebSocketClient { private final WebSocketContainer webSocketContainer; - private AsyncListenableTaskExecutor taskExecutor; + private AsyncListenableTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); /** @@ -72,9 +73,8 @@ public class StandardWebSocketClient extends AbstractWebSocketClient { /** * Constructor accepting an existing {@link WebSocketContainer} instance. - * - *

For XML configuration see {@link WebSocketContainerFactoryBean}. For Java - * configuration use {@code ContainerProvider.getWebSocketContainer()} to obtain + *

For XML configuration, see {@link WebSocketContainerFactoryBean}. For Java + * configuration, use {@code ContainerProvider.getWebSocketContainer()} to obtain * the {@code WebSocketContainer} instance. */ public StandardWebSocketClient(WebSocketContainer webSocketContainer) { @@ -85,9 +85,9 @@ public class StandardWebSocketClient extends AbstractWebSocketClient { /** * Set an {@link AsyncListenableTaskExecutor} to use when opening connections. - * - *

If this property is not configured, calls to any of the + * If this property is set to {@code null}, calls to any of the * {@code doHandshake} methods will block until the connection is established. + *

By default, an instance of {@code SimpleAsyncTaskExecutor} is used. */ public void setTaskExecutor(AsyncListenableTaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; @@ -113,16 +113,16 @@ public class StandardWebSocketClient extends AbstractWebSocketClient { final StandardWebSocketSession session = new StandardWebSocketSession(headers, attributes, localAddress, remoteAddress); - final ClientEndpointConfig.Builder configBuidler = ClientEndpointConfig.Builder.create(); - configBuidler.configurator(new StandardWebSocketClientConfigurator(headers)); - configBuidler.preferredSubprotocols(protocols); - configBuidler.extensions(adaptExtensions(extensions)); + final ClientEndpointConfig.Builder configBuilder = ClientEndpointConfig.Builder.create(); + configBuilder.configurator(new StandardWebSocketClientConfigurator(headers)); + configBuilder.preferredSubprotocols(protocols); + configBuilder.extensions(adaptExtensions(extensions)); final Endpoint endpoint = new StandardWebSocketHandlerAdapter(webSocketHandler, session); Callable connectTask = new Callable() { @Override public WebSocketSession call() throws Exception { - webSocketContainer.connectToServer(endpoint, configBuidler.build(), uri); + webSocketContainer.connectToServer(endpoint, configBuilder.build(), uri); return session; } }; @@ -139,8 +139,8 @@ public class StandardWebSocketClient extends AbstractWebSocketClient { private static List adaptExtensions(List extensions) { List result = new ArrayList(); - for (WebSocketExtension e : extensions) { - result.add(new WebSocketToStandardExtensionAdapter(e)); + for (WebSocketExtension extension : extensions) { + result.add(new WebSocketToStandardExtensionAdapter(extension)); } return result; }