diff --git a/spring-beans/src/main/java/org/springframework/beans/BeanInstantiationException.java b/spring-beans/src/main/java/org/springframework/beans/BeanInstantiationException.java index 8b7b521724c..c4b7ff45f41 100644 --- a/spring-beans/src/main/java/org/springframework/beans/BeanInstantiationException.java +++ b/spring-beans/src/main/java/org/springframework/beans/BeanInstantiationException.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. @@ -49,11 +49,12 @@ public class BeanInstantiationException extends FatalBeanException { this.beanClass = beanClass; } + /** * Return the offending bean class. */ public Class getBeanClass() { - return beanClass; + return this.beanClass; } } diff --git a/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java b/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java index e6bec014266..a0013b0b458 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java @@ -399,8 +399,7 @@ public class MBeanExporter extends MBeanRegistrationSupport implements MBeanExpo //--------------------------------------------------------------------- /** - * Kick off bean registration automatically when deployed in an - * {@code ApplicationContext}. + * Kick off bean registration automatically when deployed in an {@code ApplicationContext}. * @see #registerBeans() */ @Override diff --git a/spring-core/src/main/java/org/springframework/util/MimeType.java b/spring-core/src/main/java/org/springframework/util/MimeType.java index 91c182a4c06..894a0dc594a 100644 --- a/spring-core/src/main/java/org/springframework/util/MimeType.java +++ b/spring-core/src/main/java/org/springframework/util/MimeType.java @@ -64,7 +64,7 @@ public class MimeType implements Comparable, Serializable { static { // variable names refer to RFC 2616, section 2.2 BitSet ctl = new BitSet(128); - for (int i=0; i <= 31; i++) { + for (int i = 0; i <= 31; i++) { ctl.set(i); } ctl.set(127); @@ -155,14 +155,14 @@ public class MimeType implements Comparable, Serializable { this.type = type.toLowerCase(Locale.ENGLISH); this.subtype = subtype.toLowerCase(Locale.ENGLISH); if (!CollectionUtils.isEmpty(parameters)) { - Map m = new LinkedCaseInsensitiveMap(parameters.size(), Locale.ENGLISH); + Map map = new LinkedCaseInsensitiveMap(parameters.size(), Locale.ENGLISH); for (Map.Entry entry : parameters.entrySet()) { String attribute = entry.getKey(); String value = entry.getValue(); checkParameters(attribute, value); - m.put(attribute, value); + map.put(attribute, value); } - this.parameters = Collections.unmodifiableMap(m); + this.parameters = Collections.unmodifiableMap(map); } else { this.parameters = Collections.emptyMap(); @@ -256,7 +256,7 @@ public class MimeType implements Comparable, Serializable { /** * Return the character set, as indicated by a {@code charset} parameter, if any. - * @return the character set; or {@code null} if not available + * @return the character set, or {@code null} if not available */ public Charset getCharSet() { String charSet = getParameter(PARAM_CHARSET); @@ -266,7 +266,7 @@ public class MimeType implements Comparable, Serializable { /** * Return a generic parameter value, given a parameter name. * @param name the parameter name - * @return the parameter value; or {@code null} if not present + * @return the parameter value, or {@code null} if not present */ public String getParameter(String name) { return this.parameters.get(name); @@ -274,10 +274,10 @@ public class MimeType implements Comparable, Serializable { /** * Return all generic parameter values. - * @return a read-only map, possibly empty, never {@code null} + * @return a read-only map (possibly empty, never {@code null}) */ public Map getParameters() { - return parameters; + return this.parameters; } /** diff --git a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java index a03d4085e80..ca0edcdaba3 100644 --- a/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/core/annotation/AnnotationUtilsTests.java @@ -102,7 +102,7 @@ public class AnnotationUtilsTests { @Test public void findAnnotationFavorsInterfacesOverLocalMetaAnnotations() { Component component = AnnotationUtils.findAnnotation( - ClassWithLocalMetaAnnotationAndMetaAnnotatedInterface.class, Component.class); + ClassWithLocalMetaAnnotationAndMetaAnnotatedInterface.class, Component.class); assertNotNull(component); // By inspecting ClassWithLocalMetaAnnotationAndMetaAnnotatedInterface, one @@ -116,8 +116,8 @@ public class AnnotationUtilsTests { */ @Test public void findAnnotationFavorsInheritedAnnotationsOverMoreLocallyDeclaredComposedAnnotations() { - Transactional transactional = AnnotationUtils.findAnnotation(SubSubClassWithInheritedAnnotation.class, - Transactional.class); + Transactional transactional = AnnotationUtils.findAnnotation( + SubSubClassWithInheritedAnnotation.class, Transactional.class); assertNotNull(transactional); assertTrue("readOnly flag for SubSubClassWithInheritedAnnotation", transactional.readOnly()); } @@ -127,8 +127,8 @@ public class AnnotationUtilsTests { */ @Test public void findAnnotationFavorsInheritedComposedAnnotationsOverMoreLocallyDeclaredComposedAnnotations() { - Component component = AnnotationUtils.findAnnotation(SubSubClassWithInheritedMetaAnnotation.class, - Component.class); + Component component = AnnotationUtils.findAnnotation( + SubSubClassWithInheritedMetaAnnotation.class, Component.class); assertNotNull(component); assertEquals("meta2", component.value()); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/ConnectionHandle.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/ConnectionHandle.java index 4223dfed1a2..2343aef442a 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/ConnectionHandle.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/ConnectionHandle.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2005 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. @@ -20,12 +20,13 @@ import java.sql.Connection; /** * Simple interface to be implemented by handles for a JDBC Connection. - * Used by JdoDialect, for example. + * Used by JpaDialect and JdoDialect, for example. * * @author Juergen Hoeller * @since 1.1 * @see SimpleConnectionHandle * @see ConnectionHolder + * @see org.springframework.orm.jdo.JpaDialect#getJdbcConnection * @see org.springframework.orm.jdo.JdoDialect#getJdbcConnection */ public interface ConnectionHandle { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/AbstractColumnMaxValueIncrementer.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/AbstractColumnMaxValueIncrementer.java index 713d095a3f0..121eef0bae3 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/AbstractColumnMaxValueIncrementer.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/incrementer/AbstractColumnMaxValueIncrementer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 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. @@ -23,7 +23,7 @@ import org.springframework.util.Assert; /** * Abstract base class for {@link DataFieldMaxValueIncrementer} implementations that use * a column in a custom sequence table. Subclasses need to provide the specific handling - * of that table in their {@link #getNextKey()} implementation.. + * of that table in their {@link #getNextKey()} implementation. * * @author Juergen Hoeller * @since 2.5.3 diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate3/annotation/package-info.java b/spring-orm/src/main/java/org/springframework/orm/hibernate3/annotation/package-info.java index 62fb59ff8db..7dca40badde 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate3/annotation/package-info.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate3/annotation/package-info.java @@ -1,9 +1,5 @@ - /** - * - * Support package for the Hibernate3 Annotation add-on, - * which supports EJB3-compliant JDK 1.5+ annotations for mappings. - * + * Support package for the Hibernate 3 Annotation add-on, + * which supports JPA-compliant Java 5+ annotations for mappings. */ package org.springframework.orm.hibernate3.annotation; - diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java index 1f4ed58c432..e34b665ba83 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.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. @@ -244,8 +244,8 @@ public class HibernateJpaDialect extends DefaultJpaDialect { return new JpaSystemException(ex); } - protected Session getSession(EntityManager em) { - return em.unwrap(Session.class); + protected Session getSession(EntityManager entityManager) { + return entityManager.unwrap(Session.class); } @@ -270,14 +270,14 @@ public class HibernateJpaDialect extends DefaultJpaDialect { private static class HibernateConnectionHandle implements ConnectionHandle { - private final Session session; - // This will find a corresponding method on Hibernate 3.x but not on 4.x private static final Method sessionConnectionMethod = ClassUtils.getMethodIfAvailable(Session.class, "connection"); private static volatile Method connectionMethodToUse = sessionConnectionMethod; + private final Session session; + public HibernateConnectionHandle(Session session) { this.session = session; } @@ -286,7 +286,7 @@ public class HibernateJpaDialect extends DefaultJpaDialect { public Connection getConnection() { try { if (connectionMethodToUse == null) { - // Reflective lookup trying to find SessionImpl's connection() on Hibernate 4.x + // Reflective lookup to find SessionImpl's connection() method on Hibernate 4.x connectionMethodToUse = this.session.getClass().getMethod("connection"); } return (Connection) ReflectionUtils.invokeMethod(connectionMethodToUse, this.session); diff --git a/spring-oxm/src/main/java/org/springframework/oxm/mime/package-info.java b/spring-oxm/src/main/java/org/springframework/oxm/mime/package-info.java index a54511142d0..8a431da7bd1 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/mime/package-info.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/mime/package-info.java @@ -1,9 +1,4 @@ - /** - * * Contains (un)marshallers optimized to store binary data in MIME attachments. - * In addition to the normal methods defined by {@link Map}, this class offers the following convenience methods: + *

In addition to the normal methods defined by {@link Map}, this class offers the following + * convenience methods: *

    *
  • {@link #getFirst(String)} returns the first value associated with a given header name
  • *
  • {@link #add(String, String)} adds a header value to the list of values for a header name
  • @@ -104,9 +105,17 @@ public class HttpHeaders implements MultiValueMap, Serializable private static TimeZone GMT = TimeZone.getTimeZone("GMT"); + private final Map> headers; + /** + * Constructs a new, empty instance of the {@code HttpHeaders} object. + */ + public HttpHeaders() { + this(new LinkedCaseInsensitiveMap>(8, Locale.ENGLISH), false); + } + /** * Private constructor that can create read-only {@code HttpHeader} instances. */ @@ -126,32 +135,19 @@ public class HttpHeaders implements MultiValueMap, Serializable } } - /** - * Constructs a new, empty instance of the {@code HttpHeaders} object. - */ - public HttpHeaders() { - this(new LinkedCaseInsensitiveMap>(8, Locale.ENGLISH), false); - } /** - * Returns {@code HttpHeaders} object that can only be read, not written to. - */ - public static HttpHeaders readOnlyHttpHeaders(HttpHeaders headers) { - return new HttpHeaders(headers, true); - } - - /** - * Set the list of acceptable {@linkplain MediaType media types}, as specified by the {@code Accept} header. - * @param acceptableMediaTypes the acceptable media types + * Set the list of acceptable {@linkplain MediaType media types}, + * as specified by the {@code Accept} header. */ public void setAccept(List acceptableMediaTypes) { set(ACCEPT, MediaType.toString(acceptableMediaTypes)); } /** - * Return the list of acceptable {@linkplain MediaType media types}, as specified by the {@code Accept} header. + * Return the list of acceptable {@linkplain MediaType media types}, + * as specified by the {@code Accept} header. *

    Returns an empty list when the acceptable media types are unspecified. - * @return the acceptable media types */ public List getAccept() { String value = getFirst(ACCEPT); @@ -170,8 +166,8 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Set the list of acceptable {@linkplain Charset charsets}, as specified by the {@code Accept-Charset} header. - * @param acceptableCharsets the acceptable charsets + * Set the list of acceptable {@linkplain Charset charsets}, + * as specified by the {@code Accept-Charset} header. */ public void setAcceptCharset(List acceptableCharsets) { StringBuilder builder = new StringBuilder(); @@ -186,9 +182,8 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Return the list of acceptable {@linkplain Charset charsets}, as specified by the {@code Accept-Charset} - * header. - * @return the acceptable charsets + * Return the list of acceptable {@linkplain Charset charsets}, + * as specified by the {@code Accept-Charset} header. */ public List getAcceptCharset() { List result = new ArrayList(); @@ -213,17 +208,17 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Set the set of allowed {@link HttpMethod HTTP methods}, as specified by the {@code Allow} header. - * @param allowedMethods the allowed methods + * Set the set of allowed {@link HttpMethod HTTP methods}, + * as specified by the {@code Allow} header. */ public void setAllow(Set allowedMethods) { set(ALLOW, StringUtils.collectionToCommaDelimitedString(allowedMethods)); } /** - * Return the set of allowed {@link HttpMethod HTTP methods}, as specified by the {@code Allow} header. + * Return the set of allowed {@link HttpMethod HTTP methods}, + * as specified by the {@code Allow} header. *

    Returns an empty set when the allowed methods are unspecified. - * @return the allowed methods */ public Set getAllow() { String value = getFirst(ALLOW); @@ -241,8 +236,7 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Sets the (new) value of the {@code Cache-Control} header. - * @param cacheControl the value of the header + * Set the (new) value of the {@code Cache-Control} header. */ public void setCacheControl(String cacheControl) { set(CACHE_CONTROL, cacheControl); @@ -250,23 +244,20 @@ public class HttpHeaders implements MultiValueMap, Serializable /** * Returns the value of the {@code Cache-Control} header. - * @return the value of the header */ public String getCacheControl() { return getFirst(CACHE_CONTROL); } /** - * Sets the (new) value of the {@code Connection} header. - * @param connection the value of the header + * Set the (new) value of the {@code Connection} header. */ public void setConnection(String connection) { set(CONNECTION, connection); } /** - * Sets the (new) value of the {@code Connection} header. - * @param connection the value of the header + * Set the (new) value of the {@code Connection} header. */ public void setConnection(List connection) { set(CONNECTION, toCommaDelimitedString(connection)); @@ -274,16 +265,16 @@ public class HttpHeaders implements MultiValueMap, Serializable /** * Returns the value of the {@code Connection} header. - * @return the value of the header */ public List getConnection() { return getFirstValueAsList(CONNECTION); } /** - * Sets the (new) value of the {@code Content-Disposition} header for {@code form-data}. + * Set the (new) value of the {@code Content-Disposition} header + * for {@code form-data}. * @param name the control name - * @param filename the filename, may be {@code null} + * @param filename the filename (may be {@code null}) */ public void setContentDispositionFormData(String name, String filename) { Assert.notNull(name, "'name' must not be null"); @@ -297,17 +288,17 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Set the length of the body in bytes, as specified by the {@code Content-Length} header. - * @param contentLength the content length + * Set the length of the body in bytes, as specified by the + * {@code Content-Length} header. */ public void setContentLength(long contentLength) { set(CONTENT_LENGTH, Long.toString(contentLength)); } /** - * Return the length of the body in bytes, as specified by the {@code Content-Length} header. + * Return the length of the body in bytes, as specified by the + * {@code Content-Length} header. *

    Returns -1 when the content-length is unknown. - * @return the content length */ public long getContentLength() { String value = getFirst(CONTENT_LENGTH); @@ -315,8 +306,8 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Set the {@linkplain MediaType media type} of the body, as specified by the {@code Content-Type} header. - * @param mediaType the media type + * Set the {@linkplain MediaType media type} of the body, + * as specified by the {@code Content-Type} header. */ public void setContentType(MediaType mediaType) { Assert.isTrue(!mediaType.isWildcardType(), "'Content-Type' cannot contain wildcard type '*'"); @@ -325,9 +316,9 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Return the {@linkplain MediaType media type} of the body, as specified by the {@code Content-Type} header. + * Return the {@linkplain MediaType media type} of the body, as specified + * by the {@code Content-Type} header. *

    Returns {@code null} when the content-type is unknown. - * @return the content type */ public MediaType getContentType() { String value = getFirst(CONTENT_TYPE); @@ -335,18 +326,20 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Sets the date and time at which the message was created, as specified by the {@code Date} header. - *

    The date should be specified as the number of milliseconds since January 1, 1970 GMT. - * @param date the date + * Set the date and time at which the message was created, as specified + * by the {@code Date} header. + *

    The date should be specified as the number of milliseconds since + * January 1, 1970 GMT. */ public void setDate(long date) { setDate(DATE, date); } /** - * Returns the date and time at which the message was created, as specified by the {@code Date} header. - *

    The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown. - * @return the creation date/time + * Return the date and time at which the message was created, as specified + * by the {@code Date} header. + *

    The date is returned as the number of milliseconds since + * January 1, 1970 GMT. Returns -1 when the date is unknown. * @throws IllegalArgumentException if the value can't be converted to a date */ public long getDate() { @@ -354,41 +347,39 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Sets the (new) entity tag of the body, as specified by the {@code ETag} header. - * @param eTag the new entity tag + * Set the (new) entity tag of the body, as specified by the {@code ETag} header. */ public void setETag(String eTag) { if (eTag != null) { - Assert.isTrue(eTag.startsWith("\"") || eTag.startsWith("W/"), "Invalid eTag, does not start with W/ or \""); + Assert.isTrue(eTag.startsWith("\"") || eTag.startsWith("W/"), + "Invalid eTag, does not start with W/ or \""); Assert.isTrue(eTag.endsWith("\""), "Invalid eTag, does not end with \""); } set(ETAG, eTag); } /** - * Returns the entity tag of the body, as specified by the {@code ETag} header. - * @return the entity tag + * Return the entity tag of the body, as specified by the {@code ETag} header. */ public String getETag() { return getFirst(ETAG); } /** - * Sets the date and time at which the message is no longer valid, as specified by the {@code Expires} header. - *

    The date should be specified as the number of milliseconds since January 1, 1970 GMT. - * @param expires the new expires header value + * Set the date and time at which the message is no longer valid, + * as specified by the {@code Expires} header. + *

    The date should be specified as the number of milliseconds since + * January 1, 1970 GMT. */ public void setExpires(long expires) { setDate(EXPIRES, expires); } /** - * Returns the date and time at which the message is no longer valid, as specified by - * the {@code Expires} header. - *

    The date is returned as the number of milliseconds since January 1, 1970 GMT. - * Returns -1 when the date is unknown. - * - * @return the expires value + * Return the date and time at which the message is no longer valid, + * as specified by the {@code Expires} header. + *

    The date is returned as the number of milliseconds since + * January 1, 1970 GMT. Returns -1 when the date is unknown. */ public long getExpires() { try { @@ -400,18 +391,18 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Sets the (new) value of the {@code If-Modified-Since} header. - *

    The date should be specified as the number of milliseconds since January 1, 1970 GMT. - * @param ifModifiedSince the new value of the header + * Set the (new) value of the {@code If-Modified-Since} header. + *

    The date should be specified as the number of milliseconds since + * January 1, 1970 GMT. */ public void setIfModifiedSince(long ifModifiedSince) { setDate(IF_MODIFIED_SINCE, ifModifiedSince); } /** - * Returns the value of the {@code IfModifiedSince} header. - *

    The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown. - * @return the header value + * Return the value of the {@code IfModifiedSince} header. + *

    The date is returned as the number of milliseconds since + * January 1, 1970 GMT. Returns -1 when the date is unknown. * @deprecated use {@link #getIfModifiedSince()} */ @Deprecated @@ -420,25 +411,23 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Returns the value of the {@code If-Modified-Since} header. - *

    The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown. - * @return the header value + * Return the value of the {@code If-Modified-Since} header. + *

    The date is returned as the number of milliseconds since + * January 1, 1970 GMT. Returns -1 when the date is unknown. */ public long getIfModifiedSince() { return getFirstDate(IF_MODIFIED_SINCE); } /** - * Sets the (new) value of the {@code If-None-Match} header. - * @param ifNoneMatch the new value of the header + * Set the (new) value of the {@code If-None-Match} header. */ public void setIfNoneMatch(String ifNoneMatch) { set(IF_NONE_MATCH, ifNoneMatch); } /** - * Sets the (new) values of the {@code If-None-Match} header. - * @param ifNoneMatchList the new value of the header + * Set the (new) values of the {@code If-None-Match} header. */ public void setIfNoneMatch(List ifNoneMatchList) { set(IF_NONE_MATCH, toCommaDelimitedString(ifNoneMatchList)); @@ -457,8 +446,7 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Returns the value of the {@code If-None-Match} header. - * @return the header value + * Return the value of the {@code If-None-Match} header. */ public List getIfNoneMatch() { return getFirstValueAsList(IF_NONE_MATCH); @@ -466,7 +454,6 @@ public class HttpHeaders implements MultiValueMap, Serializable protected List getFirstValueAsList(String header) { List result = new ArrayList(); - String value = getFirst(header); if (value != null) { String[] tokens = value.split(",\\s*"); @@ -478,35 +465,37 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Sets the time the resource was last changed, as specified by the {@code Last-Modified} header. - *

    The date should be specified as the number of milliseconds since January 1, 1970 GMT. - * @param lastModified the last modified date + * Set the time the resource was last changed, as specified by the + * {@code Last-Modified} header. + *

    The date should be specified as the number of milliseconds since + * January 1, 1970 GMT. */ public void setLastModified(long lastModified) { setDate(LAST_MODIFIED, lastModified); } /** - * Returns the time the resource was last changed, as specified by the {@code Last-Modified} header. - *

    The date is returned as the number of milliseconds since January 1, 1970 GMT. Returns -1 when the date is unknown. - * @return the last modified date + * Return the time the resource was last changed, as specified by the + * {@code Last-Modified} header. + *

    The date is returned as the number of milliseconds since + * January 1, 1970 GMT. Returns -1 when the date is unknown. */ public long getLastModified() { return getFirstDate(LAST_MODIFIED); } /** - * Set the (new) location of a resource, as specified by the {@code Location} header. - * @param location the location + * Set the (new) location of a resource, + * as specified by the {@code Location} header. */ public void setLocation(URI location) { set(LOCATION, location.toASCIIString()); } /** - * Return the (new) location of a resource, as specified by the {@code Location} header. + * Return the (new) location of a resource + * as specified by the {@code Location} header. *

    Returns {@code null} when the location is unknown. - * @return the location */ public URI getLocation() { String value = getFirst(LOCATION); @@ -514,40 +503,35 @@ public class HttpHeaders implements MultiValueMap, Serializable } /** - * Sets the (new) value of the {@code Origin} header. - * @param origin the value of the header + * Set the (new) value of the {@code Origin} header. */ public void setOrigin(String origin) { set(ORIGIN, origin); } /** - * Returns the value of the {@code Origin} header. - * @return the value of the header + * Return the value of the {@code Origin} header. */ public String getOrigin() { return getFirst(ORIGIN); } /** - * Sets the (new) value of the {@code Pragma} header. - * @param pragma the value of the header + * Set the (new) value of the {@code Pragma} header. */ public void setPragma(String pragma) { set(PRAGMA, pragma); } /** - * Returns the value of the {@code Pragma} header. - * @return the value of the header + * Return the value of the {@code Pragma} header. */ public String getPragma() { return getFirst(PRAGMA); } /** - * Sets the (new) value of the {@code Upgrade} header. - * @param upgrade the value of the header + * Set the (new) value of the {@code Upgrade} header. */ public void setUpgrade(String upgrade) { set(UPGRADE, upgrade); @@ -555,18 +539,15 @@ public class HttpHeaders implements MultiValueMap, Serializable /** * Returns the value of the {@code Upgrade} header. - * @return the value of the header */ public String getUpgrade() { return getFirst(UPGRADE); } - // Date methods - /** - * Parse the first header value for the given header name as a date, return -1 if - * there is no value, or raise {@link IllegalArgumentException} if the value cannot be - * parsed as a date. + * Parse the first header value for the given header name as a date, + * return -1 if there is no value, or raise {@link IllegalArgumentException} + * if the value cannot be parsed as a date. */ public long getFirstDate(String headerName) { String headerValue = getFirst(headerName); @@ -598,12 +579,10 @@ public class HttpHeaders implements MultiValueMap, Serializable set(headerName, dateFormat.format(new Date(date))); } - // Single string methods - /** * Return the first header value for the given header name, if any. * @param headerName the header name - * @return the first header value; or {@code null} + * @return the first header value, or {@code null} if none */ @Override public String getFirst(String headerName) { @@ -613,7 +592,7 @@ public class HttpHeaders implements MultiValueMap, Serializable /** * Add the given, single header value under the given name. - * @param headerName the header name + * @param headerName the header name * @param headerValue the header value * @throws UnsupportedOperationException if adding headers is not supported * @see #put(String, List) @@ -631,7 +610,7 @@ public class HttpHeaders implements MultiValueMap, Serializable /** * Set the given, single header value under the given name. - * @param headerName the header name + * @param headerName the header name * @param headerValue the header value * @throws UnsupportedOperationException if adding headers is not supported * @see #put(String, List) @@ -660,6 +639,7 @@ public class HttpHeaders implements MultiValueMap, Serializable return singleValueMap; } + // Map implementation @Override @@ -698,8 +678,8 @@ public class HttpHeaders implements MultiValueMap, Serializable } @Override - public void putAll(Map> m) { - this.headers.putAll(m); + public void putAll(Map> map) { + this.headers.putAll(map); } @Override @@ -745,4 +725,12 @@ public class HttpHeaders implements MultiValueMap, Serializable return this.headers.toString(); } + + /** + * Return a {@code HttpHeaders} object that can only be read, not written to. + */ + public static HttpHeaders readOnlyHttpHeaders(HttpHeaders headers) { + return new HttpHeaders(headers, true); + } + } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java index a73bc5e2355..ce3d6346b31 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java @@ -1275,7 +1275,7 @@ public class DispatcherServlet extends FrameworkServlet { } private void triggerAfterCompletionWithError(HttpServletRequest request, HttpServletResponse response, - HandlerExecutionChain mappedHandler, Error error) throws Exception, ServletException { + HandlerExecutionChain mappedHandler, Error error) throws Exception { ServletException ex = new NestedServletException("Handler processing failed", error); if (mappedHandler != null) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java index eb4580c94fc..6460c96decc 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.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. @@ -26,23 +26,24 @@ import org.springframework.util.Assert; import org.springframework.web.context.ServletContextAware; /** - * A FactoryBean for configuring {@link javax.websocket.server.ServerContainer}. Since - * there is only one {@code ServerContainer} instance accessible under a well-known - * {@code javax.servlet.ServletContext} attribute, simply declaring this FactoryBean and - * using its setters allows configuring the {@code ServerContainer} through Spring - * configuration. + * A {@link FactoryBean} for configuring {@link javax.websocket.server.ServerContainer}. + * Since there is usually only one {@code ServerContainer} instance accessible under a + * well-known {@code javax.servlet.ServletContext} attribute, simply declaring this + * FactoryBean and using its setters allows for configuring the {@code ServerContainer} + * through Spring configuration. * *

    This is useful even if the {@code ServerContainer} is not injected into any other - * bean. For example, an application can configure a {@link org.springframework.web.socket.server.support.DefaultHandshakeHandler}, a - * {@link org.springframework.web.socket.sockjs.SockJsService}, or {@link ServerEndpointExporter}, - * and separately declare this FactoryBean in order to customize the properties of the - * (one and only) {@code ServerContainer} instance. + * bean within the Spring application context. For example, an application can configure + * a {@link org.springframework.web.socket.server.support.DefaultHandshakeHandler}, + * a {@link org.springframework.web.socket.sockjs.SockJsService}, or + * {@link ServerEndpointExporter}, and separately declare this FactoryBean in order + * to customize the properties of the (one and only) {@code ServerContainer} instance. * * @author Rossen Stoyanchev * @since 4.0 */ public class ServletServerContainerFactoryBean - implements FactoryBean, InitializingBean, ServletContextAware { + implements FactoryBean, ServletContextAware, InitializingBean { private Long asyncSendTimeout; @@ -120,7 +121,7 @@ public class ServletServerContainerFactoryBean @Override public Class getObjectType() { - return ServerContainer.class; + return (this.serverContainer != null ? this.serverContainer.getClass() : ServerContainer.class); } @Override diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java index 31a54287e0b..1bd00abe229 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java @@ -5,7 +5,7 @@ * 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 + * 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, @@ -16,6 +16,7 @@ package org.springframework.web.socket.server.standard; +import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.websocket.server.ServerEndpoint; @@ -114,7 +115,7 @@ public class SpringConfigurator extends Configurator { beanNamesByType.put(endpointClass, NO_VALUE); if (names.length > 1) { throw new IllegalStateException("Found multiple @ServerEndpoint's of type [" + - endpointClass.getName() + "]: bean names " + names); + endpointClass.getName() + "]: bean names " + Arrays.asList(names)); } } }