Compare commits

...

1747 Commits

Author SHA1 Message Date
Arjen Poutsma b266bef3e8 Spring 3.0.4 2010-08-19 10:50:59 +00:00
Chris Beams 9ab2c6628b Split IoC chapter DocBook XML into multiple files (SPR-7467)
All <section/> elements in beans.xml >=~ 500 lines have been broken out
into separate documents with DOCTYPE 'section'. This refactoring makes
working with these files much easier in wysiwyg editors (namely
oXygen Author).

For consistency, this same refactoring should be applied to all other
chapters much larger than 1500 lines, such as aop.xml (3861), mvc.xml
(3466), jdbc.xml (3042), and so on.

beans.xml and the new section files have also been formatted for
consistency and to avoid whitespace diffs as much as possible into the
future.
2010-08-18 10:37:35 +00:00
Juergen Hoeller 2f980d95ff final preparations for 3.0.4 release 2010-08-18 09:13:10 +00:00
Juergen Hoeller 9857ba077b revised constructor argument caching for highly concurrent creation scenarios (follow-up to SPR-7423) 2010-08-18 09:08:55 +00:00
Chris Beams 9a088b8128 Document BeanFactoryPostProcessor implementation constraints (SPR-7466)
JavaDoc and reference docs now warn developers against interacting with
bean instances within BeanFactoryPostProcessor implementations in order
to avoid premature bean instantiation.

See SPR-7450 for an example of a third-party BFPP
(OAuthTokenLifecycleRegistryPostProcessor) prematurely instantiating
a FactoryBean instance, such that bean post-processing is bypassed
and autowired injection (via @Inject) never occurs.
2010-08-17 09:50:22 +00:00
Juergen Hoeller e4792aaf33 polishing 2010-08-16 21:24:21 +00:00
Juergen Hoeller b58e19b04c polishing 2010-08-16 20:39:28 +00:00
Juergen Hoeller 48869a86cc consistent converting and escaping of label values (following AbstractMultiCheckedElementTag's SPR-7174) 2010-08-16 20:39:14 +00:00
Juergen Hoeller a032ce12cb renamed "mapping-order" to "order"; added "cache-period" 2010-08-16 19:04:51 +00:00
Juergen Hoeller ecb351c475 return 404 in case of no media type found 2010-08-16 19:02:12 +00:00
Juergen Hoeller b51f067f74 @MVC handler method resolution 2010-08-15 23:51:01 +00:00
Juergen Hoeller 9b3fbc2333 WebDataBinder and @MVC request param binding detect and introspect MultipartFile arrays as well (SPR-2784) 2010-08-15 23:20:55 +00:00
Juergen Hoeller ee04046ed7 polishing 2010-08-15 23:04:19 +00:00
Juergen Hoeller 3cf22a0255 lazy creation of MessageFormats 2010-08-15 23:04:02 +00:00
Juergen Hoeller 0aec5efb56 polishing 2010-08-15 23:01:10 +00:00
Juergen Hoeller 5c3cf5f672 added testStringArrayToResourceArray 2010-08-15 23:00:46 +00:00
Juergen Hoeller d1afb29074 Servlet/PortletContextResource inherit isReadable, contentLength and lastModified from AbstractFileResolvingResource 2010-08-15 22:57:37 +00:00
Juergen Hoeller b2b1ff60dd CommonsMultipartResolver cleans up all multipart files in case of multiple files for same name as well (SPR-2784) 2010-08-15 22:52:54 +00:00
Juergen Hoeller 255d1ad434 WebDataBinder and @MVC request param binding detect and introspect MultipartFile arrays as well (SPR-2784) 2010-08-15 22:51:02 +00:00
Juergen Hoeller 5b0448c609 MockMultipartHttpServletRequest pre-defines method "POST" and content type "multipart/form-data" 2010-08-15 22:46:15 +00:00
Juergen Hoeller 1841b14b21 consistent mocks between modules 2010-08-15 22:02:40 +00:00
Juergen Hoeller 19fcbeafb4 renamed UriUtilsTest to UriUtilsTests 2010-08-15 22:01:33 +00:00
Juergen Hoeller ace7b072f1 fixed accidental change to byte array loop 2010-08-15 21:43:24 +00:00
Juergen Hoeller fd159246ed polishing 2010-08-15 21:26:43 +00:00
Juergen Hoeller 2516bc0faf polishing 2010-08-15 21:24:35 +00:00
Juergen Hoeller 3963ff6e3b use generic Class<?> in TransactionAttributeSource signature 2010-08-15 21:19:52 +00:00
Juergen Hoeller a5b30fd074 polishing 2010-08-15 21:17:39 +00:00
Juergen Hoeller 35971f9f90 revised handler method resolution, in particular with respect to generic interfaces (SPR-7355) 2010-08-15 21:12:54 +00:00
Juergen Hoeller 49a2970def search super-interfaces as well (SPR-7355) 2010-08-14 21:12:58 +00:00
Juergen Hoeller 665a997f66 refined exception messages; added unit tests for custom array types 2010-08-14 19:42:29 +00:00
David Syer 5109501d16 SPR-7463: switched to instance variable 2010-08-14 11:09:42 +00:00
Juergen Hoeller e27f4b1577 revised DispatcherServlet's last-modified handling to properly work with scoped controllers 2010-08-12 23:32:53 +00:00
Juergen Hoeller f8690cf791 DispatcherServlet etc 2010-08-12 22:55:12 +00:00
Juergen Hoeller f6c07b371f revised DispatcherServlet's last-modified handling to properly work with scoped controllers; added HEAD support to ResourceHttpRequestHandler 2010-08-12 22:54:24 +00:00
Juergen Hoeller 29b12adbaa revised web scoping tests 2010-08-12 22:49:26 +00:00
Juergen Hoeller a79c015297 refined logging of handler objects in order to avoid early access to scoped proxies (SPR-7456) 2010-08-12 22:14:20 +00:00
Juergen Hoeller 01b65cd201 polishing 2010-08-12 18:49:13 +00:00
Juergen Hoeller 61fcef1471 polishing 2010-08-12 18:42:13 +00:00
Juergen Hoeller 34ebad5fff fixed JSP EvalTag to render null result as empty String instead of "null" String (SPR-7459) 2010-08-12 18:41:24 +00:00
Juergen Hoeller 9bd0bd9c3a SpringTemplateLoader supports last-modified timestamp through Resource abstraction (SPR-7454) 2010-08-12 10:56:28 +00:00
Juergen Hoeller 99733aef2a introspect superclass when given a CGLIB proxy as target class (SPR-7448); use generic Class<?> in TransactionAttributeSource signature 2010-08-11 21:47:50 +00:00
Juergen Hoeller 8a23ce917a Spring's constructor resolution consistently finds non-public multi-arg constructors (SPR-7453) 2010-08-11 19:24:30 +00:00
Arjen Poutsma 6e303d25c4 SPR-7427 - URL in a redirect is not escaped by RedirectView 2010-08-11 11:44:44 +00:00
Arjen Poutsma ac1d2d93d6 SPR-7439 - JSON (jackson) @RequestBody marshalling throws awkward exception 2010-08-11 08:16:12 +00:00
Chris Beams b90260f8d2 Link to Spring Integration at end of event coverage 2010-08-11 06:36:00 +00:00
Chris Beams 258a47435d Remove XFire reference documentation (SPR-7434)
XFire is now CXF (per http://xfire.codehaus.org), and given that Spring
does not actually ship with any explicit XFire support, it makes sense
to remove the documentation completely.  CXF does provide support for
writing services with Spring, and they provide their own documentation.

See http://cxf.apache.org/docs/writing-a-service-with-spring.html
2010-08-10 23:10:35 +00:00
Juergen Hoeller 1503a139e2 fixed yet another regression with respect to newlines (SPR-7449) 2010-08-10 22:36:36 +00:00
Chris Beams 3d2dd447af Remove Chapter 27 from reference documentation (SPR-7433)
Chapter 27 covered @Required and RequiredAnnotationBeanPostProcessor but
did not hold together as a chapter unto itself.  The IoC chapter already
makes mention of @Required and RequiredAnnotationBeanPostProcessor,
though not in quite as much detail as Chapter 27 did.  Links have been
updated throughout to reference these sections and Chatper 27 has been
eliminated entirely.
2010-08-10 22:13:55 +00:00
Chris Beams abf523698c Apply parentheses consistently within <methodname/>
Prior to change, there were 175 instances of <methodname/> elements
including parentheses (e.g.: <methodname>foo()</methodname>, and
36 instances without.

Now all 211 instances include parentheses for consistency.
2010-08-10 22:13:50 +00:00
Sam Brannen e3400f77c9 [SPR-7449] @Ignore'd failing test for regression in ResourceDatabasePopulator. 2010-08-10 21:51:35 +00:00
Chris Beams 9008cf907a Overhaul custom ApplicationEvent documentation (SPR-7422, SPR-7395)
Documentation now:

- Reflects generic use of ApplicationListener interface

- Demonstrates use of ApplicationEventPublisher(Aware) instead of
  ApplicationContext(Aware) for publishing custom events

- Provides a more complete narrative as to how each of the publisher,
  listener, and event objects interact with one another
2010-08-10 20:59:36 +00:00
Chris Beams 720f7ecf48 Polish validation chapter program listings
<programlisting/> elements must contain no newlines at beginning or end.
The following is an example of what not to do:

    <programlisting><![CDATA[
package com.foo.bar;

class XFoo implements Foo<X> {
}]]>
    </programlisting>

This leaves newlines at the beginning and end of the programlisting
panel within the PDF. Instead, do it like this:

    <programlisting><![CDATA[package com.foo.bar;

class XFoo implements Foo<X> {
}]]></programlisting>
2010-08-10 13:48:48 +00:00
Chris Beams 87caa13363 Clarify ConversionServiceFactoryBean documentation (SPR-7362)
- The sentence at the end of section 5.5.5 now refers to the
  <mvc:annotation-driven conversion-service="..."/> example at the end
  of section 5.6.

- The sentence at the end of section 5.5.5 refers to the
  FormatterConversionServiceFactoryBean section that follows.
2010-08-10 13:48:44 +00:00
Chris Beams cecee4d02b Fix typo in validation chapter 2010-08-10 13:48:41 +00:00
Chris Beams f45bb92917 Format validation chapter docbook source 2010-08-10 13:48:34 +00:00
Chris Beams 73ec840279 Remove dependency-check coverage from reference docs (SPR-7303)
- 'dependency-check' attribute of the <bean/> element was removed
  in the spring-beans-3.0 XSD; documentation now reflects this change.

- 'autodetect' was removed from the enumeration of possible values
  for autowire mode in the spring-beans-3.0 XSD; documentation now
  reflects this change.

Note that the underlying functionality for these values has not been
removed from Spring Core.  Users of Spring 3.0 who still need this
support may choose to use spring-beans-2.5.xsd in order to preserve
backward-compatibility.
2010-08-10 13:48:26 +00:00
Juergen Hoeller 771db05608 changed contentLength() from int to long 2010-08-09 15:58:07 +00:00
Juergen Hoeller e250ff0fb4 fixed package-info 2010-08-08 23:31:48 +00:00
Juergen Hoeller b4cd58394a revised ResourceHttpRequestHandler (SPR-7116) 2010-08-08 23:25:49 +00:00
Juergen Hoeller bda3d81bc9 implement file resolution for isReadable() as well 2010-08-08 23:21:41 +00:00
Juergen Hoeller 2b4e714c68 Resource refinements, etc 2010-08-08 23:00:30 +00:00
Juergen Hoeller 82730830d1 added "contentLength()" method to Resource abstraction; URL-based Resource variants introspect "last-modified" and "content-length" response headers (SPR-5465); refined "exists()" check for UrlResource (HEAD request) and ClassPathResource (URL resolution) 2010-08-08 22:53:52 +00:00
Chris Beams f5b0edbebd Typo fix 'a enterprise' -> 'an enterprise' 2010-08-07 22:47:32 +00:00
Juergen Hoeller 48874801a3 fixed accidental regression with respect to newlines 2010-08-07 18:02:51 +00:00
Juergen Hoeller 58b07f586d SpEL passes full collection type context to ConversionService (SPR-7410) 2010-08-07 17:54:23 +00:00
Juergen Hoeller 7cddb1c50e polishing 2010-08-07 16:52:16 +00:00
Juergen Hoeller a8133a9917 ignore empty statements (SPR-7363) 2010-08-07 16:52:05 +00:00
Chris Beams bf4b9f5ffb Replace 'Java EE' with 'enterprise Java' as appropriate
Also change 'JEE' -> 'Java EE'
2010-08-07 14:47:17 +00:00
Chris Beams 0625990020 Add missing equals sign to code snippet (SPR-7339) 2010-08-07 13:57:28 +00:00
Chris Beams e116a29795 Change 'lastName*' -> 'lastName' for error display (SPR-7339)
It's not clear why the asterisk would be necessary, as 'lastName'
alone should match all errors associated with that field.
2010-08-07 13:57:26 +00:00
Chris Beams d97f899bee Fix typos (SPR-7339) 2010-08-07 13:57:23 +00:00
Chris Beams 5ce4cada53 Fix typos in Chapter 27 (SPR-7339)
Note that SPR-7433 has also been created to consider removing this
chapter entirely.
2010-08-07 13:57:18 +00:00
Chris Beams b87b23087d Replace 'recourse' with simpler terms (SPR-7339) 2010-08-07 13:57:16 +00:00
Chris Beams bab902e85b Fix typo 'type form'->'type from' (SPR-7339) 2010-08-07 13:57:14 +00:00
Chris Beams 5e64f228b6 Consistently refer to 'default no-arg constructor' (SPR-7339) 2010-08-07 13:57:12 +00:00
Chris Beams edad222e6a Distinguish JMS remoting from JMS messaging support (SPR-7339) 2010-08-07 13:57:09 +00:00
Chris Beams 91172f4f43 Clarify ServletException is thrown when no view is resolved (SPR-7339) 2010-08-07 13:57:07 +00:00
Chris Beams 3a9fc70f91 Add @Repository use to JdbcTemplate Best Practices (SPR-7339) 2010-08-07 13:57:03 +00:00
Chris Beams 30b0e5e250 Improve explanation re DAOs and persistence resources (SPR-7339) 2010-08-07 13:57:01 +00:00
Chris Beams 55f2fe7dd5 Replace 'tropes' language (SPR-7339) 2010-08-07 13:56:58 +00:00
Chris Beams d109879b6c Ignore OS X .DS_Store files 2010-08-07 13:56:49 +00:00
Juergen Hoeller 4af36454ba PortletWrappingController supports Portlet 2.0 resource and event requests as well (SPR-7430) 2010-08-07 11:47:32 +00:00
Juergen Hoeller 753cda3d81 Portlet AbstractController consistently uses session mutex if "synchronizeOnSession" is active 2010-08-07 11:46:15 +00:00
Juergen Hoeller b054ca4a48 reintroduced createInstance() template method in deprecated form (SPR-7428) 2010-08-07 11:16:46 +00:00
Juergen Hoeller 9ef47b82a5 added missing setter method for the "valueSeparator" property (SPR-7429) 2010-08-07 11:03:49 +00:00
Jeremy Grelle 103297cf59 SPR-7116 - Added documentation for <mvc:default-servlet-handler> 2010-08-03 16:14:37 +00:00
Michael Isvy 6adf8d18df SPR-7416
Typo on the name of the @Autowired annotation:  @Autowire -> @Autowired
Usage of the @Value annotation: ${jdbcProperties.url} -> ${jdbc.url} (inside section "Declaring @Configuration classes as plain Spring <bean/> elements").
2010-08-03 07:14:29 +00:00
Jeremy Grelle 8e77701358 SPR-7116 - Added documentation for <mvc:resources> 2010-08-03 01:23:24 +00:00
Jeremy Grelle c1246d506c SPR-7116 - javadocs 2010-08-02 22:37:14 +00:00
Juergen Hoeller af0fac9099 JaxWsPortProxyFactoryBean takes "wsdlDocumentUrl", "namespaceUri" etc defaults from @WebService (SPR-7412) 2010-08-02 21:44:14 +00:00
Jeremy Grelle 367048c5d1 SPR-7116 - Simplified (removed gzip and white-listing) and completed XML namespace config. 2010-07-31 01:09:40 +00:00
Juergen Hoeller 061af2f25f ultimateTargetClass falls back to raw class instead of returning null 2010-07-30 15:13:38 +00:00
Juergen Hoeller faad0f4bb1 AutodetectCapableMBeanInfoAssembler signature consistently refers to Class<?> (SPR-7405) 2010-07-29 20:29:32 +00:00
Juergen Hoeller c3a639f07d fixed concurrency issue in TypedStringValue, showing for nested typed Maps in prototype beans (SPR-7398); optimized building of keyed arg names in BeanDefinitionValueResolver 2010-07-29 13:49:09 +00:00
Jeremy Grelle bd4f4d0d30 SPR-7116 further work in progress. Added white-listing by media type, checking MIME type from the ServletContext, and some additional validations. 2010-07-29 00:01:13 +00:00
Juergen Hoeller 3e0003a1a0 TaskExecutorFactoryBean (as used by task:executor) exposes full ThreadPoolTaskExecutor type (SPR-7403) 2010-07-28 17:39:03 +00:00
Jeremy Grelle 60a69bd653 SPR-7116 work in progress. ResourceHttpRequestHandler is now functionally equivalent to the Spring JS ResourceServlet, with the exception of the resource concatenation feature (which will be deferred for reconsideration in 3.1). 2010-07-27 04:45:43 +00:00
Juergen Hoeller 72da237474 FilterDefinitionFactoryBean supports Hibernate 3.6.0.beta1 as well 2010-07-27 00:04:23 +00:00
Juergen Hoeller d3cb310962 bunch of fixes for 3.0.4 2010-07-26 21:03:55 +00:00
Juergen Hoeller d4f73c1d3d turned TypeDescriptor.UNKNOWN into an internal detail (SPR-7349) 2010-07-26 20:55:14 +00:00
Juergen Hoeller 3c0ce48cbd added further test case for property type detection with generic interface 2010-07-26 20:39:27 +00:00
Juergen Hoeller 8e5c033446 avoid double ConversionFailedException nesting 2010-07-26 20:33:34 +00:00
Juergen Hoeller f04febaf2d fixed @PathVariable regression in combination with ConversionService usage on DataBinder 2010-07-26 20:14:57 +00:00
Juergen Hoeller b261d336b1 HibernateJpaDialect correctly closes borrowed connections even for nested JDBC executions (SPR-7393) 2010-07-26 12:33:37 +00:00
Arjen Poutsma 8519a2d705 Fixed execute -> exchange 2010-07-26 08:00:43 +00:00
Juergen Hoeller f90125f984 fixed WeakReferenceMonitor to never stop its monitoring thread if an entry has been registered (SPR-7373) 2010-07-23 18:18:16 +00:00
Juergen Hoeller 18af8a00f9 added license header 2010-07-23 10:09:33 +00:00
Juergen Hoeller b7b7c067c6 GenericTypeResolver works for nested parameterized types and for generic superclasses as well (SPR-7389) 2010-07-22 15:57:55 +00:00
Arjen Poutsma 60fa490b50 Typo 2010-07-22 09:31:01 +00:00
Chris Beams 605ac0e230 Remove redundant @Aspect from CodeStyleAspect.aj
This has been present for quite some time, and compilation at the
command line was never a problem.  However, after upgrading to
STS 2.3.3.M2, errors started appearing in the Problems tab about
'duplicate @Aspect annotations'.  This message was a bit misleading
given that the underlying issue is that applying an @Aspect annotation
on an aspect declared in .aj style is redundant.  Andy Clement is
investigating as well, but for now the reason for the change in behavior
remains a mystery.
2010-07-21 19:18:11 +00:00
Juergen Hoeller 7304c09021 Spring field error arguments include actually declared annotation attributes in alphabetical order (SPR-6730) 2010-07-21 14:24:10 +00:00
Chris Beams 9bcfc5480d Fix dependency issues in .context pom and .classpath
Hibernate validator had been updated to 4.1.0 in the ivy metadata, but
not yet reflected in the .classpath file.  The pom.xml had been updated
but there was a typo - scope read 'coompile', instead of 'compile'.
2010-07-21 12:04:06 +00:00
Chris Beams 022e74ea3d Add .springBeans to .gitignore 2010-07-21 12:04:03 +00:00
Juergen Hoeller 4d5a9c41e0 allow for converting a property value based on the corresponding property name (SPR-7386) 2010-07-21 11:17:44 +00:00
Juergen Hoeller 11886f2149 polishing 2010-07-20 20:02:43 +00:00
Juergen Hoeller 1dce03af78 JSR-303 Pattern message resolvable through Spring MessageSource (despite special characters; SPR-7329) 2010-07-20 20:02:23 +00:00
David Syer 3afe8aee18 Fix hibernate-validatin version 2010-07-20 15:41:41 +00:00
David Syer e26fc66523 SPR-7384: switch to using 1-12 for month numbers 2010-07-20 15:25:00 +00:00
Arjen Poutsma c24ffc9175 SPR-7381 - HTTP headers returned as part of ResponseEntity(MultiValueMap<String, String> headers, HttpStatus statusCode) are ignored when using this constructor 2010-07-16 13:47:19 +00:00
Arjen Poutsma 228c0b18cb SPR-7345 - HTTP 405 (Method not supported) returned when 404 Status (Not Found) was expected 2010-07-16 10:06:19 +00:00
Juergen Hoeller b456bc107b DefaultMessageListenerContainer triggers Session commit even if no message has been received (SPR-7366) 2010-07-15 19:43:56 +00:00
Juergen Hoeller f25a04c69c fixed JMS CachingConnectionFactory to correctly cache a producer without fixed destination as well (SPR-7148) 2010-07-15 17:05:30 +00:00
Arjen Poutsma f8425a5f7b SPR-7346 - @RequestHeader negation expressions (e.g. !Accept=text/plain) are not applied 2010-07-15 08:49:18 +00:00
Juergen Hoeller dcad6c341b BeanWrapper, EvalTag, etc 2010-07-12 21:05:30 +00:00
Juergen Hoeller 66abad2540 BeanWrapper preserves annotation information for individual array/list/map elements (SPR-7348) 2010-07-12 20:56:22 +00:00
Juergen Hoeller e0e1cb3c24 polishing 2010-07-12 19:54:37 +00:00
Juergen Hoeller df5e9b1211 MVC HandlerExceptionResolvers prevent caching for exception views if preventResponseCaching=true (SPR-7334) 2010-07-12 19:54:05 +00:00
Juergen Hoeller 263fabb0fc JSP EvalTag resolves "@myBeanName" references in expressions against the WebApplicationContext (SPR-7312); for consistency, expressions in an ApplicationContext support the same syntax against the local BeanFactory 2010-07-12 19:36:26 +00:00
Juergen Hoeller d1d5e2d52a JmsResourceHolder does not ignore IllegalStateException from locally synchronized transaction (SPR-7360) 2010-07-08 12:15:35 +00:00
Juergen Hoeller 96b9cf6ca9 DefaultJdoDialect supports JDO 3.0 query timeout facility (as supported by DataNucleus 2.1) 2010-07-08 11:47:30 +00:00
Juergen Hoeller 3918518779 polishing 2010-07-08 11:45:52 +00:00
Juergen Hoeller 7e9e8401f7 @ExceptionHandler works for inherited method and CGLIB proxies on Portlet controllers as well (SPR-7337) 2010-07-08 11:45:35 +00:00
Andy Clement cb72fe1be2 SpEL documentation (!) on @Bean referencing, inline lists and array construction 2010-07-06 21:40:25 +00:00
Andy Clement f5ced9be38 SPR-7335: support for expression inline lists and array construction 2010-07-06 21:00:54 +00:00
Andy Clement 88560fd910 SPR-7343: StandardEvaluationContext not threadsafe in its lazy initialization 2010-07-02 16:08:25 +00:00
Andy Clement 6de707d8e0 polish 2010-07-02 16:07:13 +00:00
Andy Clement 0c1424acb6 polish 2010-07-02 16:06:59 +00:00
Juergen Hoeller 0d405fd124 fixed typos (SPR-7332) 2010-06-29 10:22:49 +00:00
Chris Beams 45ed0ba43c licensing header 2010-06-28 23:20:44 +00:00
Chris Beams cd271fca43 attempted to repro SPR-7318 to no avail 2010-06-28 22:57:26 +00:00
Juergen Hoeller 3f31a1cf75 added "validationMessageSource" property to LocalValidatorFactoryBean, for Spring-based messages (SPR-7307) 2010-06-28 22:08:31 +00:00
Juergen Hoeller 4d56b89619 transaction names based on method id from most specific method (target class instead of interface; SPR-7317) 2010-06-28 19:47:13 +00:00
Juergen Hoeller f9017ea05d added formCheckbox to macro list (SPR-7322) 2010-06-28 18:23:56 +00:00
Juergen Hoeller ce6194c7c3 fixed typo (SPR-7321) 2010-06-28 18:18:26 +00:00
Sam Brannen 8bd0633697 [SPR-7323] SpEL 'select last' operator now works consistently with maps. 2010-06-26 21:13:02 +00:00
Sam Brannen db7531be60 [SPR-7323] SpEL 'select last' operator now works consistently with maps. 2010-06-26 21:10:20 +00:00
Costin Leau 94292cad1c SPR-6819
+ fix EBR pom as well
2010-06-25 09:32:29 +00:00
Arjen Poutsma 8d5662ec7a typo 2010-06-24 11:52:44 +00:00
Arjen Poutsma c059f53823 SPR-7305 - o.s.http.client.SimpleClientHttpRequestFactory does not allow to specify a java.net.Proxy 2010-06-24 11:42:28 +00:00
Arjen Poutsma 3160ddf0e8 SPR-7314 - RestTemplate does not handle null uri template parameters 2010-06-24 09:33:06 +00:00
Arjen Poutsma ccdd1a9efd SPR-7316 - remove "Accept-Charset" header from response, generated by @ResponseBody 2010-06-24 09:15:50 +00:00
Juergen Hoeller d956da2fa1 ConversionService etc 2010-06-23 21:55:30 +00:00
Juergen Hoeller 9e4140e549 growCollection fails for element type Object as well; prefer use of getElementTypeDescriptor() 2010-06-23 21:00:28 +00:00
Juergen Hoeller 942c656970 removed eager skipping of empty collection conversion, for UtilNamespaceHandlerTests to pass again 2010-06-23 20:05:00 +00:00
Juergen Hoeller 7faf4a6713 AbstractJaxWsServiceExporter supports "bindingType" bean property, overriding @BindingType; AbstractJaxWsServiceExporter supports "webServiceFeatures" bean property on JAX-WS 2.2 2010-06-23 19:55:47 +00:00
Juergen Hoeller 41d6f8e9ed turned formatter implementations non-final 2010-06-23 19:34:29 +00:00
Juergen Hoeller 0d7ce3eac5 refined ignoreUnresolvablePlaceholders javadoc 2010-06-23 19:33:03 +00:00
Juergen Hoeller e6b708376d skip collection conversion early if empty 2010-06-23 19:32:29 +00:00
Juergen Hoeller 8f8fc97b79 fixed test failures with respect to null handling and PropertyTypeDescriptor usage for collection elements 2010-06-23 19:31:51 +00:00
Juergen Hoeller 27b04036a9 ConversionService is able to deal with empty collections and nested collections (fixed regression; SPR-7289, SPR-7293); ConversionService properly handles nested Resource arrays in Map values (fixed regression; SPR-7295); ConversionService does not accidentally use copy constructor for same type (SPR-7304) 2010-06-23 17:29:34 +00:00
Juergen Hoeller 7f91153bba BeanWrapper/DataBinder's "autoGrowNestedPaths" works for Maps as well (SPR-7285) 2010-06-23 17:27:37 +00:00
Juergen Hoeller 5d6937bab1 Portlet @MVC's implicit render model will be updated at the end of the event phase 2010-06-23 17:24:28 +00:00
Juergen Hoeller ef3b70d40a Spring's MessageEndpointFactory classes are now JCA 1.6 compliant as well 2010-06-23 17:23:11 +00:00
Keith Donald ab13e9b5ec mvc resources handler initial commit 2010-06-22 21:36:45 +00:00
Keith Donald 5a1bd20864 mvc resources handler initial commit 2010-06-22 21:26:03 +00:00
Oliver Gierke e11a40f809 SPR-7311 - Clarify usage of PropertyEditorRegistrars VS. plain configuration of customEditors property in CustomEditorConfigurer JavaDoc. 2010-06-22 12:41:59 +00:00
Oliver Gierke 868d3a4451 Fixed language attribute in code sample to activate currently missing syntax highlighting. 2010-06-22 12:41:55 +00:00
Andy Clement 569cb91573 javadoc fix 2010-06-21 22:13:49 +00:00
Sam Brannen 32167790b0 Fixed "of the Spring" text and reformatted. 2010-06-21 20:37:08 +00:00
Juergen Hoeller 20ea69e06b prepared for 3.0.4 release 2010-06-20 19:38:29 +00:00
Juergen Hoeller b2204ec94e @CookieValue returns decoded cookie value in a Servlet environment (SPR-7286) 2010-06-20 19:21:00 +00:00
Juergen Hoeller de06de11fe fixed order 2010-06-20 19:11:51 +00:00
Juergen Hoeller 07e9f1775b added test for invalid binding to ClassLoader 2010-06-20 19:11:36 +00:00
Juergen Hoeller d49c067770 DispatcherServlet applies view name translation to error views as well (SPR-7298) 2010-06-20 19:06:56 +00:00
Juergen Hoeller 89fadb987c mvc:annotation-driven reliably detects JSR-303 and JAXB2 in an OSGi environment as well (SPR-7291) 2010-06-20 18:55:21 +00:00
Juergen Hoeller 037c277351 @MVC handler methods reliably resolve MultipartRequest arguments with HiddenHttpMethodFilter (SPR-7296) 2010-06-20 18:45:42 +00:00
Juergen Hoeller 5e5a8a09cf Jaxb2Marshaller's "marshallerProperties" Map accepts any value type (SPR-7292) 2010-06-20 18:28:07 +00:00
Juergen Hoeller 91560774a0 accept any EHCache 2.x version as well (SPR-7302) 2010-06-20 18:19:51 +00:00
Arjen Poutsma b31c34ed7d Upgrading version to 3.0.4 2010-06-15 14:18:29 +00:00
Juergen Hoeller 7b189d1124 avoid ConverterNotFoundException if source object is assignable to target type 2010-06-15 09:35:39 +00:00
Costin Leau bd88bbab4a SPR-6819
changed JPA dependency to provided
2010-06-15 06:33:20 +00:00
Oliver Gierke 420f8237c0 Rollback accidental commit :/. 2010-06-15 05:33:39 +00:00
Oliver Gierke 897aab9f59 Added missing imports.
Added additional annotation to test interface to make sure no ClassCastException appears.
2010-06-15 05:29:48 +00:00
Oliver Gierke a383633630 Added helper methods to access method parameter annotations. 2010-06-15 05:29:45 +00:00
Juergen Hoeller 4a0c2f8879 final touches for 3.0.3 2010-06-14 23:27:15 +00:00
Juergen Hoeller 0e59fc4a15 smarter guessing of the element type (SPR-7283) 2010-06-14 23:26:44 +00:00
Juergen Hoeller 96b1dc9db4 ConversionService fully supports conversion from String to MediaType now (through 'valueOf'; SPR-7282); revised exception handling in ObjectToObjectConverter, avoiding InvocationTargetExceptions 2010-06-14 23:23:49 +00:00
Juergen Hoeller 902938e95f smarter guessing of the element type (SPR-7283) 2010-06-14 22:58:18 +00:00
Juergen Hoeller 379bc5a8a6 properly support void.class in TypeDescriptor and GenericConversionService (SPR-7281) 2010-06-11 21:40:56 +00:00
Juergen Hoeller cbb90236dc polished VFS support (SPR-7197) 2010-06-11 19:54:58 +00:00
Juergen Hoeller 53ed9b282b added warnings regarding accidental usage of @Configurable on a managed bean (SPR-7216) 2010-06-11 13:48:52 +00:00
Juergen Hoeller 3d3f8f3219 added explicit section on autodetecting aspects through component scanning (SPR-7246) 2010-06-11 13:28:14 +00:00
Juergen Hoeller 28a765f32b fixed JExcel example code (SPR-7277) 2010-06-11 10:49:41 +00:00
Juergen Hoeller 65655b949f set Tiles 2.2 ELAttributeEvaluator on RendererFactory as well (SPR-7251) 2010-06-10 22:13:31 +00:00
Juergen Hoeller c8984d2e30 Portlet MVC, etc 2010-06-10 21:49:02 +00:00
Juergen Hoeller 11330baf77 DefaultListableBeanFactory checks for alias circle on registerAlias (avoiding endless loop; SPR-7274) 2010-06-10 21:45:47 +00:00
Juergen Hoeller 433b4eff8f MailSendException includes all messages as failed messages in case of a connect failure (SPR-7245) 2010-06-10 21:06:13 +00:00
Juergen Hoeller 2f4453a99c revised Portlet SessionStatus.setComplete() to avoid re-exposure of attributes in render phase (SPR-6126); shortened implicit model render parameter name to "implicitModel" (SPR-7149) 2010-06-09 20:09:53 +00:00
Arjen Poutsma 65885d1dfd SPR-7263 - TypeMismatchException instead of IllegalArgumentException: argument type mismatch for wrong RequestBody 2010-06-09 10:37:17 +00:00
Arjen Poutsma 723f94fd0e SPR-7263 - TypeMismatchException instead of IllegalArgumentException: argument type mismatch for wrong RequestBody 2010-06-09 10:35:41 +00:00
Juergen Hoeller 2a140addfd added EmbeddedValueResolver support to FormattingConversionServiceFactoryBean (SPR-7087) 2010-06-08 20:40:54 +00:00
Juergen Hoeller eb3a3a6de2 reuse a shared UrlPathHelper instance in order to avoid reinstantiation overhead (SPR-7269) 2010-06-08 14:14:08 +00:00
Juergen Hoeller e12fbd3e2b avoid EntityManager close() exception through isOpen() check (SPR-7215) 2010-06-08 11:06:02 +00:00
Juergen Hoeller 928f5423af avoid EntityManager close() exception through isOpen() check (SPR-7215) 2010-06-08 10:21:05 +00:00
Juergen Hoeller 65622bd546 revised DefaultLifecycleProcessor's handling of circular dependencies to avoid stack overflow (SPR-7266) 2010-06-08 10:08:33 +00:00
Juergen Hoeller 882289b06e getAllInterfacesForClass introspects parent interfaces as well (SPR-7247) 2010-06-08 00:05:31 +00:00
Juergen Hoeller 12cffc68c8 added XmlAwareFormHttpMessageConverter, taking over the 3.0.2-introduced XML multipart support (avoiding a package cycle) 2010-06-07 23:18:34 +00:00
Juergen Hoeller c58f46f056 preparations for 3.0.3 release 2010-06-07 23:01:16 +00:00
Juergen Hoeller 632c0e7c5e added XmlAwareFormHttpMessageConverter, taking over the 3.0.2-introduced XML multipart support (avoiding a package cycle) 2010-06-07 22:59:48 +00:00
Juergen Hoeller 392accd910 introduced EmbeddedValueResolverAware callback interface for convenient placeholder resolution 2010-06-07 22:41:21 +00:00
Juergen Hoeller 8446fd1b26 added assertions for correct postProcess invocation order 2010-06-07 22:36:19 +00:00
Juergen Hoeller 5f9b2db90b turn NotReadablePropertyException into JSR-303 oriented IllegalStateException 2010-06-07 22:30:11 +00:00
Juergen Hoeller 4cef52a86f polishing 2010-06-07 22:21:22 +00:00
Juergen Hoeller de866a0ff6 registerDependentBean resolves to the canonical bean name in order to handle alias references (SPR-7254) 2010-06-07 22:15:20 +00:00
Juergen Hoeller d684e49462 added "expose-proxy" attribute to aop namespace (enforcing AopContext proxy exposure with CGLIB; SPR-7261) 2010-06-07 21:28:05 +00:00
Juergen Hoeller fe1e7f0d6c added "expose-proxy" attribute to aop namespace (enforcing AopContext proxy exposure with CGLIB; SPR-7261) 2010-06-07 21:19:32 +00:00
Oliver Gierke 857faec1f3 SPR-7103 - Added more detailed documentation on ordering of model attribute and BindingResult. 2010-06-07 20:57:55 +00:00
Juergen Hoeller 5b420e20c7 revised TaskScheduler javadoc (SPR-7253) 2010-06-07 20:52:12 +00:00
Juergen Hoeller 78c906caaa JSP HiddenInputTag allows for using common HTML attributes (SPR-7249) 2010-06-07 20:32:52 +00:00
Juergen Hoeller 2ef3a86c4f polishing 2010-06-07 19:23:08 +00:00
Juergen Hoeller 53cdb9dfeb fixed JSP ErrorsTag to avoid invalid "*.errors" id, using form object name as id prefix instead (SPR-7258) 2010-06-07 19:22:53 +00:00
Juergen Hoeller cc238207f9 fixed registerResolvableDependency mechanism to correctly handle non-serializable factory objects (SPR-7264) 2010-06-07 18:08:44 +00:00
Juergen Hoeller 5330dc48aa fixed typo (SPR-7265) 2010-06-07 17:31:37 +00:00
Arjen Poutsma 4764fa53f0 SPR-7259 - ResponseStatus.reason() ignored for @ExceptionHandler methods 2010-06-07 13:33:43 +00:00
Arjen Poutsma f72c431e8a SPR-7257 - AbstractMarshaller incorrectly expects DOMResult to already have a node 2010-06-07 13:15:07 +00:00
Chris Beams 0dc29cb2d3 Added a test to prove that @Qualifier works in conjunction with @Bean methods after some confusion by users that it may not. 2010-06-02 12:58:59 +00:00
Andy Clement 5801af9ef5 SPR-7244: double indexing with a collection of different types of element 2010-05-28 20:31:16 +00:00
Arjen Poutsma d0393ea109 SPR-7233 - ResponseEntity having body, headers and HttpStatus mixed up in responseEntity.getBody() 2010-05-28 08:07:21 +00:00
Juergen Hoeller 75c5405d6f added test for getType against an abstract FactoryBean 2010-05-27 13:45:44 +00:00
Juergen Hoeller 3a5af35d37 CachedIntrospectionResults only caches GenericTypeAwarePropertyDescriptors if fully safe (SPR-7227) 2010-05-27 13:45:21 +00:00
Juergen Hoeller dea5918d66 CronTrigger defensively protects itself against accidental re-fires if a task runs too early (SPR-7004) 2010-05-26 20:35:42 +00:00
Juergen Hoeller 2136b04b65 added limit for parsed SQL cache to NamedParameterJdbcTemplate (SPR-7237); added configurable cache limit to CachingMetadataReaderFactory 2010-05-26 19:35:06 +00:00
David Syer b4af04ba9d SPR-7239: fix CronTrigger 2010-05-26 17:41:54 +00:00
Juergen Hoeller f0777d130f improved toString() 2010-05-26 13:59:20 +00:00
Juergen Hoeller 1532119787 ConversionService is able to apply Converters to interface-based array elements (SPR-7150); a context ConversionService is able to override an ApplicationContext's resource editors (SPR-7079) 2010-05-26 13:58:37 +00:00
Juergen Hoeller 6c6004a93b @Transactional qualifier value matches against @Qualifier annotations on @Bean methods as well (SPR-7232) 2010-05-26 09:46:03 +00:00
Juergen Hoeller b90fa49ebc polishing 2010-05-25 14:23:08 +00:00
Juergen Hoeller bca067abb2 ScheduledTaskRegistrar (as used for @Scheduled processing) properly shuts down its default executor (SPR-6901) 2010-05-25 14:22:49 +00:00
Juergen Hoeller 0c6b38b0b5 DataSourceUtils lets timeout exceptions through even for setReadOnly calls (revised; SPR-7226) 2010-05-25 14:10:28 +00:00
Juergen Hoeller 8800bab8a6 DataSourceUtils lets timeout exceptions through even for setReadOnly calls (revised; SPR-7226) 2010-05-25 13:57:56 +00:00
Juergen Hoeller ed3cb4217d expect user name to be null (SPR-7228) 2010-05-21 15:59:00 +00:00
Juergen Hoeller 66aca1e8b3 expect user name to be null (SPR-7228) 2010-05-21 15:44:10 +00:00
Juergen Hoeller d7f72fbbd4 DataSourceUtils lets timeout exceptions through even for setReadOnly calls (SPR-7226) 2010-05-20 20:58:02 +00:00
Juergen Hoeller 2676771255 parse default elements if they live in the default namespace or if their parent is from another namespace (SPR-7218) 2010-05-20 19:18:34 +00:00
Juergen Hoeller 3cf303cabd prepared for 3.0.3 release 2010-05-20 17:18:40 +00:00
Juergen Hoeller a6d9c90841 refined BeanDefinitionParserDelegate to only parse default elements if they actually live in the default namespace (SPR-7218) 2010-05-20 17:15:56 +00:00
Juergen Hoeller 0390c2b9fe added convenient "checkRefresh" bean property to TilesConfigurer (SPR-7225) 2010-05-20 16:49:53 +00:00
Juergen Hoeller f9736ec3f6 JodaTime 1.3 or higher required (SPR-7222) 2010-05-20 09:12:39 +00:00
Juergen Hoeller 6fe5871e91 check for "org.joda.time.LocalDate" in order to catch JodaTime 1.3 and higher only (SPR-7222) 2010-05-20 08:30:32 +00:00
Juergen Hoeller ecf2d8c5de fixed typos (SPR-7221) 2010-05-20 08:16:49 +00:00
Juergen Hoeller 469e30b507 refined LifecycleProcessor exception handling, properly wrapping a start exception from a bean (SPR-7106) 2010-05-19 19:44:57 +00:00
Oliver Gierke 8a3c56b6d5 Added myself and as author.
Added Dave and me in the copyright holder section, too.
2010-05-19 05:52:51 +00:00
Oliver Gierke 680bfbe718 SPR-7186 Added section on generic advice parameters 2010-05-19 05:52:47 +00:00
Oliver Gierke d600e35157 Fixed year in copyright. 2010-05-19 05:52:44 +00:00
Andy Clement 101d8381ef SPR-7209: parsing poorly formed Elvis expressions 2010-05-18 18:44:40 +00:00
Arjen Poutsma ae56f3a361 SPR-7211 - Extend HttpMessage interface to expose requestURL 2010-05-18 11:12:54 +00:00
Juergen Hoeller de326e5e95 ClassUtils recognizes "void" as primitive type name as well (SPR-7212) 2010-05-18 08:49:09 +00:00
Juergen Hoeller 2c2df7f555 consistent postProcessBeanFactory treatment for BeanDefinitionRegistryPostProcessors (SPR-7167) 2010-05-17 22:40:15 +00:00
Juergen Hoeller 2ad2022058 revised BeanWrapper's exception wrapping to consistently handle ConversionExceptions (SPR-7177) 2010-05-17 21:59:02 +00:00
Chris Beams 57a503b274 BeanDefinitionRegistryPostProcessors' postProcessBeanDefinitionRegistry() method now gets called before postProcessBeanFactory() (SPR-7167) 2010-05-17 16:21:36 +00:00
Arjen Poutsma 0b8140b50d Added DeprecatedBeanWarner 2010-05-17 14:31:48 +00:00
Juergen Hoeller a8ed98255f ServletContextResourcePatternResolver handles "/WEB-INF/lib/*.jar!/**/context.xml" style patterns (SPR-7198) 2010-05-17 12:41:32 +00:00
Juergen Hoeller 738d84f75c filter for duplicate listeners in "getApplicationListeners()" as well (SPR-7204) 2010-05-16 19:08:12 +00:00
Juergen Hoeller 7f24edc3d5 removed ServerSessionMessageListenerContainer coverage 2010-05-16 17:46:28 +00:00
Juergen Hoeller ff4f749adb fixed typos 2010-05-16 17:32:01 +00:00
Costin Leau 578e80c1cf SPR-7197
+ fix template
2010-05-15 09:22:56 +00:00
Costin Leau d9a664a588 SPR-7197
polish :)
2010-05-14 19:34:36 +00:00
Costin Leau e9ecf5d716 SPR-7197
+ removed compile time dependency on JBoss VFS
+ added support for JBoss AS 6.0 / JBoss VFS 3.0.0 infrastructure
2010-05-14 19:29:44 +00:00
Luke Taylor 27be8434f1 Rolled-back accidental .classpath changes 2010-05-14 16:23:48 +00:00
Luke Taylor 3f885d0302 Added DomUtils.getChildElements() method. Also refactored ConfigBeanDefinitionParser.parse() to use it. 2010-05-14 16:07:39 +00:00
Luke Taylor 9f9a27a1d8 SPR-7158: Added missing space in MVC docbook file 2010-05-14 14:04:56 +00:00
Thomas Risberg d22a6f9da9 fixed index test for parameter types (SPR-7199) 2010-05-14 12:52:59 +00:00
Juergen Hoeller 8ccd74b6c8 JSP Radiobutton/CheckboxesTag utilizes PropertyEditor/ConversionService for label rendering (SPR-7174) 2010-05-13 23:07:11 +00:00
Juergen Hoeller ceb668ac6c added getLastTaskInfo() method to StopWatch (SPR-7134) 2010-05-13 22:43:18 +00:00
Juergen Hoeller 68055ba4c9 AsyncAnnotationBeanPostProcessor consistently adds @Async processing as first Advisor in the chain (SPR-7147) 2010-05-13 22:13:29 +00:00
Juergen Hoeller ad5c7aeb31 added "idleConsumerLimit" bean property to DefaultMessageListenerContainer (SPR-7189) 2010-05-13 16:33:55 +00:00
Juergen Hoeller 59d2d35f4a polishing 2010-05-13 14:44:34 +00:00
Juergen Hoeller 103c1aa82f exclude abstract lazy-init beans from MBean exposure as well (SPR-6784) 2010-05-13 14:38:58 +00:00
Juergen Hoeller a1e4f4f406 MVC mappings properly apply even to welcome file entries that forward to a DispatcherServlet (SPR-7143) 2010-05-12 20:15:40 +00:00
Juergen Hoeller fa7472c057 MockHttpServletResponse supports multiple includes (SPR-7188) 2010-05-12 14:07:25 +00:00
Juergen Hoeller bd1b559d47 MockHttpServletResponse supports multiple includes (SPR-7188) 2010-05-12 14:05:21 +00:00
Thomas Risberg 15df7b11d0 added null check for parameter (SPR-7193) 2010-05-12 13:26:03 +00:00
Juergen Hoeller 4955a73047 added support for JAX-WS 2.1 WebServiceFeatures to JaxWsPortClientInterceptor/PortProxyFactoryBean (SPR-5712) 2010-05-12 12:32:03 +00:00
Juergen Hoeller 11bb7264a2 properly return null from getPersistenceUnitInfo again (SPR-7055) 2010-05-12 08:46:55 +00:00
Juergen Hoeller 853eab8b4c setTransactionIsolation on JDBC Connection only called when actually necessary (for PostgreSQL; SPR-7184) 2010-05-11 13:14:53 +00:00
Juergen Hoeller 15fe75b1a1 restored original jms namespace declaration 2010-05-10 21:31:13 +00:00
Mark Pollack dad714710f some infrastructure files for custom schema 2010-05-10 18:33:31 +00:00
Juergen Hoeller 365737b515 CachingConnectionFactory detects destination equality for WebSphere MQ as well (using toString; SPR-7148) 2010-05-07 16:53:59 +00:00
Juergen Hoeller 026523d24b set shared variables with configured ObjectWrapper (SPR-7165) 2010-05-07 15:06:27 +00:00
Andy Clement 2b0655b459 SPR-6941 2010-05-06 00:26:13 +00:00
Andy Clement f53621a86f SPR-7173, SPR-7100 2010-05-05 23:52:01 +00:00
Costin Leau 42cdfbcd89 SPR-7163
SPR-7161
+ update Petclinic references
+ minor corrections
2010-05-05 13:42:46 +00:00
Costin Leau 9919cc976b SPR-7158
+ doc typos
2010-05-04 19:15:09 +00:00
Costin Leau a45d33a158 SPR-7159
+ fix several typos
2010-05-04 18:49:09 +00:00
Juergen Hoeller c0aac20081 further 3.0.3 preparations 2010-05-03 14:47:38 +00:00
Juergen Hoeller b0afa0c472 only retrieve transaction manager bean if necessary (SPR-7153) 2010-05-03 12:51:54 +00:00
Juergen Hoeller 17a1362ed8 BeanDefinitionVisitor/PropertyPlaceholderConfigurer finds and resolves values in arrays as well (SPR-7136) 2010-05-03 12:26:32 +00:00
Arjen Poutsma dd8c18188f SPR-7160 - ShallowEtagHeaderFilter not adding ETag 2010-05-03 08:58:20 +00:00
Costin Leau 159f98728e SPR-7137
+ fixed incorrect message when unregistering services from passed in registries
2010-04-29 14:42:24 +00:00
Arjen Poutsma c1f18582e7 SPR-7117 - Add ability for CNVR to search view names that use file extensions 2010-04-29 11:06:31 +00:00
Arjen Poutsma f8a05da1c9 SPR-7146 - AppEngine : bug with SimpleClientHttpResponse.getHeaders 2010-04-29 09:20:44 +00:00
Arjen Poutsma a910ce68ff SPR-7145 - NullPointerException in AnnotationMethodHandlerAdapter if HttpHeaders in ResponseEntity are empty 2010-04-29 08:04:36 +00:00
Costin Leau aa216672ae SPR-7090
+ fix doc typos
2010-04-28 11:05:08 +00:00
Costin Leau 4ddcd35d13 SPR-6819
+ made JPA dependency implicit since the aspect will always require the JPA classes during the weaving process
2010-04-28 10:41:03 +00:00
Costin Leau 02cc37cc16 + sanitize class names (eliminate trailing .class for dot notation) 2010-04-28 10:33:54 +00:00
Costin Leau 03415960ff + minor doc update regarding Tomcat setup (so the Tomcat list is rendered properly) 2010-04-28 10:29:21 +00:00
Arjen Poutsma c2707150b1 SPR-7135 - org.springframework.http.MediaType#checkParameters fails to process a Content-Type like application/xml;charset="utf-8" 2010-04-27 08:26:51 +00:00
Juergen Hoeller 8ce4037af2 TilesConfigurer's "definitionsFactoryClass" property applies common Tiles DefinitionsFactory setup (SPR-7101) 2010-04-23 10:44:29 +00:00
Juergen Hoeller 101a5cd8ff factored out getRequestDispatcher template method (SPR-7118) 2010-04-22 21:46:56 +00:00
Juergen Hoeller 8df0403e99 further fixes for 3.0.3 2010-04-22 21:39:09 +00:00
Juergen Hoeller 07920fc3df polishing 2010-04-22 21:37:35 +00:00
Juergen Hoeller 87e327773e introduced AopProxyUtils.ultimateTargetClass (SPR-7074) 2010-04-22 21:36:53 +00:00
Juergen Hoeller b28310b051 added default InputSourceEditor for SAX InputSource construction with a URL String as system id (SPR-7099) 2010-04-22 19:02:05 +00:00
Juergen Hoeller 20d3085dc8 polishing 2010-04-22 17:38:49 +00:00
Juergen Hoeller 218ee6d24c added "boolean isRegisteredWithDestination()" method (SPR-7065) 2010-04-22 17:38:37 +00:00
Chris Beams 3f06a92b6b getBean(Class<?>) now filters out bean definitions for which isAutowireCandidate() is false (SPR-7120) 2010-04-22 16:34:36 +00:00
Juergen Hoeller 5057c4a69c DefaultMessageListenerContainer reacts to maxConcurrentConsumers reduction for long-lived tasks (SPR-7075) 2010-04-22 13:27:16 +00:00
Juergen Hoeller 4cab4a7545 introspect decorated definition for getType calls as well (SPR-7006) 2010-04-21 20:06:38 +00:00
Juergen Hoeller 3dbe38e418 added check for WebSphere's compliance mode (SPR-7064) 2010-04-21 18:42:59 +00:00
Michael Isvy c5f83686d2 line 149: fixed a typo.
Tomcat or IBM WebSphere that has itss own -->  Tomcat or IBM WebSphere that has its own
2010-04-21 11:46:26 +00:00
Juergen Hoeller 77074c6c87 property placeholders can deal with nested expressions which happen to use the same suffix (SPR-7098) 2010-04-21 09:22:20 +00:00
Arjen Poutsma 1e34e2725a SPR-7107 - RestTemplate/UriTemplate/UriUtils improperly encoding UTF-8 2010-04-21 07:55:56 +00:00
Costin Leau 7790dedff2 + disable some of the WAS failing tests 2010-04-21 07:38:54 +00:00
Juergen Hoeller 399b388ea5 fixed JSP SelectTag's support for rendering enum constants (SPR-7112) 2010-04-20 16:15:23 +00:00
Costin Leau 5af6d917e9 SPR-7064
+ fix method name
2010-04-20 13:33:16 +00:00
Costin Leau ea9eb853fa SPR-7064
+ added unit tests for WAS with complaint setting
2010-04-20 13:32:02 +00:00
Costin Leau 05360c095c SPR-7064
+ unit tests containing the differences between WAS and Tomcat
2010-04-20 12:12:57 +00:00
Juergen Hoeller 1ed05eceb9 remove trailing servlet path slash on WebSphere only (SPR-7064) 2010-04-20 11:43:20 +00:00
Juergen Hoeller 69c4cdf975 remove trailing servlet path slash on WebSphere only (SPR-7064) 2010-04-20 11:15:47 +00:00
Arjen Poutsma 3f6cc3f552 Added more tests. 2010-04-20 10:03:05 +00:00
Keith Donald e21a1c5a61 polish 2010-04-19 20:35:57 +00:00
Keith Donald 86906d1b4d checking in performance tests 2010-04-19 20:22:01 +00:00
Keith Donald 6e13cc9eaa thread safety for caching 2010-04-19 19:22:35 +00:00
Arjen Poutsma b25462ddf9 SPR-7107 - RestTemplate/UriTemplate/UriUtils improperly encoding UTF-8 2010-04-19 08:28:10 +00:00
Keith Donald e60389283d caching optmizations and performance tests 2010-04-19 03:58:28 +00:00
Keith Donald 066b4d542b polish 2010-04-19 01:47:34 +00:00
Keith Donald 594596f361 cache invalidation 2010-04-19 01:45:27 +00:00
Keith Donald bf03d0d56f converter caching 2010-04-18 21:43:00 +00:00
Juergen Hoeller 33252495cf fixed @ExceptionHandler resolution in case of multiple matches at different inheritance levels (SPR-7085) 2010-04-18 18:48:24 +00:00
Keith Donald a71514222a preserving desc context for collection/map elements 2010-04-18 14:09:41 +00:00
Keith Donald 8464ac90c7 promoted char sequence first 2010-04-17 20:22:30 +00:00
Keith Donald ebbf63f4e0 polish 2010-04-17 06:47:08 +00:00
Keith Donald e6018afe8b restored resource conversion test 2010-04-17 06:31:34 +00:00
Keith Donald b9aeba23ef fixed failing test 2010-04-17 06:28:06 +00:00
Keith Donald d98da7d240 fixed failing test 2010-04-17 04:50:01 +00:00
Keith Donald e7c99b2b62 no longer used 2010-04-17 04:43:54 +00:00
Keith Donald 64d6a42dfd improved conversion system logging, collection converter simplification/polish, several optimizations, annotation-driven formatting caching 2010-04-17 04:43:28 +00:00
Andy Clement bf1a95c771 SPR-7100: '_' supported as first char of identifier 2010-04-16 21:10:23 +00:00
Juergen Hoeller f6b56a591c PropertyTypeDescriptor detects underlying field with same lenient naming rules as CachedIntrospectionResults (SPR-7102) 2010-04-16 15:39:23 +00:00
Juergen Hoeller 2a19148eed changed "javax.persistence.criteria" import to an explicit Import-Package declaration (SPR-6636) 2010-04-15 22:16:17 +00:00
Juergen Hoeller 7048f32666 fixed canRead breakage 2010-04-15 16:13:50 +00:00
Juergen Hoeller b3b5b356d2 polishing 2010-04-15 14:57:08 +00:00
Juergen Hoeller 7355dff967 EvalTag skips implicit variable check if VariableResolver is null (for Jetty compatibility; SPR-7096) 2010-04-15 14:56:37 +00:00
David Syer eb7f8309e2 Update version in POMs to 3.0.3 2010-04-15 10:26:14 +00:00
Juergen Hoeller 67ba18f956 polishing 2010-04-14 12:18:05 +00:00
Juergen Hoeller 12ce250c6c fixed constructor argument caching for prototypes with multiple constructor matches (SPR-7084) 2010-04-14 12:11:56 +00:00
Arjen Poutsma e6b0a1d4d7 SPR-7081 - Add ignoreJafMediaTypes to ContentNegotiatingViewResolver 2010-04-13 08:37:59 +00:00
Juergen Hoeller 385298b808 JSP FormTag calculates proper default form action even when using a rewrite filter on WebSphere (SPR-7067) 2010-04-12 14:59:27 +00:00
Juergen Hoeller 03120b70d0 fixed URI construction to consider fragment as well (SPR-7083) 2010-04-09 15:26:43 +00:00
Juergen Hoeller 4d2a398cbc call setAccessible for public final field too (SPR-7078) 2010-04-08 12:15:18 +00:00
Costin Leau 353781021d SPR-6819
+ changed jpa dependency scope from optional to provided
2010-04-08 07:04:40 +00:00
Costin Leau 688dd1a018 SPR-7071
+ fix some Eclipse classpath entries
2010-04-08 06:39:41 +00:00
Juergen Hoeller d34d8764b0 fixed getOriginatingQueryString javadoc (SPR-7072) 2010-04-07 13:51:46 +00:00
Arjen Poutsma 28da6e0d98 SPR-7070 - MappingJacksonJsonView.renderedAttributes to be made visible to subclasses 2010-04-07 08:30:04 +00:00
Juergen Hoeller 4ee6735376 DefaultPersistenceUnitManager's getPersistenceUnitInfo method has 2.5 compatible signature again (SPR-7055) 2010-04-06 15:38:40 +00:00
Juergen Hoeller ff6abbd369 prepared for 3.0.3 release 2010-04-06 12:00:45 +00:00
Juergen Hoeller ecda2aee4a revised AspectJAnnotation for consistent use of final fields (SPR-7068) 2010-04-06 11:54:50 +00:00
Juergen Hoeller e2a9bc9c66 specific detection of CGLIB subclasses in order to properly handle CGLIB interfaces (SPR-7066) 2010-04-06 11:52:42 +00:00
Arjen Poutsma b5b60cafb7 SPR-7063 - MappingJacksonHttpMessageConverter breaks with Jackson 1.0.x 2010-04-06 11:39:50 +00:00
Arjen Poutsma 270fab4fd0 Updated to version 3.0.3 2010-04-02 13:12:58 +00:00
Arjen Poutsma f7f0d18e41 Removed empty mock package 2010-04-02 10:33:46 +00:00
Juergen Hoeller 386b7507c6 final preparations for 3.0.2 2010-04-02 08:54:00 +00:00
Arjen Poutsma 8a1a23af83 SPR-7060 - @ResponseStatus: The reason value is not used. 2010-04-02 08:39:26 +00:00
Chris Beams 580dc8e72a typed map and collection conversion routines now eagerly reject non-assignable required types and avoid spurious InvocationException stack traces in debug log (SPR-7058) 2010-04-02 08:00:48 +00:00
Ramnivas Laddad 66d2c6698b Improved fix for SPR-6850 by dealing with bounds separately from normal types 2010-04-01 23:37:08 +00:00
Juergen Hoeller 7f90e3bcf7 enable JPATraversableResolver to introspect test domain classes 2010-04-01 11:45:01 +00:00
Juergen Hoeller bc1abe6070 prepared for 3.0.2 release 2010-04-01 11:38:14 +00:00
Juergen Hoeller 6aa0e62597 compatibility with Hibernate 3.5 final 2010-04-01 11:37:35 +00:00
Juergen Hoeller 52179d8bfb fixed TemplateParserContext documentation (SPR-7059) 2010-04-01 10:59:58 +00:00
Juergen Hoeller ee686188b7 OSGi version range accepts JasperReports 3.x as well; fixed missing Spring version placeholder in context-support bundle 2010-04-01 10:57:15 +00:00
Juergen Hoeller 4a98fcb3f7 fixed ambiguous reference to Entry type 2010-04-01 10:36:57 +00:00
Juergen Hoeller 29ab58c4d8 ResourcePatternUtils provides plain PathMatchingResourcePatternResolver in case of a null ResourceLoader 2010-04-01 10:35:49 +00:00
Juergen Hoeller f6d05eaad4 reintroduced two-arg constructor (making STS warning disappear); always use a ResourcePatternResolver (through ResourcePatternUtils) 2010-04-01 10:31:15 +00:00
Arjen Poutsma 5105793228 javadoc 2010-04-01 10:14:20 +00:00
Arjen Poutsma 689e7b7af2 Introduced ResponseEntity, for access to the response status code 2010-04-01 10:08:51 +00:00
Juergen Hoeller 636e2f0f4c final preparations for 3.0.2 2010-03-31 15:38:11 +00:00
Juergen Hoeller 461b488eee polishing 2010-03-31 15:36:35 +00:00
Juergen Hoeller 6b93f41f3a AbstractInterceptorDrivenBeanDefinitionDecorator preserves lazy-init flag as well 2010-03-31 15:25:35 +00:00
Juergen Hoeller 092241a632 fixed decorated BeanDefinition condition for early type checking in AbstractBeanFactory (SPR-7006) 2010-03-31 15:21:48 +00:00
Juergen Hoeller 20f4e9023b UrlPathHelper cuts off trailing servlet-path slashes for root mappings (on WebSphere; SPR-7052) 2010-03-31 14:02:27 +00:00
Juergen Hoeller c24bafd644 polishing 2010-03-31 13:38:15 +00:00
Juergen Hoeller 21b4526063 accept UrlMap with any value type 2010-03-31 13:37:46 +00:00
Juergen Hoeller b2ff0b1df0 refined internal HandlerMapping/HandlerAdapter bean names 2010-03-31 13:37:11 +00:00
Juergen Hoeller 87d0da2d4c final preparations for 3.0.2 2010-03-30 23:37:29 +00:00
Juergen Hoeller ad78b5cdb5 polishing 2010-03-30 23:35:13 +00:00
Juergen Hoeller de84703c02 @ExceptionHandler methods consistently receive original exception as thrown by user methods 2010-03-30 23:28:21 +00:00
Juergen Hoeller b67b5ec408 clarified applicability of @ExceptionHandler in Portlet environments (SPR-6959) 2010-03-30 21:27:40 +00:00
Juergen Hoeller 65e88449aa DispatcherPortlet passes handler instance into HandlerExceptionResolver for action exception; DispatcherPortlet applies preHandleRender callbacks in case of action exception as well (SPR-6959) 2010-03-30 21:17:31 +00:00
Juergen Hoeller 20de98362a use simple type name in "missing parameter" exception text 2010-03-30 21:13:12 +00:00
Juergen Hoeller ea7ff5241d polishing 2010-03-30 21:12:40 +00:00
Juergen Hoeller ae877e92c7 improved getBean(Class) javadoc 2010-03-30 15:53:32 +00:00
Juergen Hoeller 16305530f2 adapted to common naming convention for internal attributes 2010-03-30 15:44:11 +00:00
Juergen Hoeller 282de41f06 AbstractInterceptorDrivenBeanDefinitionDecorator exposes decorated BeanDefinition for early type checking in AbstractBeanFactory (SPR-7006) 2010-03-30 15:40:47 +00:00
Juergen Hoeller 16eb915c95 ObjectFactoryCreatingFactoryBean creates a serializable ObjectFactory reference; added ProviderCreatingFactoryBean, exposing a serializable JSR-330 Provider reference (SPR-6998) 2010-03-30 14:45:43 +00:00
Juergen Hoeller 0eabef0720 added filter ordering comments (SPR-6594) 2010-03-30 10:46:51 +00:00
Juergen Hoeller 2c9753ad25 NativeWebRequest detects native MultipartRequest even when decorated (SPR-6594) 2010-03-30 10:24:39 +00:00
Juergen Hoeller 81e81ce77c WebRequestInterceptor exposes HttpServletResponse through NativeWebRequest (after downcast) 2010-03-30 09:21:09 +00:00
Arjen Poutsma 9cecaa769e SPR-7047 - XML MarshallingView assumes non-null value for object to be marshalled. 2010-03-30 08:34:29 +00:00
Juergen Hoeller 8c8eca7e05 refined use of generics 2010-03-29 23:08:32 +00:00
Juergen Hoeller fba8bcc7dc compatibility with JasperReports 3.x in terms of resource management (SPR-7048) 2010-03-29 23:07:53 +00:00
Juergen Hoeller fa719ad4c5 restored compatibility with Servlet 2.4 containers on all VMs (SPR-7044) 2010-03-29 13:17:49 +00:00
Arjen Poutsma 63dc53a5ea SPR-6861 - enable overwriting of createHttpInputMessage and createHttpOutputMessage in AnnotationMethodHandlerAdapter 2010-03-29 12:25:49 +00:00
Arjen Poutsma bc7679f9fc Documented HttpEntity 2010-03-29 12:02:22 +00:00
Arjen Poutsma a6d5d7c8e2 javadoc 2010-03-29 11:21:55 +00:00
Arjen Poutsma 122e4346bb Documented HttpEntity 2010-03-29 11:12:45 +00:00
Arjen Poutsma c18137d40a SPR-6728 - Document Spring MVC exception -> HTTP status code mappings 2010-03-29 10:28:05 +00:00
Sam Brannen a827ab88b1 [SPR-6523] Commented all paragraphs (i.e., for list, map, and set) related to collection merging with the util namespace until this issue has been addressed. 2010-03-27 19:10:54 +00:00
Chris Beams 351e72b6e2 incorrectly invoked factory methods now result in exceptions with more descriptive messages (SPR-5475) 2010-03-26 12:05:36 +00:00
Juergen Hoeller cbed1c1b4b fixed collection element conversion using ConversionService (SPR-6950) 2010-03-25 15:02:19 +00:00
Arjen Poutsma 124837e2c3 Added @Override annotations. 2010-03-25 13:02:19 +00:00
Arjen Poutsma 753a54096f SPR-7000 - AnnotationMethodHandlerAdapter gives priority to media type order over quality when selecting a method 2010-03-25 12:29:52 +00:00
Juergen Hoeller d50881d82b fixed collection element conversion using ConversionService (SPR-6950) 2010-03-25 11:53:41 +00:00
Arjen Poutsma f836601e0f SPR-7034 - XmlBeans UnMarshalling - does not work with RequestBody annotation 2010-03-25 11:52:32 +00:00
Chris Beams fbda55f141 corrected TypeUtils.isAssignable() failure to return true in certain valid wildcard bounding scenarios (SPR-6850) 2010-03-25 10:33:25 +00:00
Juergen Hoeller 10c358718e avoid NPE if runtimeTest is null (SPR-7032) 2010-03-25 10:22:16 +00:00
Arjen Poutsma 6f2062fb3a SPR-7031 - MappingJacksonJsonView should add headers for no-caching 2010-03-25 10:14:11 +00:00
Juergen Hoeller f42d4241b4 preparations for 3.0.2 2010-03-25 00:00:27 +00:00
Juergen Hoeller 3576bc4585 preparations for 3.0.2 2010-03-24 23:53:02 +00:00
Thomas Risberg 47389a0edd added com.springsource.javax.servlet.jsp dependency to fix problem with test (SPR-7033) 2010-03-24 23:24:16 +00:00
Juergen Hoeller ab139dffd0 added javadoc references to semantic definition of transaction attributes (SPR-7029) 2010-03-24 23:22:52 +00:00
Thomas Risberg a5f3d00977 added conf attribute for the struts dependency (SPR-7033) 2010-03-24 22:39:47 +00:00
Juergen Hoeller 53b6e1c1b0 fixed DataBinder's conversion error handling for direct field access with ConversionService (SPR-6953) 2010-03-24 17:40:45 +00:00
Juergen Hoeller 65b0a8fcb2 revised BeanTypeDescriptor into core PropertyTypeDescriptor; consider method annotations for return type (SPR-6979) 2010-03-24 16:27:33 +00:00
Juergen Hoeller 461c200ce6 restricted onApplicationEvent callbacks for local ApplicationContext only (SPR-6964) 2010-03-24 14:38:10 +00:00
Juergen Hoeller a614430899 allow for null keys and null values in rendered Map (SPR-7024) 2010-03-24 14:26:00 +00:00
Juergen Hoeller bc2440ea16 updated for JDK 1.5+ 2010-03-24 13:58:45 +00:00
Juergen Hoeller 6fb49f1de7 ignore failing serialization test for the time being 2010-03-24 10:52:20 +00:00
Chris Beams 6118d67321 updated JavaDoc regarding short-circuiting the BeanPostProcessor chain when returning null from BPP methods (SPR-6926) 2010-03-24 10:52:10 +00:00
Juergen Hoeller cbca6e1acb prevent findEditorByConvention AccessControlException on Google App Engine (SEC-1434) 2010-03-24 10:39:40 +00:00
Juergen Hoeller 2c2cf32b8a polishing 2010-03-24 10:35:50 +00:00
Juergen Hoeller 89755542da BeanPostProcessors are allowed to return a null bean value in the middle of the chain (SPR-6926) 2010-03-24 10:34:21 +00:00
Chris Beams 051b5f4f4f removed duplicate junit and aspectjweaver dependencies 2010-03-24 10:09:58 +00:00
Juergen Hoeller b370969690 added public "validateDatabaseSchema" method to Hibernate LocalSessionFactoryBean (SPR-3212) 2010-03-24 09:36:01 +00:00
Chris Beams a1f6eabbce SPR-7002: updated .classpath and pom to reflect new dependency upgrade from Jackson 1.0.0->1.4.2 2010-03-24 09:27:54 +00:00
Chris Beams 247c46e6ea SPR-7002: updated .classpath and pom to reflect new dependency upgrade from Jackson 1.0.0->1.4.2 2010-03-24 09:03:39 +00:00
Juergen Hoeller 915ca47cad updated to Jackson 1.4.2 2010-03-24 09:01:55 +00:00
Mark Fisher 0d8a020684 updated commons-pool version in .classpath to match ivy config 2010-03-23 21:44:52 +00:00
Mark Pollack 1e388a894e Change version of Hibernate Validator to 4.0.2 in pom.xml and eclipse .classpath to agree with version in ivy.xml 2010-03-23 16:44:46 +00:00
Juergen Hoeller 4e7752c9ba JCA listener containers delegate to wrapped Transaction handle (for Geronimo compatibility; SPR-6991) 2010-03-23 16:27:34 +00:00
Chris Beams c13e5f9f5b SPR-7009, SPR-6972: backed out unintentionally committed tests 2010-03-23 15:29:35 +00:00
Chris Beams 706a09c49e SPR-7009: TransactionInterceptor now extracts ultimate target class before evaluating @Transactional metadata to accommodate double-proxying cases 2010-03-23 12:06:30 +00:00
Chris Beams c38c09bc35 SPR-6972: removed import 2010-03-23 12:06:24 +00:00
Chris Beams 77bb68b967 SPR-6972: failed attempt to reproduce issue 2010-03-23 12:06:16 +00:00
Arjen Poutsma 212daa1995 SPR-7002 - RestTemplate fails to convert properly for Generic Type Container with MappingJacksonHttpMessageConverter 2010-03-23 11:15:13 +00:00
Arjen Poutsma f7ac7a395c SPR-6021 - Allow for using MultiValueMap in GET request for mapping multiple request params 2010-03-23 09:50:47 +00:00
Arjen Poutsma 465e84eda4 Revert: SPR-6021 - Allow for using MultiValueMap in GET request for mapping multiple request params 2010-03-23 08:52:59 +00:00
Chris Beams ec577f8e24 SPR-6538: context-support is no longer marked as an optional dependency within aspects and webmvc POMs 2010-03-23 08:15:57 +00:00
Juergen Hoeller 26470cc23a polishing 2010-03-22 18:31:41 +00:00
Juergen Hoeller 296aa96d71 AopUtils.getTargetClass(...) never returns null (SPR-7011) 2010-03-22 18:31:13 +00:00
Juergen Hoeller a2c3274b8e fixed double fixedField call for getFieldType (SPR-7019) 2010-03-22 15:08:57 +00:00
Chris Beams 5e19f2959e SPR-6888: ClassPathResource.getDescription() now fully qualifies resource path regardless of constructor used. 2010-03-22 14:54:39 +00:00
Juergen Hoeller 5dc59aaa7b avoid Synchronization List preparations upfront if possible (SPR-6999) 2010-03-22 14:31:58 +00:00
Arjen Poutsma c9289a4dcf SPR-6021 - Allow for using MultiValueMap in GET request for mapping multiple request params 2010-03-22 14:31:27 +00:00
Juergen Hoeller 19b4618fb5 avoid Synchronization List preparations upfront if possible (SPR-6999) 2010-03-22 14:23:02 +00:00
Arjen Poutsma 4c0744ee54 SPR-6978 - Dispatcher fails to invoke handler method when request method conflicts with request path 2010-03-22 14:12:32 +00:00
Arjen Poutsma b07d02f1bf SPR-7018 - Support for HttpEntity<?> in @MVC 2010-03-22 10:23:39 +00:00
Sam Brannen 69cbadf7e9 [SPR-6918] Now verifying support for @Value in conjunction with the Spring TestContext Framework. 2010-03-19 12:57:17 +00:00
Sam Brannen 0543036ec9 FooConfig, Foo, Bar, and BarFactory are now public static classes in order to avoid a bug with JDT/Spring IDE where the classes cannot be found in the XML application context. 2010-03-19 12:39:34 +00:00
Thomas Risberg 2ff2f0205d added metadata override to NUMERIC for NUMBER columns reported as DECIMAL but with zero decimal places (SPR-6912) 2010-03-18 14:19:30 +00:00
Christian Dupuis e22431188b made SortedResourcesFactoryBean ResourceLoaderAware to prevent specifying the ResourceLoader in the jdbc NamespaceHandlers; prevents leaking of class loader instances in tooling 2010-03-17 17:35:27 +00:00
Juergen Hoeller b8c0e153e3 do not insist on BeanDefinition presence for @Value resolution (for use in unit tests; SPR-6918) 2010-03-16 23:47:40 +00:00
Juergen Hoeller ff09482653 avoid ChainedTilesRequestContextFactory warn logging on Tiles 2.2 2010-03-16 23:27:18 +00:00
Andy Clement d932c043da SPR-6984: auto grow collections on write through indexer 2010-03-15 18:15:48 +00:00
Juergen Hoeller 0cb7e4dcb3 made getName() public; added isNullSafe() accessor (SPR-6980) 2010-03-14 22:19:56 +00:00
Christian Dupuis 2e5f1c22f6 fixed Eclipse classpath file 2010-03-14 17:58:46 +00:00
Chris Beams cf93e7c69e Fixed typo in javadoc on HttpRequestHandler 2010-03-14 11:26:06 +00:00
Juergen Hoeller 9da980d325 further fixes for 3.0.2 2010-03-12 23:12:40 +00:00
Juergen Hoeller 7da13e7ad1 compatibility with OpenJPA 2.0 (support for persistence.xml versioning; SPR-6975) 2010-03-12 23:10:06 +00:00
Juergen Hoeller a0e40a5610 avoid ChainedTilesRequestContextFactory warn logging on Tiles 2.1 2010-03-12 22:36:24 +00:00
Juergen Hoeller ac5c75690a fixed test failures 2010-03-12 20:55:44 +00:00
Juergen Hoeller 795a5e02cd polishing 2010-03-12 20:45:02 +00:00
Juergen Hoeller bb75662a7e @Transactional qualifiers work in unit tests as well (SPR-6892) 2010-03-12 20:44:41 +00:00
Juergen Hoeller 23cb161fb3 polishing 2010-03-12 19:45:17 +00:00
Juergen Hoeller eb1c039a6e WebContentInterceptor does not restrict HTTP methods by default anymore (SPR-6919) 2010-03-12 19:45:05 +00:00
Juergen Hoeller 4c39f90466 made CronSequenceGenerator public (SPR-6920) 2010-03-12 19:34:45 +00:00
Juergen Hoeller d4de1ac346 AbstractInterceptorDrivenBeanDefinitionDecorator copies autowire settings just like ScopedProxyUtils does (SPR-6974) 2010-03-12 19:18:39 +00:00
Arjen Poutsma 4880d1d461 SPR-6976 - Add debug log for HttpMessageConverter usage 2010-03-12 17:46:50 +00:00
Arjen Poutsma 5a8aa53232 SPR-6973 - SimpleUrlHandlerMapping wildcards cannot handle escaped newline characters 2010-03-12 16:56:16 +00:00
Arjen Poutsma 85b8befbd1 SPR-6970 - AbstractHttpMessageConverter canWrite logic the wrong way round?? 2010-03-12 16:43:57 +00:00
Christian Dupuis 4c4f19ec94 SPR-6977: updated copyright; added method comment 2010-03-12 16:10:03 +00:00
Christian Dupuis 145dcfd0c2 SPR-6977: added support for array parameter types 2010-03-12 15:09:24 +00:00
Arjen Poutsma 991c982e5b SPR-5866 - RestTemplate - access to Request Headers 2010-03-12 09:07:29 +00:00
Juergen Hoeller 1d6f374970 fixed typo (SPR-6967) 2010-03-11 21:30:39 +00:00
Juergen Hoeller eee72c52da mention actual endpoint address in connect failure exception message (SPR-6971) 2010-03-11 21:26:10 +00:00
Arjen Poutsma b0e3081636 SPR-5866 - RestTemplate - access to Request Headers 2010-03-11 17:41:30 +00:00
Arjen Poutsma 886eb665bf SPR-5866 - RestTemplate - access to Request Headers 2010-03-11 17:35:08 +00:00
Arjen Poutsma 70ee2ee7b1 SPR-5866 - RestTemplate - access to Request Headers 2010-03-11 17:33:54 +00:00
Arjen Poutsma f3f535623f Fixing the build 2010-03-11 16:54:47 +00:00
Arjen Poutsma 63076d0865 SPR-6969 - Introduce HttpEntity 2010-03-11 16:42:25 +00:00
Arjen Poutsma fc0a6ce40c Javadoc 2010-03-11 14:19:30 +00:00
Arjen Poutsma 88773ae7f1 a HTTP -> an HTTP 2010-03-11 12:57:52 +00:00
Andy Clement 81b10be1d0 SPR-6968: indexing via square brackets can now treat the index as an attempt at property access 2010-03-11 01:09:50 +00:00
Scott Andrews 50c5593740 SPR-6923 SpEL resolving nested property as outer object 2010-03-10 17:44:14 +00:00
Arjen Poutsma af4b22e5b9 SPR-5904 - Merged multipart support into FormHttpMessageConverter 2010-03-10 17:31:02 +00:00
Arjen Poutsma 6e55c8cd2f Fixing build. 2010-03-10 14:03:56 +00:00
Arjen Poutsma def90d1016 SPR-5904 - Multipart/mixed requests using RestTemplate 2010-03-10 13:53:29 +00:00
Juergen Hoeller f30b0a86f7 autowire="byType" ignores parameter name when choosing a primary bean, as defined (SPR-6917) 2010-03-10 13:46:31 +00:00
Juergen Hoeller 95ad7168bf changed doGetBean signature back to protected (SPR-6957) 2010-03-10 13:38:46 +00:00
Juergen Hoeller ccb312a974 SimpleJdbcCall's "returningResultSet" accepts any plain RowMapper now (SPR-6963) 2010-03-10 12:54:52 +00:00
Arjen Poutsma f588ab05fa Added readonly version of HttpHeaders 2010-03-10 10:00:03 +00:00
Andy Clement 2dd1134303 SPR-6941: part (1) correct exception handling when null cachedExecutor 2010-03-09 17:33:36 +00:00
Arjen Poutsma 0efb9d8023 SPR-5904 - Multipart/mixed requests using RestTemplate 2010-03-09 16:15:41 +00:00
Arjen Poutsma 21fd150894 SPR-6906 - Combination of ControllerClassNameHandlerMapping and @RequestMappings with file extensions results in exception 2010-03-09 10:29:01 +00:00
Arjen Poutsma ac9a625ccc SPR-6939 - XStreamMarshaller + JsonHierarchicalStreamDriver + JsonWriter.DROP_ROOT_MODE produce empty output 2010-03-09 09:53:51 +00:00
Andy Clement c31213e5cb SPR-6866: unhelpful NPE when expression badly formed 2010-03-09 00:55:03 +00:00
Ramnivas Laddad f82cc6458b Fixed SPR-6734 by resticting record/replay logic to only entity methods that originated in a test method 2010-03-08 20:42:22 +00:00
David Syer 8d7df01d73 RESOLVED - issue SPR-6955, SPR-6901 added DisposableBean to TaskExecutorFactoryBean 2010-03-08 12:13:30 +00:00
Arjen Poutsma 5303ab68aa Atom Feed HttpMessageConverter 2010-03-05 14:32:36 +00:00
Arjen Poutsma c91ff130d5 SPR-6946 - RestTemplate should not encode fragments (#'s) 2010-03-05 11:40:52 +00:00
Juergen Hoeller 54d0346084 do not call isCurrentlyInCreation with null argument (in order to meet newly enforced assertions within the BeanFactory) 2010-03-05 10:49:24 +00:00
Juergen Hoeller 4f926c82bf added bean name assertions 2010-03-04 22:36:35 +00:00
Juergen Hoeller b07b146965 fixed @Configurable issue with null bean name (SPR-6947) 2010-03-04 22:33:59 +00:00
Juergen Hoeller cfbc5224e3 fixed exception propagation issue with Hessian 4.0 (SPR-6899) 2010-03-04 22:22:47 +00:00
Arjen Poutsma a0c41a0e03 SPR-6906 - Combination of ControllerClassNameHandlerMapping and @RequestMappings with file extensions results in exception 2010-03-04 15:17:09 +00:00
Juergen Hoeller 8fe5151f84 some further 3.0.2 entries 2010-03-04 13:58:23 +00:00
Juergen Hoeller 77f8b070cd polishing 2010-03-04 13:58:02 +00:00
Arjen Poutsma 4f4f3fab7d SPR-6934 - AnnotationMethodHandlerAdapter should take into account request accept header ordering 2010-03-04 13:54:24 +00:00
Juergen Hoeller 0444ab236a fixed TypeDescriptor toString for MethodParameter annotations (SPR-6924) 2010-03-04 13:50:43 +00:00
Juergen Hoeller 9ede9fe697 "conversionService" bean gets ignored if not of type ConversionService (SPR-6916) 2010-03-04 11:27:09 +00:00
Juergen Hoeller 3e98b26b77 fixed typo (SPR-6936) 2010-03-04 11:17:12 +00:00
Juergen Hoeller 0aee6e9f5b use target factory's ClassLoader in case of a raw EntityManagerFactory (SPR-6733) 2010-03-04 11:13:28 +00:00
Arjen Poutsma eddc5b8898 SPR-6935 - @ResponseBody with method that return void throws "Could not resolve view exception". 2010-03-04 10:51:27 +00:00
Juergen Hoeller 57993d871e WebApplicationObjectSupport's initServletContext will be called only once in any scenario (SPR-6914) 2010-03-03 16:26:47 +00:00
Arjen Poutsma 3c8a47bd06 SPR-6877 - AnnotationMethodHandlerAdapter.handleResponseBody prioritizes messageConverter over MediaType 2010-03-03 11:14:30 +00:00
Arjen Poutsma 7f8c91a52d SPR-6902 - @ResponseBody does not work with @ExceptionHandler 2010-03-03 10:33:58 +00:00
Arjen Poutsma 62f9f477f5 SPR-6877 - AnnotationMethodHandlerAdapter.handleResponseBody prioritizes messageConverter over MediaType 2010-03-03 10:18:59 +00:00
Arjen Poutsma 894875ce8d SPR-6907 - JibxMarshaller - provide access to jibx's writeDocType 2010-03-02 12:49:31 +00:00
Arjen Poutsma 9d1c3fa9ac SPR-6907 - JibxMarshaller - provide access to jibx's writeDocType 2010-03-02 11:56:22 +00:00
Arjen Poutsma d207c2294d Fixed wrong encoding of URI templates with @-signs (SPR-6874) 2010-03-02 11:30:36 +00:00
Arjen Poutsma e653a9cd03 javadoc 2010-03-02 10:53:15 +00:00
Arjen Poutsma 5675046cb7 SPR-6876 - RequestMethod does not appear to factor into @RequestMapping uniqueness in some cases 2010-03-02 09:52:43 +00:00
Costin Leau 20a8039642 + improve template for spring-context so that the import-package is updated automatically 2010-02-25 15:46:54 +00:00
Juergen Hoeller 4bda92fd8a newArg(Type)PreparedStatementSetter declares PreparedStatementSetter interface as return type (SPR-6897) 2010-02-24 14:32:22 +00:00
Sam Brannen 97adfdd398 Removed misleading comments regarding javax.inject.Qualifier. 2010-02-23 23:07:44 +00:00
Sam Brannen a5b5df450e [SPR-6879] @DirtiesContext is now an @Inherited annotation. 2010-02-23 17:44:59 +00:00
Sam Brannen 80b8fb8b83 [SPR-6879] @DirtiesContext is now an @Inherited annotation. 2010-02-23 17:43:00 +00:00
Juergen Hoeller ef227c5d01 HibernateJpaDialect borrows JDBC Connection on demand (supporting aggressive release; SPR-6895) 2010-02-23 16:13:04 +00:00
Michael Isvy 9e5b129ba5 SPR-6885
updates based on Chris Beams' comments.
2010-02-23 15:46:52 +00:00
Juergen Hoeller 12b30843c5 widened AbstractFactoryBean's "getObjectType" signature to return any Class as well (SPR-6872) 2010-02-23 13:00:12 +00:00
Juergen Hoeller 09f02bc620 use WeakHashMap for DataSource-keyed cache (SPR-6887) 2010-02-23 10:47:51 +00:00
Chris Beams 3d2611484a adding .gitignore 2010-02-22 23:52:56 +00:00
Michael Isvy 6af91773ee SPR-6885
Improved documentation for JavaConfig's use of CGLIB for all @Configuration annotated classes
2010-02-22 13:50:41 +00:00
Juergen Hoeller 9e71af86f8 polishing 2010-02-22 11:49:19 +00:00
Juergen Hoeller 60ff93e5ac avoid invalid id characters in ErrorsTag as well (SPR-6862) 2010-02-22 11:48:08 +00:00
Chris Beams f25d2a9416 Removed hard-coded local path from .core/.classpath; removed duplicate asm entry in .context/.classpath 2010-02-22 01:55:38 +00:00
David Syer fd4b9cf6a3 SPR-6881: remove extra dependency 2010-02-21 17:51:48 +00:00
David Syer 1a351db6e0 Update Central POMs to 3.0.2 2010-02-21 15:32:18 +00:00
Chris Beams 5b537e9604 minor typo fixes 2010-02-21 02:13:41 +00:00
Juergen Hoeller 6c69f47acf regressions 2010-02-20 16:29:07 +00:00
Juergen Hoeller 44ef114981 fixed @RequestParam(required=false) regression for @InitBinder methods (SPR-6878) 2010-02-20 16:14:14 +00:00
Juergen Hoeller 67b342d923 fixed indexed property regression (SPR-6871) 2010-02-20 15:53:09 +00:00
Juergen Hoeller 5063c6dd00 upgraded to Hibernate Validator 4.0.2 and Jackson 1.4.2 2010-02-19 13:58:19 +00:00
Costin Leau 8d0bb00188 + make use or property placeholders inside template.mf 2010-02-19 09:43:22 +00:00
Arjen Poutsma fe59d4a787 setting things up for 3.0.2 2010-02-18 17:42:14 +00:00
Juergen Hoeller e65610555e final preparations for 3.0.1 release 2010-02-18 11:29:28 +00:00
Arjen Poutsma 68b4c7df6e SPR-6752 - RestTemplate throws IllegalArgumentException when HTTP status is not in the HttpStatus enum 2010-02-18 11:15:17 +00:00
Juergen Hoeller 103ac0359d DefaultRequestToViewNameTranslator strips trailing slashes as well (SPR-6830) 2010-02-18 10:47:22 +00:00
Ben Hale fff4c77dbe Updated spring-build to 2.5.0 2010-02-18 10:26:35 +00:00
Juergen Hoeller b960bd579d preparations for 3.0.1 release 2010-02-18 00:07:02 +00:00
Juergen Hoeller 5f7f37f1c1 polishing 2010-02-18 00:06:16 +00:00
Juergen Hoeller 572abbcff9 do not ever consider Object as a candidate type for autowiring by type (SPR-6600) 2010-02-18 00:04:08 +00:00
Juergen Hoeller e74b33242b fixed regression: method-level patterns without type-level pattern do not need to start with a slash (SPR-6598) 2010-02-17 23:26:06 +00:00
Juergen Hoeller b54a099f49 marked spring-tx as a required dependency (SPR-6737) 2010-02-17 22:50:01 +00:00
Juergen Hoeller c39b529c93 added vararg variants of query methods to JdbcTemplate (as known from SimpleJdbcTemplate; SPR-6858) 2010-02-17 22:19:49 +00:00
Juergen Hoeller 54acebd086 UriTemplate properly quotes variable values (SPR-6854) 2010-02-17 21:58:56 +00:00
Juergen Hoeller 36940c5fc8 only activate EL support if JSP ExpressionFactory actually available (SPR-6852) 2010-02-17 21:54:21 +00:00
Michael Isvy 6aa05994ae SPR-6855
Documentation on Spring-Struts 1 integration needs to be updated
2010-02-17 15:59:52 +00:00
Juergen Hoeller d3560706df final preparations for 3.0.1 release 2010-02-16 18:21:50 +00:00
Juergen Hoeller 64f0200675 polishing 2010-02-16 18:21:25 +00:00
Juergen Hoeller 64fc4c23ea revised EvalTag implementation 2010-02-16 18:16:47 +00:00
Juergen Hoeller 4ae1709313 relaxed generic Class declaration in HttpMessageConverter's canRead/canWrite/read signatures (SPR-6848) 2010-02-16 17:46:16 +00:00
Arjen Poutsma 19cdd558d3 Improved Jaxb2Marshaller.supports() 2010-02-16 14:25:55 +00:00
Arjen Poutsma 58f63f6142 Improved Jaxb2Marshaller.supports() 2010-02-16 14:13:18 +00:00
Juergen Hoeller 60ac239091 BeanDefinitionReader and ClassPath/FileSystemXmlApplicationContext use varargs where possible (SPR-6849) 2010-02-16 11:59:29 +00:00
Michael Isvy c0f4d9c893 fixed SPR-6846 2010-02-15 22:45:26 +00:00
Juergen Hoeller ccc7d0f53f fixed interaction with ControllerClassNameHandlerMapping (as reported by Rossen) 2010-02-15 18:27:30 +00:00
Juergen Hoeller 87eb3f970e store a static WebApplicationContext reference if the Spring jars get deployed in the same web application as the ContextLoader (SPR-5652) 2010-02-15 18:02:19 +00:00
Juergen Hoeller db2d323d96 store a static WebApplicationContext reference if the Spring jars get deployed in the same web application as the ContextLoader (SPR-5652) 2010-02-15 17:58:52 +00:00
Juergen Hoeller 0598eafb84 polishing 2010-02-15 17:37:57 +00:00
Juergen Hoeller b5e826976c fixed interaction with ControllerClassNameHandlerMapping (as reported by Rossen) 2010-02-15 17:37:44 +00:00
Juergen Hoeller 5e1065838b fixed isProxyFactoryBeanDefinition check (SPR-6842) 2010-02-15 17:04:13 +00:00
Juergen Hoeller a6af91f7b2 avoid rendering invalid ids (SPR-6840) 2010-02-15 13:45:47 +00:00
Costin Leau e8a4ddd3e0 + fix test by disabling autowiring 2010-02-15 13:23:47 +00:00
Juergen Hoeller 18bd4a8337 improved "no matching factory method found" exception message (SPR-6837) 2010-02-15 13:01:46 +00:00
Juergen Hoeller 97059f4e18 @RequestParam/RequestHeader/CookieValue's defaultValue allows for declaring empty String (SPR-6791) 2010-02-15 12:10:55 +00:00
Juergen Hoeller 83231997c0 final preparations for 3.0.1 release 2010-02-15 00:50:21 +00:00
Juergen Hoeller 870507cc36 context-specific "conversionService" bean may refer to annotation-configured converter beans (SPR-6800) 2010-02-15 00:42:39 +00:00
Juergen Hoeller 9adb01a4a6 added PropertyPlaceholderConfigurer test 2010-02-15 00:22:06 +00:00
Juergen Hoeller b3b4c7aaad fixed checkboxes comparison for multi-list (SPR-6505) 2010-02-15 00:17:50 +00:00
Juergen Hoeller cdee538129 fixed rendering of select options for multi-list (SPR-6799) 2010-02-15 00:04:30 +00:00
Juergen Hoeller d9112d071b fixed error message 2010-02-14 23:59:53 +00:00
Keith Donald f4631b1cb6 Spring eval docs 2010-02-12 20:43:55 +00:00
Keith Donald d075b82372 Spring eval docs 2010-02-12 20:43:40 +00:00
Keith Donald 62eb6cb473 Spring eval docs 2010-02-12 20:42:35 +00:00
Keith Donald 9c35130fdc Added spring:eval note 2010-02-12 20:03:23 +00:00
Keith Donald b825e398ae added jsp.* import to catch jsp.el 2010-02-12 17:54:13 +00:00
Keith Donald 6390e897b8 eval tag tidying 2010-02-12 17:42:41 +00:00
Andy Clement 117b138233 SPR-6745: metadata (annotations) attached to property accessors allowing formatting of values during conversion 2010-02-12 01:50:52 +00:00
Keith Donald 0f65a0f239 bug 2010-02-12 00:43:27 +00:00
Keith Donald e1a0625a15 conversion service lookup in request 2010-02-12 00:33:27 +00:00
Juergen Hoeller 315c16de5f relaxed test conditions 2010-02-12 00:02:32 +00:00
Juergen Hoeller 5f781e6266 generified PagedListHolded (SPR-6825) 2010-02-11 23:24:45 +00:00
Juergen Hoeller 09998b2434 relaxed test conditions 2010-02-11 23:15:15 +00:00
Keith Donald daa45dd424 updated template.mf to depend on spring-expression 2010-02-11 23:10:18 +00:00
Keith Donald c927e7dc7c added spring expression dependency to maven pom 2010-02-11 23:01:58 +00:00
Keith Donald f23b55dc13 spring:eval tag initial commit 2010-02-11 22:53:49 +00:00
Juergen Hoeller 16aa399040 optional EL support (only when Tiles EL module present); got rid of tiles-servlet-wildcard dependency (implemented wildcard support locally) 2010-02-11 17:03:37 +00:00
Juergen Hoeller 3db5a299bb canConvert checks Collection/Map element types as well (SPR-6564) 2010-02-11 12:23:57 +00:00
Juergen Hoeller cef44f6d53 made PersistenceAnnotationBeanPostProcessor's JNDI API references optional - for compatibility with Google App Engine (SPR-6679) 2010-02-11 11:36:33 +00:00
Costin Leau caaa45c9ef + fixed internal caching for LocalVariableTableParameterNameDiscoverer 2010-02-11 11:35:39 +00:00
Costin Leau 6389097ac1 + improved javadoc 2010-02-11 10:38:59 +00:00
Costin Leau c9975504c6 + improved LocalVariableTableParameterNameDiscoverer discovery and memory usage
+ added extra tests
2010-02-11 10:38:33 +00:00
Juergen Hoeller 06cd013b31 Tiles 2.2 etc 2010-02-10 23:25:43 +00:00
Juergen Hoeller 99c5a70ce3 added optional JPA dependency to spring-aspects POM (SPR-6819) 2010-02-10 23:02:31 +00:00
Juergen Hoeller d87a947ef2 reverted to fixed definition path 2010-02-10 21:45:13 +00:00
Sam Brannen 69cb15f27f [SPR-6821] Removed lingering reference to StandardScopes. 2010-02-10 21:35:26 +00:00
Juergen Hoeller ef024db318 polishing 2010-02-10 21:29:13 +00:00
Juergen Hoeller bef30a838c support for Tiles 2.2.1 (preserving compatibility with Tiles 2.1.2 and above; SPR-6097) 2010-02-10 21:26:42 +00:00
Keith Donald bfd61d6303 mvc namespace docs 2010-02-10 20:16:38 +00:00
Keith Donald 61958b6b3b comments about tutorials 2010-02-10 15:38:54 +00:00
Juergen Hoeller 03e9e4568f avoid double closing in case of shutdown hook (SPR-6793) 2010-02-10 13:49:51 +00:00
Ben Hale 63f574e741 Updated spring-build to see new maven targets 2010-02-10 11:38:33 +00:00
Juergen Hoeller b670b19429 setAutoGrowNestedPaths throws an IllegalStateException if being called too late (SPR-6718) 2010-02-09 15:54:48 +00:00
Juergen Hoeller aafe8ef9be added "lenientFallback" flag to AbstractRoutingDataSource (SPR-6809) 2010-02-09 15:39:54 +00:00
Juergen Hoeller f0bb45ae28 included qualifier value in debug log for each transaction (SPR-6811) 2010-02-09 14:57:17 +00:00
Juergen Hoeller 3322368106 fixed TilesConfigurer's init-param handling; added simple bootstrap test for Tiles (SPR-6606) 2010-02-09 12:32:32 +00:00
Costin Leau 7aec01bbac SPR-5379
+ added clarifications to section 3.4.5.2 Excluding a bean from autowiring
2010-02-09 12:23:12 +00:00
Costin Leau a9386f5c79 SPR-5246
+ clarify order of annotation and XML injection
2010-02-09 11:17:07 +00:00
Juergen Hoeller c5c38c6664 non-matching @Transactional qualifier value will lead to IllegalStateException (SPR-6810) 2010-02-08 18:32:38 +00:00
Juergen Hoeller 6c0d934b92 do not try to convert read-only Collections/Maps (SPR-6808) 2010-02-08 12:29:21 +00:00
Sam Brannen 81649d5c3b Removed unused import. 2010-02-07 15:57:57 +00:00
Juergen Hoeller b25dc7cc55 compatibility with Hibernate 3.5 beta 4 (SPR-6804, SPR-6805) 2010-02-06 16:15:12 +00:00
Juergen Hoeller 3833444778 plenty of new entries for 3.0.1 2010-02-04 20:32:36 +00:00
Juergen Hoeller d7b79dc9a9 fixed lookup log message (SPR-6746) 2010-02-04 18:40:39 +00:00
Juergen Hoeller 4778c4b750 support for Hessian 4.0.x (SPR-6041) 2010-02-04 18:36:21 +00:00
Costin Leau 0590184557 + downgraded slf4j to 1.5.6 to solve IllegalAcessError with Hibernate 3.3 2010-02-04 17:10:31 +00:00
Juergen Hoeller 5279a07673 @SessionAttributes works when used on an annotated controller interface with AOP proxying (SPR-6797) 2010-02-04 16:53:44 +00:00
Juergen Hoeller 59360f4f65 added warning about pointing to a custom transaction manager bean (SPR-5174) 2010-02-04 16:47:57 +00:00
Juergen Hoeller 5f166f6799 added warning about annotated controller interfaces (SPR-6655) 2010-02-04 15:52:15 +00:00
Juergen Hoeller 56e119e822 @SessionAttributes works when used on an annotated controller interface with AOP proxying (SPR-6797) 2010-02-04 15:39:58 +00:00
Arjen Poutsma 7832381dd2 SPR-6788: fixed compareTo() consistency with equals 2010-02-04 14:19:11 +00:00
Chris Beams 0f7f749ada Updated Eclipse .classpath to aspectj 1.6.8 2010-02-04 13:45:14 +00:00
Juergen Hoeller 82178b8d93 ignore IllegalStateException when removing shutdown hook (SPR-6793) 2010-02-04 12:30:39 +00:00
Costin Leau 0fd4a45070 + upgrade to AspectJ 1.6.8
+ externalize some of the jar versions
+ align the versions of some dependencies between pom.xml and ivy.xml
2010-02-04 11:46:21 +00:00
Costin Leau ac93b81a78 SPR-6794
+ fix test
2010-02-04 11:33:58 +00:00
Arjen Poutsma 2047b9b6b3 SPR-6788: fixed compareTo() consistency with equals 2010-02-04 11:08:09 +00:00
Costin Leau 4f0876de39 SPR-6794
+ added setter for encoding (in case the default UTF-8 is not enough)
2010-02-04 10:13:04 +00:00
Costin Leau fab29dfee7 + add explicit dependency on commons-pool to prevent version 1.3 from being used (since it contains a memory leak) 2010-02-04 10:05:54 +00:00
Costin Leau 0224cbc3de SPR-6794
+ used UTF-8 as the implicit encoding for reading scripts
2010-02-04 10:04:48 +00:00
Arjen Poutsma 44626054ce SPR-6786: added more checks for quality factors & charsets 2010-02-04 09:47:52 +00:00
Juergen Hoeller 4d09809f17 ApplicationListeners will reliably get invoked through their proxy (if any) 2010-02-03 23:52:56 +00:00
Juergen Hoeller ce6f14bd8b refined addApplicationListener to work any time during the refresh phase 2010-02-03 23:09:42 +00:00
Juergen Hoeller d96a6914a8 ApplicationListeners will get detected lazily as well (e.g. on @Bean's concrete result); inner bean ApplicationListeners will be invoked through their proxy (if any) 2010-02-03 22:54:59 +00:00
Juergen Hoeller 4d897e7ab5 lenient evaluation of boolean 'true' attribute expressions in JSP form tag library (SPR-6790) 2010-02-03 21:56:17 +00:00
Juergen Hoeller 41ecbc6814 fixed WebSphereUowTransactionManager regression: correctly roll back in case of exception (SPR-6695) 2010-02-03 19:41:14 +00:00
Arjen Poutsma 6e21c17253 SPR-6788 - The class MediaType has a natural ordering that is inconsistent with equals, which is generally recommended or should otherwise at least be indicated in the javadoc 2010-02-03 14:02:44 +00:00
Arjen Poutsma 0135a9451a SPR-6786 - The method org.springframework.http.MediaType.parseMediaType does not always throw IllegalArgumentException as the documentantion claims 2010-02-03 13:52:39 +00:00
Arjen Poutsma 0c6b99e489 SPR-6788 - The class MediaType has a natural ordering that is inconsistent with equals, which is generally recommended or should otherwise at least be indicated in the javadoc 2010-02-03 11:38:31 +00:00
Juergen Hoeller a44ec9f4f7 fixed JmsTemplate example (SPR-6789) 2010-02-03 00:29:49 +00:00
Andy Clement 5ca1f11ce2 SPR-6763: more methods on StandardEvaluationContext supporting add/remove from resolver/accessor strategies 2010-02-02 21:38:33 +00:00
Andy Clement 66f708392e SPR-6764: filtering strategy for SpEL method invocation 2010-02-02 19:38:44 +00:00
Arjen Poutsma 4343714c6d SPR-6788 - The class MediaType has a natural ordering that is inconsistent with equals, which is generally recommended or should otherwise at least be indicated in the javadoc 2010-02-02 13:14:19 +00:00
Andy Clement 644f3065b6 SPR-6610: don't wrap runtime exceptions thrown from methods invoked via an expression 2010-02-01 20:13:08 +00:00
Keith Donald 45f79530db with dependencies distribution added 2010-02-01 19:59:05 +00:00
Andy Clement 4c35697c79 SPR-6760: method called twice if exits via exception in a 'normal' case 2010-02-01 19:53:34 +00:00
Juergen Hoeller e3cdabfaac fixed MBeanExporter regression: do not try to expose abstract beans (SPR-6784) 2010-02-01 17:56:03 +00:00
Juergen Hoeller abdc35c893 component-scan's scoped-proxy attribute applies to scope-annotated singleton beans as well (SPR-6683) 2010-02-01 16:51:46 +00:00
Juergen Hoeller 56d2c9daf5 component-scan's scoped-proxy attribute applies to scope-annotated singleton beans as well (SPR-6683) 2010-02-01 16:30:21 +00:00
Arjen Poutsma 208c2d9c8b SPR-6785 - Improve message error when the MarshallingView modelKey attribute is not valid 2010-02-01 15:25:29 +00:00
Juergen Hoeller 1dbb64580c throw NotSerializableException if no serialization id is available 2010-02-01 14:52:43 +00:00
Juergen Hoeller 5f5e7c3262 polishing 2010-02-01 14:51:54 +00:00
Juergen Hoeller db71811c5a SharedEntityManagerCreator's EntityManager proxies are fully serializable now (SPR-6684) 2010-02-01 14:48:18 +00:00
Juergen Hoeller df54c8613d TransactionInterceptor is able to serialize "transactionManagerBeanName" as well (SPR-6680) 2010-02-01 14:45:11 +00:00
Juergen Hoeller 2d525901ff proxies with AspectJ pointcuts are fully serializable within a BeanFactory now (SPR-6681) 2010-02-01 14:43:35 +00:00
Costin Leau dcf0244566 SPR-3786
+ add note on annotation-based injection vs XML
+ provide a nicer introduction to annotation based chapter
2010-02-01 14:36:38 +00:00
Juergen Hoeller 83c018a0b4 call processConfigBeanDefinitions lazily if postProcessBeanDefinitionRegistry hasn't been called 2010-01-31 16:10:11 +00:00
Juergen Hoeller b53ccb3807 widened FactoryBean's "getObjectType" signature to return any Class<?> (SPR-6692) 2010-01-31 16:01:14 +00:00
Juergen Hoeller 8ab9da4461 introduced BeanDefinitionRegistryPostProcessor extension to BeanFactoryPostProcessor; @Configuration classes support definition of BeanFactoryPostProcessor beans as well (SPR-6455, SPR-6611) 2010-01-31 15:58:27 +00:00
Juergen Hoeller a897e3f01f refined DefaultLifecycleProcessor's start/stop logging and stop exception handling (SPR-6769, SPR-6770) 2010-01-31 15:52:13 +00:00
Juergen Hoeller 59b8a139d7 JndiObjectFactoryBean explicitly only chooses public interfaces as default proxy interfaces (SPR-5869) 2010-01-31 14:59:27 +00:00
Juergen Hoeller 9c44f9252d fixed cron example (SPR-6772) 2010-01-31 14:17:44 +00:00
Juergen Hoeller 6070a498fe BeanNameAutoProxyCreator detects alias matches for specified bean names as well (SPR-6774) 2010-01-31 14:12:48 +00:00
Juergen Hoeller 6b2b5c4c23 introduced BeanDefinitionRegistryPostProcessor extension to BeanFactoryPostProcessor; @Configuration classes support definition of BeanFactoryPostProcessor beans as well (SPR-6455, SPR-6611) 2010-01-31 14:05:28 +00:00
Juergen Hoeller 2d6ea2f4fe fixed JPA multi-unit setup example (SPR-6781) 2010-01-31 12:59:59 +00:00
Chris Beams fbd797e50b RESOLVED - issue SPR-6779: imported @Configuration classes do not get enhanced and fail to satisfy scoping requirements
refactoring, polishing.
2010-01-29 23:31:53 +00:00
Chris Beams 110b032ad9 IN PROGRESS - issue SPR-6779: imported @Configuration classes do not get enhanced and fail to satisfy scoping requirements
All tests in ImportedConfigurationClassEnhancementTests now pass.  The fix was simple - imported @Configuration class bean definitions were not getting marked with the attribute that indicates that they are indeed @Configuration class bean definitions.  To make this happen, ConfigurationClassPostProcessor's protected checkConfigurationClassCandidate(beanDef) method is being called from within ConfigurationClassBeanDefinitionReader when imported @Configuration classes are being processed.  This is quick and dirty, and the subsequent check-in will refactor the solution appropriately.
2010-01-29 20:55:03 +00:00
Chris Beams 5fdee47841 Unit test cornering bug SPR-6779, 'imported @Configuration classes do not get enhanced and fail to satisfy scoping requirements' 2010-01-29 19:48:25 +00:00
Costin Leau ee2b1cde82 SPR-6775
+ remove class definitions for sticking around (by forcing eager metadata initialization)
+ improve cache size by eliminating the numbers of method metadata objects created
+ improve lookup access on method metadata
2010-01-29 14:27:49 +00:00
Costin Leau 39f81760f8 SPR-6775
+ increase size to 256
2010-01-28 16:03:07 +00:00
Costin Leau b32c4cfb8a SPR-6775
+ replace the vanilla hashmap with a quick-and-dirty, JDK based, fixed LRU cache
2010-01-28 15:51:20 +00:00
Arjen Poutsma f2fdf9fa6b SPR-6771 - HttpMessageConverter should accept Class<? extends T> on can read 2010-01-28 09:23:34 +00:00
Chris Beams 1cda8cb6fa Updated documentation to point out that AnnotationConfigWebApplicationContext can accept both fully-qualified class names as well as base packages to the contextConfigLocation init-param. 2010-01-28 03:42:42 +00:00
Juergen Hoeller d13f0c8052 fixed namespace example (SPR-6766) 2010-01-27 13:48:57 +00:00
Arjen Poutsma 0a4a09a09d SPR-6759 - Jetty 7 doesn't like ShallowEtagHeaderFilter 2010-01-27 13:02:02 +00:00
Costin Leau 1bbe93e535 SPR-3709
+ improved example to work with multi-nested declarations
+ used JDK 5 syntax
+ added documentation code into trunk (including unit test) for easier future reference
2010-01-27 12:25:04 +00:00
Arjen Poutsma b1e2a2ec3c SPR-6577 - MarshallingView auto detect model with Jaxb2Marshaller chooses the wrong object 2010-01-27 10:52:08 +00:00
Costin Leau 71d7b22d5e SPR-3771
+ added table summarizing the Aware interfaces in Spring 3
2010-01-26 17:02:21 +00:00
Costin Leau 1152d51c6f SPR-4493
+ added some clarifications
+ improved the document structure
2010-01-26 14:31:44 +00:00
Arjen Poutsma ead5df4546 SPR-6649 - Request mapping incorrectly receiving all dispatches for a controller 2010-01-26 10:47:36 +00:00
Costin Leau 2f840b1097 SPR-6646
+ replaced handleRequest() with setSynchronizeOnSession() which is final
2010-01-26 10:07:40 +00:00
Juergen Hoeller 0968e9fbd0 LinkedMultiValueMap should implement Serializable (SPR-6765) 2010-01-25 20:04:01 +00:00
Costin Leau bc37c50972 SPR-4493
SPR-6756
2010-01-25 17:03:05 +00:00
Ben Hale 0c2a710787 Upgrade to spring-build 2010-01-23 17:27:51 +00:00
Ben Hale f614150421 Fixed up POM bug 2010-01-23 12:01:54 +00:00
Ben Hale 2afb58e74e Upgraded spring-build 2010-01-23 09:28:22 +00:00
Ben Hale 693a83ba88 Upgraded spring-build 2010-01-23 00:15:00 +00:00
Ben Hale 1305d6ac11 Separated out unit test projects 2010-01-23 00:03:05 +00:00
Ben Hale 265b82013d Updates to allow nightly snapshots of maven central-compatible artifacts 2010-01-22 20:16:25 +00:00
Juergen Hoeller 8c791b529b fixed instrumentation jar names (SPR-6753) 2010-01-22 19:23:11 +00:00
Juergen Hoeller 0f75210408 changed exception wording from "recursive" to "cyclic" (SPR-6755) 2010-01-22 19:10:19 +00:00
Juergen Hoeller dd93a40e7a added test for expression re-evaluation 2010-01-22 16:03:17 +00:00
Juergen Hoeller 6fcca3cd93 accept Set<?> instead of Set<Object> (SPR-6742) 2010-01-22 10:03:13 +00:00
Juergen Hoeller 3339356a55 fixed typo (SPR-6748) 2010-01-22 10:02:12 +00:00
Thomas Risberg b7f143ae58 updated reference documentation with references to "spring-agent.jar" to use "org.springframework.instrument-{version}.jar" (SPR-6597) 2010-01-21 16:49:05 +00:00
Juergen Hoeller bcfef8a4e1 support for JPA 2.0 TypedQuery interface and query vendor interfaces (SPR-6733) 2010-01-21 12:04:26 +00:00
Juergen Hoeller 975dcd7bbf fixed inaccuracies (SPR-6723, SPR-6725) 2010-01-20 22:19:13 +00:00
Juergen Hoeller 0a6f2348b8 WebRequest is a resolvable dependency in Servlet/Portlet web application contexts (SPR-6727) 2010-01-20 22:09:13 +00:00
Juergen Hoeller 1b6f3f1f22 Query call chaining works with shared EntityManager proxy outside of transaction as well (SPR-6726) 2010-01-20 15:39:17 +00:00
Juergen Hoeller 081d81e5b0 fixed getPropertyTypeDescriptor to work for nested indexed property as well as for array property (SPR-6710) 2010-01-20 15:31:20 +00:00
Juergen Hoeller 5abd3b99b9 fixed getPropertyTypeDescriptor to work for nested indexed property as well (SPR-6710) 2010-01-20 15:10:22 +00:00
Juergen Hoeller a70bb40b3d updated LocalValidatorFactoryBean documentation (SPR-6609) 2010-01-20 11:13:50 +00:00
Juergen Hoeller 8bf2e2459e added default PropertyEditor for java.util.UUID (SPR-6696) 2010-01-20 09:32:03 +00:00
Juergen Hoeller 45448463b8 collect exceptions across all constructors that have been tried (SPR-6720) 2010-01-20 09:29:50 +00:00
Juergen Hoeller 1896efd048 removed references to Perl5RegexpMethodPointcut (SPR-6721) 2010-01-20 09:24:31 +00:00
Juergen Hoeller 6ffb750171 updated CustomEditorConfigurer example to recommended style (SPR-5971) 2010-01-20 09:20:30 +00:00
Juergen Hoeller d9ed1e953e fixed documentation bugs 2010-01-19 14:40:50 +00:00
Juergen Hoeller 9e642e75b2 removed Commons Collection reference from javadoc (SPR-6716) 2010-01-19 14:20:54 +00:00
Juergen Hoeller a6769d60c0 fixed support for JPA 2.0 persistence schema (SPR-6711) 2010-01-18 19:26:52 +00:00
Juergen Hoeller 7a792f6c23 fixed support for JPA 2.0 persistence schema (SPR-6711) 2010-01-18 19:17:52 +00:00
Juergen Hoeller 95c695eb2f fixed BeanPostProcessor invocation for null bean (SPR-6700) 2010-01-18 18:51:28 +00:00
Juergen Hoeller 7097a9e965 proceed in case of resolution failure for a single resource entry in the list 2010-01-18 18:27:30 +00:00
Juergen Hoeller c31f245dc9 added test for system placeholders in PropertyPlaceholerConfigurer's Resource array property 2010-01-18 15:52:52 +00:00
Juergen Hoeller 88ff3c9a23 only try to restore attribute if the value differs (ignoring Portlet spec attributes; SPR-6712) 2010-01-18 15:51:00 +00:00
Chris Beams f82563fb6f polishing 2010-01-18 15:45:10 +00:00
Chris Beams 4c05eaeb16 Resolved SPR-6602, relating to FactoryBean behavior in @Configuration classes. See issue and code comments for full details. 2010-01-18 08:54:45 +00:00
Arjen Poutsma 1cd0a9750d SPR-6467 - Allow ContentNegotiatingViewResolver to be strict ant return a 406 if no view found 2010-01-15 16:37:58 +00:00
Arjen Poutsma 0cb9271b95 Test for SPR-6690 2010-01-15 11:17:27 +00:00
Arjen Poutsma 8d5fc2bf91 SPR-6686 - @ResponseBody throws HttpMediaTypeNotAcceptableException if client accepts "*/*" 2010-01-15 10:23:59 +00:00
Juergen Hoeller f7952fccc8 fixed sample code (SPR-6687) 2010-01-14 17:01:40 +00:00
Juergen Hoeller 23b0f82173 fixed link to blog entry (SPR-6691) 2010-01-14 16:55:33 +00:00
Juergen Hoeller 0cc0a9bc2b added "concurrency" property to Default/SimpleMessageListenerContainer and JmsActivationSpecConfig, supporting placeholders for the jms namespace "concurrency" attribute now (SPR-6232) 2010-01-14 11:17:15 +00:00
Juergen Hoeller 998aa14981 fixed resolveRootDirResource regression (SPR-6592) 2010-01-13 18:24:16 +00:00
David Syer b077d5ba97 SPR-6678: fix poms for 3.0.1 2010-01-13 11:07:08 +00:00
David Syer e4d8651aa9 RESOLVED - issue SPR-6668: Small Connection leak in DataSourceInitializer
http://jira.springframework.org/browse/SPR-6668
2010-01-13 11:00:41 +00:00
Juergen Hoeller e195c39d3c unresolvable placeholders will be ignored by default for Resource array properties as well (SPR-6654) 2010-01-12 19:50:18 +00:00
Juergen Hoeller 7cbd9e1d93 fixed type assignability check for wildcarded Map (SPR-6676) 2010-01-12 15:31:30 +00:00
Juergen Hoeller 1ff99f2569 MBeanClientInterceptor understands CompositeData/TabularData arrays (SPR-6548) 2010-01-12 15:10:07 +00:00
Juergen Hoeller 2e032889ef added "alwaysTranslate" flag (SPR-6630) 2010-01-12 13:26:22 +00:00
Juergen Hoeller fd3a39dc98 MimeMessageHelper encodes from, to, cc, bcc String addresses with given encoding as well (SPR-6530) 2010-01-12 13:19:50 +00:00
Juergen Hoeller 38cf127c8b mark spring-aop as required for spring-context (SPR-6578) 2010-01-12 12:49:16 +00:00
Juergen Hoeller 0ba8375546 full support for JPA 2.0 PersistenceUnitInfo SPI (for compatibility with Hibernate 3.5 beta 3; SPR-6408) 2010-01-12 12:39:56 +00:00
Juergen Hoeller 5c41e2c6e1 made comment prefix configurable (SPR-6667) 2010-01-12 10:15:04 +00:00
Mark Fisher 410dd0aa9f SPR-6670 @Scheduled now supports property placeholders for cron expressions. 2010-01-11 20:20:33 +00:00
Mark Fisher 1284086ffa SPR-6669 @Scheduled may now be used as a meta-annotation 2010-01-11 18:36:48 +00:00
David Syer 543515e36c RESOLVED - issue SPR-6666: CronTrigger/CronSequenceGenerator fails to handle daylight saving timezone changes 2010-01-11 16:05:12 +00:00
Arjen Poutsma bb3c8e5c87 SPR-6640 - PathVariable does not work properly after updated to 3.0 GA 2010-01-11 11:27:43 +00:00
Juergen Hoeller a70f525d4e fixed toString handling (SPR-5582) 2010-01-09 18:39:03 +00:00
Juergen Hoeller 4ca54fb415 fixed @Scheduled processing to kick in once only even in an ApplicationContext hierarchy (SPR-6656) 2010-01-08 16:00:07 +00:00
Juergen Hoeller 2ef40d2422 fixed typos 2010-01-08 15:47:20 +00:00
Juergen Hoeller b9a3d3f392 polishing 2010-01-07 23:29:13 +00:00
Juergen Hoeller 38f5c7a1d5 added assertion 2010-01-07 23:28:25 +00:00
Juergen Hoeller b56328aa9e replaced references to "spring-agent.jar" with "org.springframework.instrument.jar" (SPR-6597) 2010-01-07 13:32:42 +00:00
Juergen Hoeller 4a90266f8e expose offending value through public "getValue()" method (SPR-6629) 2010-01-07 13:27:40 +00:00
Juergen Hoeller 8af7f27942 ApplicationListeners will only be executed once per event (even for scripted objects; SPR-6589) 2010-01-07 12:58:18 +00:00
Juergen Hoeller 8bda9cd2bf fixed StandardEvaluationContext code sample 2010-01-07 11:59:31 +00:00
Juergen Hoeller a939c4ea4e polishing 2010-01-06 22:24:30 +00:00
Juergen Hoeller c270d347cf DefaultLifecycleProcessor etc 2010-01-06 22:23:55 +00:00
Juergen Hoeller 2ba1dd47b0 allow for identifying a specific JBossWorkManagerMBean (SPR-6648) 2010-01-06 22:15:58 +00:00
Juergen Hoeller 431fd5bb22 allow for overriding specific DefaultLifecycleProcessor hooks (SPR-6617) 2010-01-06 19:48:48 +00:00
Juergen Hoeller 819f4be08e added lock timeout error code for H2 (SPR-6612) 2010-01-06 19:35:15 +00:00
Mark Fisher 4ab4fa7042 SPR-6644 The 'id' value from an 'executor' element in the task namespace is now used as the thread name prefix for the resulting ThreadPoolTaskExecutor instance. 2010-01-05 22:27:47 +00:00
Juergen Hoeller 265084cb6c fixed retriever cache putting 2010-01-05 14:46:15 +00:00
Juergen Hoeller a7a03356f4 revised JSP-based views to never fail when trying to setting forward attributes (SPR-6623) 2010-01-05 14:03:27 +00:00
Juergen Hoeller 4931e8b229 fixed "inner vs. nested class" terminology (SPR-6608) 2010-01-05 14:01:30 +00:00
Juergen Hoeller b594192425 refactored to pass along original ServletContext (for WebLogic and Resin JSP compatibility; SPR-6606) 2010-01-05 13:27:53 +00:00
Juergen Hoeller e5d4ffc166 reset retriever cache when adding/removing listeners (SPR-6624) 2010-01-05 13:09:03 +00:00
Juergen Hoeller f7b0a2c0a2 fixed JavaConfig sample code (SPR-6637, SPR-6638) 2010-01-05 12:58:41 +00:00
Juergen Hoeller 9ca6003533 fixed scoped proxy unwrapping (SPR-6625) 2010-01-05 12:52:28 +00:00
Juergen Hoeller e328083d11 updated manifest for new JPA 2.0 criteria package (SPR-6636) 2010-01-05 12:50:22 +00:00
Chris Beams d1b3f57320 Resolved SPR-6618. Restrictions were too tight on overloaded bean methods and were preventing it altogether. Overloading is now allowed, as long as there is no ambiguity at runtime which bean method should be invoked. 2009-12-30 19:42:12 +00:00
Juergen Hoeller 75d0f9b95c initial preparations for 3.0.1 release 2009-12-28 18:58:07 +00:00
Juergen Hoeller 0fb4af6b59 generic ApplicationListener event type gets detected through proxy as well 2009-12-28 18:57:15 +00:00
Chris Beams d2f28ccf41 SJC-273 resolved minor @Configuration documentation error 2009-12-28 07:00:49 +00:00
Juergen Hoeller bddb38d787 fixed getBeansWithAnnotation to ignore beans with non-determinable type (SPR-6579) 2009-12-23 19:11:19 +00:00
Christian Dupuis f3274624b3 STS-723: fixed ViewControllerBeanDefinitionParser to not rely on instance state for handler mapping and handler adapter bean names 2009-12-22 16:52:33 +00:00
Arjen Poutsma 4160fc85f2 Updated build for 3.0.1 2009-12-17 10:53:15 +00:00
Chris Beams f6228b91e5 Resolved SPR-6187: touch-ups based on mfisher's feedback. 2009-12-16 08:44:54 +00:00
Juergen Hoeller f208988563 polishing 2009-12-15 21:37:59 +00:00
Juergen Hoeller fd1bfeefe4 avoid hard-coded AOP dependency for ScopedObject check 2009-12-15 21:20:51 +00:00
Juergen Hoeller 198911e0d2 removed hard ScopedProxyUtils dependency in ConfigurationClassEnhancer 2009-12-15 20:45:45 +00:00
Juergen Hoeller 776f0490f9 prepared for 3.0 GA release 2009-12-15 20:21:07 +00:00
Juergen Hoeller 2ec39f5000 TypedValue.NULL_TYPED_VALUE -> TypedValue.NULL 2009-12-15 20:19:24 +00:00
Juergen Hoeller dc99df2972 use TypeDescriptor.forObject instead of constructor; enforce use of TypeDescriptor.valueOf through making the constructor private 2009-12-15 20:18:31 +00:00
Keith Donald 7fb19d658b primitive desc caching 2009-12-15 19:55:10 +00:00
Keith Donald 2fef141a00 TypeDescriptor.valueOf usage in favor of constants; TypedValue usage simplification 2009-12-15 19:41:52 +00:00
Keith Donald f37d7082a2 moved public methods up 2009-12-15 18:51:28 +00:00
Keith Donald 39325958bc moved static factory methods up 2009-12-15 18:50:17 +00:00
Juergen Hoeller d6f4f4c7b4 BeanValidationPostProcessor runs in before-initialization phase by default (SPR-6565) 2009-12-15 18:04:44 +00:00
Keith Donald 943c46b07d value of optmization 2009-12-15 17:52:52 +00:00
Keith Donald 8ff801648d object to String not supported test case 2009-12-15 16:07:43 +00:00
Keith Donald 5c7c56a6b3 ObjectToObject converter now only matches public methods/constructors; private class method invocations also supported now through a makeAccessible call 2009-12-15 15:53:11 +00:00
Keith Donald b64945988b general polishing 2009-12-15 15:09:25 +00:00
Keith Donald bb93f5967f removed generic warning 2009-12-15 14:00:27 +00:00
Juergen Hoeller 1c33206042 catch ConversionException and ConvertedNotFoundException in BeanWrapper's convertIfNecessary as well, in order to support constructor resolution (SPR-6563) 2009-12-15 12:53:36 +00:00
Juergen Hoeller 2153b2fbd5 introspect element type in case of incoming Collection/Map in order to not accidentally say canConvert=true (SPR-6564) 2009-12-15 12:36:22 +00:00
Juergen Hoeller 5f9f69958e refined PropertyEditor exposure for the ConversionService case 2009-12-15 11:34:19 +00:00
Chris Beams 0057481a0a SPR-6187: Document @Configuration classes and AnnotationConfig[Web]ApplicationContext 2009-12-15 11:04:25 +00:00
Juergen Hoeller f52986ea15 introduced TypeDescriptor.OBJECT and TypeDescriptor.STRING 2009-12-15 10:21:16 +00:00
Juergen Hoeller 1b0c6b848d only try to convert to String if canConvert returns true 2009-12-15 09:59:11 +00:00
Chris Beams 2764024351 JavaDoc on AnnotationConfigApplicationContext#scan(String...) 2009-12-15 07:24:12 +00:00
Juergen Hoeller 83a7cb9177 SpelExpressionParser etc 2009-12-15 02:05:34 +00:00
Juergen Hoeller 086aeb0aac rearranged spel subpackages in order to avoid package dependency cycle; introduced SpelParserConfiguration object to replace bit flags 2009-12-15 02:03:16 +00:00
Juergen Hoeller b5b1962530 removed MultipartRequest mixin interface again (avoiding a package dependency cycle) 2009-12-15 00:51:32 +00:00
Keith Donald 5b87793521 html multi-page doc now only generates files per chapter consistent with Spring 2.5 2009-12-15 00:18:46 +00:00
Juergen Hoeller 18b5cd101e ConverterRegistry etc 2009-12-14 21:42:54 +00:00
Juergen Hoeller 86475593bb added special handling of String array values for required fields, e.g. for WebRequestDataBinder (SPR-6552) 2009-12-14 21:42:17 +00:00
Juergen Hoeller 26b3443299 added unit test for setRequiredFields with @MVC (SPR-6552) 2009-12-14 21:32:26 +00:00
Juergen Hoeller 6622c71935 revised default converters; renamed ConverterRegistry's addGenericConverter to addConverter 2009-12-14 21:14:26 +00:00
Costin Leau c2e1f113f5 SPR-5764
+ improved JBoss LTW by using the proper class loader for loading reflection types
2009-12-14 18:56:16 +00:00
Chris Beams 77a70f256c further tweaks on logging section 2009-12-14 17:27:27 +00:00
Chris Beams 56dcd9296a minor usage/grammar improvements in logging section 2009-12-14 17:09:52 +00:00
Costin Leau cb4bc58dbd + improved javadoc (no code changes) 2009-12-14 15:52:01 +00:00
Costin Leau b963906bd1 SPR-6447
+ moved petclinic to spring-samples (https://src.springframework.org/svn/spring-samples/petclinic)
2009-12-14 15:51:33 +00:00
Thomas Risberg d016a1cc2f updated version for 3.0 GA release 2009-12-14 12:58:09 +00:00
David Syer c8d65f078b SPR-6558: correct maven repository locations 2009-12-14 07:17:36 +00:00
Keith Donald d7a8d499be long style formatting tests 2009-12-14 02:02:09 +00:00
Juergen Hoeller 2f539cded9 prepared for 3.0 GA release 2009-12-14 00:58:44 +00:00
Juergen Hoeller 6635a5d96d @ManagedBean coverage in javadoc 2009-12-14 00:58:04 +00:00
Juergen Hoeller cb9619f62b support @ManagedBean for name retrieval in AnnotationBeanNameGenerator as well; support @ManagedBean and @Named for direct use only 2009-12-14 00:53:56 +00:00
Juergen Hoeller 59d9f73f46 ignore client proxies for export 2009-12-13 23:50:48 +00:00
Juergen Hoeller 3cfac84bff updated javadoc (SPR-6546) 2009-12-13 23:45:16 +00:00
Juergen Hoeller 1b8a67d5d7 reimplemented bean lookup to avoid getBeanNamesForType(Object.class) 2009-12-13 23:30:07 +00:00
Juergen Hoeller dc6c1dc727 MBeanExporter detects FactoryBean-exported resources independent from declaration order 2009-12-13 23:28:07 +00:00
Juergen Hoeller db6e807421 removed getBeansWithAnnotation(Class,boolean,boolean) method from ListableBeanFactory; reimplemented getBeansWithAnnotation(Class) to avoid use of getBeanNamesForType(Object.class) 2009-12-13 23:24:43 +00:00
Juergen Hoeller d7a1630381 removed getBeansWithAnnotation(Class,boolean,boolean) method from ListableBeanFactory; reimplemented getBeansWithAnnotation(Class) to avoid use of getBeanNamesForType(Object.class) 2009-12-13 23:23:34 +00:00
Juergen Hoeller 929665d284 fixed accidental breakage in bean class resolution with tempClassLoader 2009-12-13 16:07:03 +00:00
Juergen Hoeller 9d2f7934de fixed non-Lifecycle-FactoryBean with exposed Lifecycle object case (SPR-6545) 2009-12-13 15:47:52 +00:00
Juergen Hoeller 35354ad520 polishing 2009-12-13 15:30:52 +00:00
Juergen Hoeller 42c7be4590 SmartLifecycle retrieval fix, properly taking FactoryBeans into account (SPR-6545) 2009-12-13 15:28:34 +00:00
Juergen Hoeller a0c4d2c13c detect Lifecycle-implementing FactoryBeans as well (SPR-6545) 2009-12-13 14:08:08 +00:00
Juergen Hoeller 5f9b444319 bean properties of type enum array/collection can be populated with comma-separated String (SPR-6547) 2009-12-13 13:21:30 +00:00
Juergen Hoeller b497f6ccad fixed JSR-303 Validator delegation code (SPR-6557) 2009-12-13 12:31:34 +00:00
David Syer 63996cbb06 SPR-6541: move spring repository placeholder into a profile (build) and the other repositories into another profile (legacy-build) 2009-12-13 10:03:59 +00:00
Christian Dupuis 7c6c1c3ad8 some minor adjustments to the mvc namespace to make it work in the tools 2009-12-11 23:03:49 +00:00
Keith Donald 14b69148f9 file names based on section id now; updated sec ids to match conventions 2009-12-11 19:01:25 +00:00
Keith Donald b673087a87 polish 2009-12-11 18:26:12 +00:00
Keith Donald 541cf2de80 removed unused method; polishing 2009-12-11 18:24:44 +00:00
Keith Donald 753d0b0c91 removed generic warning 2009-12-11 18:19:43 +00:00
Keith Donald 027bd24260 polish 2009-12-11 18:16:38 +00:00
Keith Donald 4f4732df45 javadoc polishing 2009-12-11 17:56:41 +00:00
Keith Donald 8d4b9c0810 javadoc 2009-12-11 16:55:33 +00:00
Keith Donald 5ce16e01eb broke out collection to string converter logic from collection to object 2009-12-11 14:45:21 +00:00
David Syer 143ce57e76 SPR-6541: consolidate repositories into a profile (-P build) 2009-12-11 06:23:46 +00:00
Juergen Hoeller e1d5c7310a updated JPA 2.0 support to the final spec (supporting the "getCriteriaBuilder" method) 2009-12-10 21:42:48 +00:00
Juergen Hoeller 859f422cbf component scanning autodetects the new EE 6 "javax.annotation.ManagedBean" stereotype 2009-12-10 20:40:02 +00:00
Juergen Hoeller 77f07da49d autodetect GlassFish V3 as well (SPR-6152) 2009-12-10 18:42:59 +00:00
Keith Donald 96de14ef2e SPR-6537 initial commit; more extensive testing to follow 2009-12-10 17:36:58 +00:00
Keith Donald dd1bbde891 removed generic warning 2009-12-10 16:21:30 +00:00
Arjen Poutsma 04e08d6952 Updated docbook files to use Docbook 4.5 DTDs, so it uses the locally cached versions 2009-12-10 15:22:55 +00:00
Arjen Poutsma 4c76b48fd6 Updated Multipart documentation 2009-12-10 12:37:28 +00:00
Juergen Hoeller dc1b500430 preparations for 3.0 GA 2009-12-09 22:44:11 +00:00
Juergen Hoeller 1e1964a060 reintroduced createBinder template method in Servlet/Portlet AnnotationMethodHandlerAdapter (SPR-6534) 2009-12-09 22:29:43 +00:00
Juergen Hoeller 2ce5090d00 polishing 2009-12-09 17:54:02 +00:00
Juergen Hoeller 8334a03e03 added "converters" property to FormattingConversionServiceFactoryBean as well 2009-12-09 17:53:25 +00:00
Juergen Hoeller bc6b707a22 revised GenericConverter's "getConvertibleTypes()" signature to return Set of ConvertiblePair 2009-12-09 17:52:19 +00:00
Juergen Hoeller 010e72c35a GenericConversionService prefers matches against inherited interfaces over superclasses (SPR-6297) 2009-12-09 16:16:55 +00:00
Juergen Hoeller ad29a2376d PropertyPlaceholderConfigurer is compatible with Spring 2.5 extensions such as GigaSpaces again (SPR-6514) 2009-12-09 16:09:12 +00:00
Juergen Hoeller 3ffc2ba48d revised section on inheriting annotations from interfaces 2009-12-09 15:32:58 +00:00
Juergen Hoeller 31144591b0 revised javadoc (SPR-5720) 2009-12-09 15:24:47 +00:00
Juergen Hoeller 8b0a4921d9 removed unnecessary logging 2009-12-09 14:59:44 +00:00
Costin Leau 74022861c5 SPR-6492
+ upgrade to JRuby 1.4.0
2009-12-09 10:57:54 +00:00
Chris Beams 481dd31006 Renamed tests for AnnotationConfig[Web]ApplicationContext; added tests for scan() and register() methods. 2009-12-08 15:29:27 +00:00
Juergen Hoeller 736c7212db SmartLifecycle beans will get auto-started on demand even if marked as lazy-init (SPR-6515) 2009-12-08 13:27:15 +00:00
Juergen Hoeller 93b17042a2 SmartLifecycle beans will get auto-started on demand even if marked as lazy-init (SPR-6515) 2009-12-08 12:17:01 +00:00
Juergen Hoeller e65ba99e23 use varargs for scan method as well 2009-12-08 10:17:27 +00:00
Costin Leau 95ddeff17d SPR-6492
EBR-551
+ seems I spoke too soon - JRuby is still not in the EBR
2009-12-08 09:19:32 +00:00
Costin Leau 085aecd51f SPR-6492
+ upgrade to JRuby 1.4.0
2009-12-08 08:57:48 +00:00
Juergen Hoeller c4d8f6b3eb extended registerAfterCompletionWithExistingTransaction's exception handling to detect JBoss RollbackException as well (SPR-6450) 2009-12-07 20:53:21 +00:00
Juergen Hoeller 5fdc29f152 polishing 2009-12-07 20:33:33 +00:00
Juergen Hoeller 1d005e12af fail when @DateTimeFormat is being used without JodaTime on the classpath (SPR-6508) 2009-12-07 20:33:03 +00:00
Juergen Hoeller 61f23710eb relaxed warning about ambiguous setters to only be logged in case of actual write access (SPR-6399) 2009-12-07 18:57:32 +00:00
Arjen Poutsma 27e0642543 SPR-6502 - Broken @RequestMapping inheritance 2009-12-07 16:44:51 +00:00
Juergen Hoeller 09a55c8ede import works with relative resources in other classpath roots again (SPR-6493) 2009-12-07 15:16:36 +00:00
Arjen Poutsma 231c8337d2 SPR-6529 - DateTimeFormatAnnotationFormatterFactory calls String.isEmpty(), which exists only in JDK1.6+ 2009-12-07 14:41:30 +00:00
Juergen Hoeller 93abbd0ef7 newTransactionStatus reverted to its original role, just without preparing synchronization (SPR-6521) 2009-12-07 14:27:27 +00:00
Arjen Poutsma 8678652f3e SPR-6528 - PathVariables of type double 2009-12-07 14:25:21 +00:00
Arjen Poutsma 976f920db2 SPR-6482 - @RequestMapping handled incorrectly when value contains "." (dot) character 2009-12-07 13:59:07 +00:00
Juergen Hoeller f36e8252c8 polishing 2009-12-07 09:43:16 +00:00
Juergen Hoeller f72769a621 added order property to AnnotationMethodHandlerAdapter (SPR-6516) 2009-12-07 09:42:44 +00:00
Juergen Hoeller abf6a7ee18 made parse and decorate non-final (SPR-6526) 2009-12-07 09:16:00 +00:00
Andy Clement 33a7bbb485 SPR-6525: avoid need to use #root for method parameter references 2009-12-06 23:21:07 +00:00
Sam Brannen e01c2eafa1 Fixed copy-n-paste errors. 2009-12-04 23:31:28 +00:00
David Syer f4763a801f SPR-5327: Duh: broken build - invalid XML. 2009-12-04 21:39:32 +00:00
Sam Brannen 11d2921767 Removed reference to the British musical and multimedia group "the the". ;) 2009-12-04 20:43:45 +00:00
Juergen Hoeller 0ea5b5ef0b opened up RestTemplate method signatures to Map<String, ?> and Object array instead of enforcing String values 2009-12-04 18:29:53 +00:00
David Syer ad3fa505f3 SPR-5327: tweak the build.xml for core to try and make commons-logging optional in generated poms 2009-12-04 18:26:25 +00:00
David Syer 1202f67cc8 SPR-5327: tweak the ivy.xml so that commons-logging is a separate configuration. It already comes out as optional in the generated poms (including core), which isn't great, but I can't see what is causing that 2009-12-04 18:25:31 +00:00
Juergen Hoeller 12892eef98 fixed String size constraint example (SPR-6517) 2009-12-04 17:29:06 +00:00
Juergen Hoeller 0d413c7e36 reverted schema update implementation for Hibernate 3.2 compatibility (SPR-6509) 2009-12-04 17:19:47 +00:00
David Syer 604a9f077d SPR-5327: update artifact ids 2009-12-04 16:15:20 +00:00
David Syer fae06dc156 SPR-6092: clarify jar name in test docs 2009-12-04 15:21:51 +00:00
David Syer 5013664ec5 BATCH-5327: Correct name of SLF4J 2009-12-04 14:00:58 +00:00
David Syer ebd15e3287 SPR-6092: add section on Ivy 2009-12-04 12:47:47 +00:00
David Syer 0400ccc11f SPR-5327: tidy up aopalliance dependency 2009-12-04 11:33:56 +00:00
David Syer d1dfa873b7 SPR-6092: add section on EBR/Maven and tidy up references to jar files throughout 2009-12-04 11:21:04 +00:00
Juergen Hoeller 95fb766d10 initial preparations for 3.0 GA 2009-12-04 00:58:38 +00:00
Juergen Hoeller e161c93f8d full support for formatters on array/collection elements (SPR-6504) 2009-12-04 00:34:40 +00:00
Juergen Hoeller 388edd7aaa lenient property name casing, beyond standard JavaBeans conventions (SPR-6491) 2009-12-03 23:34:37 +00:00
Juergen Hoeller 0a36596468 do not register default formatters for Date and Calendar (requiring explicit use of @DateTimeFormat there) 2009-12-03 23:26:08 +00:00
Juergen Hoeller 73a75220a8 do not register a default NumberFormatter (SPR-6490) 2009-12-03 22:41:44 +00:00
Juergen Hoeller ac3a1d9132 added since tag 2009-12-03 16:30:51 +00:00
Juergen Hoeller fcfe94139c updated required Hibernate version 2009-12-03 13:18:39 +00:00
Juergen Hoeller b16e502c16 fixed typo 2009-12-03 13:17:08 +00:00
Juergen Hoeller 0b577dd558 fixed dependencies 2009-12-03 13:15:33 +00:00
Sam Brannen 4093935275 JavaDoc polishing 2009-12-02 09:34:12 +00:00
David Syer 277d153604 Add trailing / to repository URLs on S3 (improves build time for clients) 2009-12-02 08:26:13 +00:00
Juergen Hoeller cb9e877e4a preparations for RC3 release 2009-12-01 02:58:38 +00:00
Juergen Hoeller 132bb8a672 polishing 2009-12-01 02:45:12 +00:00
Juergen Hoeller 126f83959b preparations for RC3 release 2009-12-01 02:26:23 +00:00
Juergen Hoeller 69124f9392 JSR-303 SpringValidatorAdapter uses field name as first argument (analogous to bind errors; SPR-6407) 2009-12-01 02:25:48 +00:00
Juergen Hoeller 5165465821 initialize synchronization after begin while instantiating TransactionStatus as early as possible (SPR-6409) 2009-12-01 01:32:51 +00:00
Thomas Risberg d67e655c17 updated version for RC3 release 2009-11-30 17:55:24 +00:00
Thomas Risberg fdfbf2a01b changed jar name to use RELEASE instead of RC1 2009-11-30 17:54:50 +00:00
Keith Donald b7b52fffea renamed path element to mapping per code review 2009-11-30 16:32:59 +00:00
Costin Leau 7a1c4d23b4 SPR-6469
+ renamed spring-agent.jar to org.springframework.instrument.jar through-out the documentation.
2009-11-30 13:18:16 +00:00
David Syer b7e37ddb07 SPR-5327: tidy up Maven dependencies (keeping commons-logging) 2009-11-30 12:57:11 +00:00
David Syer 1a06b6a0ab SPR-5327: tidy up Maven dependencies (keeping commons-logging) 2009-11-30 12:56:25 +00:00
Arjen Poutsma 81d7f5bc5a SPR-6375 - Register sensible default HTTP Message Converters based on what is available in the classpath 2009-11-30 12:21:13 +00:00
Juergen Hoeller 666700f7f3 constructor arguments can be overridden by name in child bean definitions (SPR-6463) 2009-11-30 12:17:28 +00:00
Arjen Poutsma cc32399878 SPR-6470 - Make filterModel() in MappingJacksonJsonView more lenient 2009-11-30 10:29:27 +00:00
Arjen Poutsma 541aae12ef SPR-5802 - NullPointerException when using @CookieValue annotation 2009-11-30 10:16:14 +00:00
Arjen Poutsma 73b54f4efe SPR-6466 - ContentNegotiatingViewResolver can not handle View implementations returning null as content type 2009-11-30 10:10:27 +00:00
Keith Donald c8d6360855 ability to have multiple path patterns per mapped interceptor definition 2009-11-30 07:51:29 +00:00
Keith Donald d4a21f1db8 added back mvc:interceptors element and added interceptor matching based on path pattern; needs review 2009-11-30 02:55:02 +00:00
Keith Donald 0be6473316 javadoc polishing--named Parser String arg name to 'text' 2009-11-28 21:16:01 +00:00
Keith Donald fbfa67e8a6 ordered sorting 2009-11-28 07:20:20 +00:00
Mark Fisher f6a2e58d95 SPR-6341 Added documentation for Lifecycle, SmartLifecycle, and LifecycleProcessor in the 'beans' chapter after init/destroy callbacks are covered. 2009-11-28 00:02:30 +00:00
Mark Fisher a64f0f1ebe Added tests for the DefaultLifecycleProcessor and a custom "lifecycleProcessor" bean. 2009-11-27 20:38:43 +00:00
Mark Fisher 1ac7b95c1d SPR-6460 Added "phase" attribute to the JMS namespace's "jca-listener-container" element. 2009-11-27 18:16:08 +00:00
Mark Fisher dc24944cd9 SPR-6460 Added "phase" attribute to the JMS "listener-container" element. 2009-11-27 17:42:30 +00:00
Mark Fisher b444220564 SPR-5507 When determining start/stop order, the DefaultLifecycleProcessor checks for the new Phased interface rather than SmartLifecycle now. 2009-11-27 17:30:35 +00:00
Keith Donald 57f0a7d94b added detectInterceptors compatibility check 2009-11-27 17:04:48 +00:00
Mark Fisher 5e1c00ceb2 SPR-5507 Factored out the Phased interface. 2009-11-27 15:59:12 +00:00
Arjen Poutsma e664779f3e Do not require bound classes or context for Jaxb2Marshaller.
RestTemplate now registers JAXB2 and Jackson by default, if found on the classpath.
2009-11-27 14:34:27 +00:00
Arjen Poutsma 01ce468ff2 SPR-6386 - MappingJacksonHttpMessageConverter ignores supported media types property 2009-11-27 14:14:13 +00:00
Arjen Poutsma dc0613f487 HttpMessageConverter.supports() is split into canRead/canWrite.
HttpMessageConverter.write() now allows for a specific content type.
2009-11-27 13:23:15 +00:00
Keith Donald 18c63f70c4 polishing 2009-11-27 04:31:09 +00:00
Juergen Hoeller f751acea12 fixed tests 2009-11-27 02:15:48 +00:00
Juergen Hoeller 7e5106d1ac FormatterRegistry extends ConverterRegistry now; FormattingConversionService extends GenericConversionService 2009-11-27 01:58:31 +00:00
Juergen Hoeller a1916ca765 polishing 2009-11-27 01:49:18 +00:00
Juergen Hoeller d6197b743d clarified double role of id property 2009-11-27 01:45:53 +00:00
Juergen Hoeller d54cf0ca37 polishing 2009-11-27 01:43:34 +00:00
Juergen Hoeller ac490114ae propagate full TypeDescriptor for field-level conversion as well 2009-11-27 01:43:14 +00:00
Juergen Hoeller 973fb6ce40 updated to Groovy 1.6.5 2009-11-27 01:37:43 +00:00
Juergen Hoeller 9400fb3e78 replaced custom asList method with Arrays.asList(ObjectUtils.toObjectArray(...)) 2009-11-27 01:35:45 +00:00
Juergen Hoeller cc0bd730eb polishing 2009-11-27 01:34:56 +00:00
Juergen Hoeller bc06ffb6b8 removed obsolete System.err logging for the property-not-found case 2009-11-27 01:28:54 +00:00
Juergen Hoeller 5e68cc5a58 removed inappropriate assertion that prevents static method calls 2009-11-27 01:03:48 +00:00
Juergen Hoeller 34d4e3cbe0 refined Hibernate version range 2009-11-26 16:09:48 +00:00
Costin Leau fbee526a40 + add oxm.xsd namespace alias 2009-11-26 15:44:29 +00:00
Sam Brannen 218051464d Fixed typo 2009-11-26 12:12:14 +00:00
Juergen Hoeller 1cf0c12674 restored Hibernate 3.2 compatibility (SPR-6387) 2009-11-26 11:08:22 +00:00
Arjen Poutsma 8546e64b03 Support for media subtype suffixes in include(), i.e. application/*+xml includes application/soap+xml 2009-11-26 10:41:22 +00:00
Keith Donald 8259d45583 removed now obsolete test case 2009-11-26 08:39:46 +00:00
Keith Donald de1d548725 SPR-6413 and SPR-6414 first cut: needs review, particularly compatibility note in AbstractHandlerMapping 2009-11-26 08:27:42 +00:00
Juergen Hoeller 6c89946d42 leniently fall back to the passed-in method if a bridge method couldn't be resolved (for Groovy 1.7 compatibility) 2009-11-25 16:55:13 +00:00
David Syer e10161182b RESOLVED - issue SPR-6444: TaskExecutor not initialized in task namespace 2009-11-25 13:18:31 +00:00
Arjen Poutsma 89975c8b79 SPR-6378 - RC2: Issue with RequestMethod.GET differs from M2 2009-11-25 11:12:03 +00:00
Juergen Hoeller 5d2d2bcf39 fixed supported HSQL/H2 version range (SPR-6403) 2009-11-25 00:36:50 +00:00
Juergen Hoeller bb97ca32c4 added configurable "autoGrowNestedPaths" property to DataBinder (SPR-6430) 2009-11-25 00:17:29 +00:00
Juergen Hoeller 9a2f9ccde4 added static newInstance method to BeanPropertyRowMapper (SPR-6433); aligned ParameterizedBeanPropertyRowMapper factory methods 2009-11-25 00:08:57 +00:00
Juergen Hoeller fce0361052 made getTransactionAwareConnectionProxy protected (SPR-6438) 2009-11-24 23:58:03 +00:00
Juergen Hoeller da2ddca34c fixed LifecycleProcessor lookup in a Spring Dynamic Modules context (SPR-6356); moved ConversionService lookup to prepareBeanFactory 2009-11-24 23:46:44 +00:00
Mark Fisher 021663b12f SPR-5507 The 'shutdownOrder' property of SmartLifecycle has been renamed 'phase'. The order no longer applies to shutdown only; now startup order is determined by the phase value as well. Components start in ascending order and stop in descending order. 2009-11-24 16:07:23 +00:00
Costin Leau 1f5568fa81 SPR-4724
+ most of the problems were already fixed (probably by Mark). These are just minor adjustments
2009-11-24 14:32:18 +00:00
Arjen Poutsma ef50082cad SPR-6280 - PathVariable resolution does not work properly 2009-11-24 13:53:37 +00:00
Costin Leau be60908d6d + update pom
SPR-6333
SPR-6394
2009-11-24 09:33:39 +00:00
David Syer 35517b62a0 Change groovy dependency to 1.6.3 to match ANT/ivy 2009-11-24 09:24:03 +00:00
Andy Clement 2e9683aa7c SPR-6347: guidance on when to use getValue(rootObject) vs getValue(evaluationContext) 2009-11-23 21:50:49 +00:00
Keith Donald 12e8f31b38 removed entity to string id conversion routine as it is not required 2009-11-23 00:07:39 +00:00
Keith Donald 064b6db666 Added entity conveter null checking; updated from string converters to simply test str.length() as pre-processing check 2009-11-22 15:40:41 +00:00
Keith Donald 48e1ed0a24 moved test case where it belongs 2009-11-21 18:36:40 +00:00
Keith Donald c3044e122c polish 2009-11-21 18:34:04 +00:00
Keith Donald 9d354192ef additional javadoc and tests 2009-11-21 18:30:34 +00:00
Keith Donald e3462aeef3 minor typo 2009-11-21 17:55:28 +00:00
Keith Donald 94eeb99333 used managed list to detect bean definitions 2009-11-21 17:26:07 +00:00
Keith Donald 7309b11849 mvc namespace interceptors element--ignoring test case until issue with setting collection of bean definition property values is resolved 2009-11-21 16:00:53 +00:00
Keith Donald 44fcc572a7 mvc:interceptors namespace element initial commit 2009-11-21 15:17:26 +00:00
Juergen Hoeller 602118f1a3 extended CGLIB version range (SPR-6400) 2009-11-21 00:30:50 +00:00
Mark Fisher a6b6ba88dc SPR-6368 The parser for the 'executor' element in the task namespace now creates a FactoryBean so that the pool-size range can be configured after property placeholder resolution when necessary. 2009-11-20 22:21:45 +00:00
Mark Fisher 196000d765 removed printlns from test 2009-11-20 21:57:01 +00:00
Thomas Risberg 937de9f032 removed note about getting started guide not ready until 3.0 final 2009-11-20 21:37:03 +00:00
Thomas Risberg 3562858736 updated version for the 3.0 final release 2009-11-20 21:36:05 +00:00
Thomas Risberg 5fbd87d939 updated remaing 2.5.x JavaDoc reeferences to 3.0.x ones (SPR-6402) 2009-11-20 21:24:30 +00:00
Thomas Risberg 12a237a459 changed to use 3.0 xsd references 2009-11-20 20:40:55 +00:00
Costin Leau 502c0e9055 SPR-6401
+ increase cglib range in OSGi manifest
2009-11-20 20:23:21 +00:00
Costin Leau 38d6b55363 SPR-6333
SPR-6393
+ fix invalid static field
2009-11-20 20:04:13 +00:00
Mark Fisher c6f3613411 SPR-6354 DefaultLifecycleProcessor no longer waits for the shutdown of SmartLifecycle beans that are not actually running. 2009-11-20 18:09:14 +00:00
Costin Leau 6653f25e81 SPR-6394
SPR-6333
+ eliminated compile-time dependency on GlassFish custom API for the GlassFish LTW
+ added support for GlassFish 3
2009-11-20 17:48:13 +00:00
Thomas Risberg 5a158fb76f added a "releaseResourcesAfterRead" property defaulting to false and code to handle releasing any LOB resources after read if requested (SPR-5998, SPR-6209) 2009-11-20 17:45:26 +00:00
Keith Donald d9aab1079c found hotspot; added ConverisonServiceFactoryBean 2009-11-20 14:57:40 +00:00
Keith Donald 692b1ef636 found hotspot; added ConverisonServiceFactoryBean 2009-11-20 14:43:12 +00:00
Juergen Hoeller 4024b67926 removed formal deprecation from addPropertyValue; just hinting at add now 2009-11-20 14:28:38 +00:00
Juergen Hoeller 2cb6e21161 Derby requires a publicly accessible stream creation method (SPR-6346) 2009-11-20 14:21:48 +00:00
David Syer f49a8d2e3e Add some tests (and comment out the one that is breaking the build) 2009-11-20 13:36:57 +00:00
David Syer af674bfac4 RESOLVED - issue SPR-6398: Document attributes in @Scheduled and friends
http://jira.springframework.org/browse/SPR-6398
2009-11-20 12:36:02 +00:00
Keith Donald 5716360936 doc updates 2009-11-20 05:07:33 +00:00
Keith Donald b896457586 doc updates 2009-11-20 05:00:28 +00:00
Juergen Hoeller 3b9605bc57 init/destroy methods get processed in the order of declaration at each hierarchy level (SPR-6344); process DestructionAwareBeanPostProcessors in common post-processor order; aligned metadata retrieval code 2009-11-19 23:49:10 +00:00
Costin Leau 4375b9c89a SPR-6333
SPR-6393
+ fixed the tests
2009-11-19 23:01:36 +00:00
Juergen Hoeller 4efa91d2f0 mvc:annotation-driven exposes default Validator and ConversionService as top-level beans (SPR-6377) 2009-11-19 22:34:24 +00:00
Costin Leau a9d4a58294 + fix filename problem 2009-11-19 22:33:15 +00:00
Juergen Hoeller 46cd083976 added chaining-capable "add" method to MutablePropertyValues 2009-11-19 22:30:35 +00:00
Keith Donald a300aa19b6 improved toString method 2009-11-19 22:16:22 +00:00
Keith Donald 34a75c1ae6 improved toString method 2009-11-19 22:16:06 +00:00
Costin Leau ab5e4a4ff3 SPR-6333
SPR-6393
+ eliminated compile-time dependency on oc4j classes
2009-11-19 20:28:16 +00:00
Juergen Hoeller 856fefeaad fixed javadoc to reflect current implementation (SPR-6390) 2009-11-19 19:27:40 +00:00
Juergen Hoeller b41e3956bc revised scope inheritance: default scope is "" (empty String) now; consistent isPrototype checks 2009-11-19 18:32:10 +00:00
Juergen Hoeller ee5330801d BeanDefinitions return isSingleton()=true by default again (for CXF compatibility) 2009-11-19 16:40:06 +00:00
Juergen Hoeller a741410421 TransactionTemplate catches undeclared checked exception and rethrows it as UndeclaredThrowableException (SPR-6361) 2009-11-19 16:36:15 +00:00
Juergen Hoeller eb0b4f0cbd added support for Hibernate 3.3 RegionFactory cache SPI to LocalSessionFactoryBean (SPR-6387) 2009-11-19 15:39:11 +00:00
Keith Donald f2477c4bf5 default conversion service instance caching and tests 2009-11-19 15:27:15 +00:00
Keith Donald da5432fbf5 default conversion service instance caching and tests 2009-11-19 15:23:56 +00:00
Keith Donald 7b561c76fe default conversion service instance caching and tests 2009-11-19 15:22:44 +00:00
Keith Donald 6c66406f7f removed converter matcher since its not used directly 2009-11-19 14:48:41 +00:00
Juergen Hoeller 08f9f8b8fb startup thread marked as daemon now (SPR-6382) 2009-11-19 13:01:20 +00:00
Keith Donald 3bfbcd7276 moved generic converter to spi; added entity converter; removed various service impls in favor of service factory 2009-11-19 09:11:19 +00:00
Keith Donald d85dc01e28 moved generic converter to spi; added entity converter; removed various service impls in favor of service factory 2009-11-19 09:10:51 +00:00
Arjen Poutsma 211e36c249 SPR-6371 - Jaxb2Marshaller should use AnnotationUtils 2009-11-18 14:02:29 +00:00
David Syer 7ac0e2ba02 RESOLVED - issue SPR-6366: Cannot import bean definitions using classpath*: resource location
http://jira.springframework.org/browse/SPR-6366
2009-11-18 07:54:19 +00:00
David Syer 66939ded0f RESOLVED - issue SPR-6366: Cannot import bean definitions using classpath*: resource location
http://jira.springframework.org/browse/SPR-6366
2009-11-17 09:53:10 +00:00
David Syer 17887d24a1 RESOLVED - issue SPR-6365: spring-jdbc.xsd script element claims resource patterns can be used for any SQL resource location but this is only supported for initialize-database tag
Grr: classpath*: again...
2009-11-17 08:36:37 +00:00
David Syer 7519162e65 RESOLVED - issue SPR-6365: spring-jdbc.xsd script element claims resource patterns can be used for any SQL resource location but this is only supported for initialize-database tag
Added resource pattern feature to embedded datasource XML parser.
2009-11-17 07:57:35 +00:00
Keith Donald 3f65721ba8 removed new EmbeddedDatabaeBuilder methods that don't seem very useful for embedded scenarios; javadoc polishing 2009-11-17 00:47:34 +00:00
Luke Taylor 222ae33666 SPR-6087: Updated Javadoc for HandlerInterceptor to indicate invocation order of afterCompletion() methods 2009-11-16 13:24:00 +00:00
David Syer 35472300ae OPEN - issue SPR-6346: NoSuchMethodException in DerbyEmbeddedDatabaseConfigurer
Added derby test case to EmbeddedDatabaseBuilderTests
2009-11-15 13:17:42 +00:00
Sam Brannen 35d4d7bbac Fixed typos 2009-11-15 11:57:52 +00:00
David Syer efb2647978 RESOLVED - issue SPR-6348: ResourceDatabasePopulator is too verbose when reporting ignored failures
http://jira.springframework.org/browse/SPR-6348
2009-11-14 09:04:24 +00:00
David Syer 534f8a4705 RESOLVED - issue SPR-6345: ResourceDatabasePopulator does not handle comments properly when ignoring failures
http://jira.springframework.org/browse/SPR-6345
2009-11-14 09:02:03 +00:00
Keith Donald aac9107f6b SPR-6350 2009-11-14 05:44:46 +00:00
Keith Donald 4877a0412c fixed typo 2009-11-13 19:45:57 +00:00
Luke Taylor 95ad3c923a SPR-5158: Updated description of HandlerInterceptor configuration to spell out which requests the interceptor is applied to 2009-11-13 17:32:33 +00:00
Luke Taylor 5008f7fdec SPR-6338: Fixed columns in jmx metadata-types table 2009-11-13 17:29:33 +00:00
Luke Taylor ef02feed55 SPR-6338: Rewrite of source-level JMX metadata to remove references to commons attributes 2009-11-13 17:18:13 +00:00
Luke Taylor a0b71d867f Removed javadoc refs to JMX commons attribute source 2009-11-13 15:40:17 +00:00
David Syer fc2d8ba73f SPR-5917 Add docs on Lifecycle 2009-11-13 07:48:33 +00:00
Jeremy Grelle e8845c7ead SPR-6340 - Add coverage of JSON support to reference guide 2009-11-13 02:04:22 +00:00
Arjen Poutsma a5be9c5cf5 Changing umlaut to unicode sequence 2009-11-13 01:49:56 +00:00
Jeremy Grelle 58841f3c66 Updated javadoc to reflect minimum JSP version 2.0 2009-11-13 01:39:20 +00:00
Jeremy Grelle 130ef7948d Fixed javadoc 2009-11-13 01:37:40 +00:00
Arjen Poutsma 60d2fdfcea SPR-6188 - UriTemplate: Insufficient handling of characters that need to be escaped. 2009-11-13 01:27:54 +00:00
Juergen Hoeller 8be36fafef introduced dedicated Jsr330ScopeMetadataResolver 2009-11-13 00:36:39 +00:00
Juergen Hoeller 4fb68bef04 polishing 2009-11-13 00:10:37 +00:00
Juergen Hoeller 56778110cd added dedicated onClose notification to differentiate between manual stop and close-driven stop 2009-11-13 00:05:54 +00:00
Keith Donald 4e35c59a20 fixed incorrect example and JSF reference 2009-11-12 22:43:22 +00:00
Keith Donald 3361de3875 SPR-6278 2009-11-12 21:18:17 +00:00
Andy Clement 61a8fa0ebd change PlaceOfBirth toString() so round tripping from String > new PlaceOfBirth(String) > String works ok 2009-11-12 20:56:21 +00:00
Thomas Risberg 3faf28ebaf created a protected doSetValue method so sub-classes can override the implementation easier (SPR-3978) 2009-11-12 20:51:00 +00:00
Thomas Risberg e27330ec5d created a protected doSetValue method so sub-classes can override the implementation easier (SPR-3978) 2009-11-12 20:47:48 +00:00
Thomas Risberg b88db7a594 extracted creation of new ArgPreparedStatementSetter and ArgTypePreparedStatementSetter into protected methods to allow sub-classes to override (SPR-3977) 2009-11-12 19:39:39 +00:00
Thomas Risberg 5491a63f2e added info about the new web-struts module 2009-11-12 19:11:46 +00:00
Thomas Risberg 5ebdf110f5 moved first para to chapter level and removed intro section 2009-11-12 18:23:09 +00:00
Juergen Hoeller 150c0adc74 updated changelog for RC2 release 2009-11-12 17:55:41 +00:00
Juergen Hoeller 0e1b04d082 inner beans detected as ApplicationListeners as well (SPR-6049) 2009-11-12 17:47:34 +00:00
Luke Taylor 94aad0b537 SPR-6219: Corrected typo 2009-11-12 16:55:49 +00:00
Thomas Risberg 4fe21b71a2 updated version to RC2 2009-11-12 16:55:13 +00:00
Luke Taylor afe87ea881 SPR-6220: Corrected spelling of 'DataSource' 2009-11-12 16:53:06 +00:00
Juergen Hoeller a6bba67bca added setValidating to XmlBeanDefinitionReader itself as well (SPR-6336) 2009-11-12 16:35:29 +00:00
Luke Taylor 1ddbfe0759 SPR-6205: Added doc on annotation support for multiple transaction managers 2009-11-12 16:22:42 +00:00
Juergen Hoeller 5d772554ae report error in case of constructor-arg index ambiguity (SPR-6329) 2009-11-12 16:22:42 +00:00
Arjen Poutsma d66fd9843e Reverted changes in r2282: now using varags again. 2009-11-12 16:20:36 +00:00
Arjen Poutsma bee051ece6 SWS-572 2009-11-12 16:09:08 +00:00
Juergen Hoeller 86934e2403 added SQL String and related context to translated JDBCException messages (SPR-6304) 2009-11-12 15:25:32 +00:00
Juergen Hoeller 747300f34c added support for most recent EHCache 1.6 configuration properties to EHCacheFactoryBean (SPR-6234) 2009-11-12 15:15:36 +00:00
Juergen Hoeller 9d59db7944 reintroduced DEFAULT_COOKIE_MAX_AGE in deprecated form (for binary compatibility; SPR-6276) 2009-11-12 14:25:14 +00:00
Juergen Hoeller f595b67618 avoid early Log4J initialization (SPR-6288) 2009-11-12 14:10:35 +00:00
Juergen Hoeller 613b4d182b avoid potential NPE (SPR-6300) 2009-11-12 13:42:07 +00:00
Mark Fisher 6ee17d2826 SPR-5507 javadoc 2009-11-12 13:10:10 +00:00
David Syer 568e6a3b38 RESOLVED - issue SPR-6321: Regression: ResourceEditor in 3.0 does not ignore unresolvable placeholders, but it did in 2.5.6
Different initialization exception popped up in app context
2009-11-12 11:20:51 +00:00
David Syer 38f1383853 RESOLVED - issue SPR-6321: Regression: ResourceEditor in 3.0 does not ignore unresolvable placeholders, but it did in 2.5.6 2009-11-12 11:07:15 +00:00
Keith Donald 7685b516f1 spring 3 mvc namespace whats new 2009-11-12 07:55:02 +00:00
Keith Donald ac551f756d changelog updates 2009-11-12 07:50:46 +00:00
Keith Donald b53f180c14 link to validation section 2009-11-12 07:34:50 +00:00
Keith Donald 2eff486b36 link to validation section 2009-11-12 07:34:02 +00:00
Keith Donald a2d19f1a2d link to validation section 2009-11-12 07:33:29 +00:00
Chris Beams 9f07b15185 Added Javadoc where necessary; polishing. 2009-11-12 07:29:52 +00:00
Keith Donald 2e12907fe4 polish 2009-11-12 07:28:24 +00:00
Keith Donald fefaf123e6 updated refs 2009-11-12 07:15:24 +00:00
Keith Donald 7e90e7a4d5 updated test to reflect correct behavior 2009-11-12 07:13:00 +00:00
Keith Donald eee2a2115a doc polish 2009-11-12 07:11:08 +00:00
Keith Donald 70fe75384d fixed failing tests due to generic object to object converter fallback being over eager 2009-11-12 06:57:51 +00:00
Keith Donald c58378603a validation updateS 2009-11-12 06:22:35 +00:00
Keith Donald b163f123ce valueOf and Constructor-based conversion of source objects to targetTypes 2009-11-12 05:25:03 +00:00
Keith Donald b5cda8db7b Deferring object mapper until Spring 3.1 when it will be used by other projects 2009-11-12 03:54:19 +00:00
Keith Donald 3cdb942cbe Deferring object mapper until Spring 3.1 when it will be used by other projects 2009-11-12 03:53:59 +00:00
Juergen Hoeller 6ef9c2d710 fixed validating to be true by default and to set namespaceAware accordingly 2009-11-12 02:36:53 +00:00
Costin Leau e52e4c5717 + commit actual jboss adapter 2009-11-12 02:31:50 +00:00
Juergen Hoeller c495cbb1bf MergedBeanDefinitionPostProcessors apply after all other post-processors (for @PostConstruct to be invoked after other BPPs; SPR-6066) 2009-11-12 02:30:12 +00:00
Costin Leau 4e321b1a3c + add minor fix to the internal weblogic adapter 2009-11-12 02:29:08 +00:00
Costin Leau 1dc1d5ef9a SPR-5764
+ add dynamic classfiletransformer -> JBoss translator adaptor (since there isn't any in JBoss 5.0.x)
2009-11-12 02:28:42 +00:00
Juergen Hoeller 155f6b1aa1 polishing 2009-11-12 02:27:31 +00:00
Juergen Hoeller 1c839dbe9c added setValidating method to AbstractXmlApplicationContext, analogous to GenericXmlApplicationContext 2009-11-12 02:14:01 +00:00
Juergen Hoeller 0832334648 polishing 2009-11-12 02:11:12 +00:00
Juergen Hoeller a884a407aa child bean definition's scope attribute can be inherited from parent bean definition now (SPR-3542) 2009-11-12 02:10:59 +00:00
Juergen Hoeller fcaf692225 MergedBeanDefinitionPostProcessors apply after all other post-processors (for @PostConstruct to be invoked after other BPPs; SPR-6066) 2009-11-12 02:10:44 +00:00
Mark Fisher 535ec5cffd SPR-5507 Added support for shutdown order on SmartLifecycle. DefaultLifecycleProcessor now manages the shutdown in phases depending on that order (with a timeout value per group). 2009-11-12 02:09:44 +00:00
Juergen Hoeller d666f0a7d6 added GenericXmlApplicationContext with flexible configuration options for its XML support 2009-11-12 01:59:15 +00:00
Juergen Hoeller 7428014ca3 MergedBeanDefinitionPostProcessors apply after all other post-processors (for @PostConstruct to be invoked after other BPPs; SPR-6066) 2009-11-12 01:43:34 +00:00
Costin Leau 190aee17d8 + internal improvement of WebLogic LTW
+ minor improvements to the LTW files (mainly trailing blank lines)
2009-11-12 01:28:32 +00:00
Costin Leau 846c7f6000 SPR-5764
+ redone the JBossLTW (no dependency on the JBoss API)
- removed JBoss jars
- removed JBoss imports (Spring code doesn't rely on it)
2009-11-12 01:25:39 +00:00
Juergen Hoeller d0b6891275 child bean definition's scope attribute can be inherited from parent bean definition now (SPR-3542) 2009-11-12 00:09:05 +00:00
Juergen Hoeller 4a25e2dde0 log a warning in case of ambiguous setter methods (SPR-4931) 2009-11-11 23:27:34 +00:00
Keith Donald e97c2bd7e9 rc2 updates 2009-11-11 23:10:04 +00:00
Keith Donald 48cfb73f15 polish 2009-11-11 23:04:21 +00:00
Keith Donald 5f9ec55512 polish 2009-11-11 23:04:09 +00:00
Keith Donald 035a2beaf5 polish 2009-11-11 22:39:35 +00:00
Keith Donald a90bf29765 formatting docs 2009-11-11 22:37:59 +00:00
Keith Donald d45f9df3c4 doc review 2009-11-11 21:46:00 +00:00
Juergen Hoeller 7a10b7530e improved context shown for non-qualifying dependency (SPR-5912) 2009-11-11 21:44:36 +00:00
Juergen Hoeller d6bab3b674 turned FormattingPropertyEditorAdapter into ConvertingPropertyEditorAdapter 2009-11-11 21:19:20 +00:00
Sam Brannen f8dd5fb5dc Deleting unused imports. 2009-11-11 21:14:25 +00:00
Sam Brannen 14495315a2 Deleting unused imports. 2009-11-11 21:08:32 +00:00
Sam Brannen 2415ec77f8 Fixed typo. 2009-11-11 20:46:36 +00:00
Keith Donald 2aac0aace4 polish 2009-11-11 20:44:32 +00:00
Juergen Hoeller a805819360 introduced populateDefaults template method (SPR-6010) 2009-11-11 19:47:31 +00:00
Juergen Hoeller 022b8b4d1f allow multiple tool:exports entries 2009-11-11 19:42:12 +00:00
Juergen Hoeller 5aefb2ce77 refined javadoc (SPR-5789) 2009-11-11 19:41:13 +00:00
Juergen Hoeller a06adf7203 AnnotationMetadata returns Class values by default (again), allowing for explicit retrieval of String class names where preferred (SPR-5827) 2009-11-11 19:24:43 +00:00
Juergen Hoeller bbd7fb3969 AnnotationMetadata returns Class values by default (again), allowing for explicit retrieval of String class names where preferred (SPR-5827) 2009-11-11 19:11:41 +00:00
Keith Donald afdb96ab2c polish 2009-11-11 19:04:21 +00:00
Keith Donald 6f8eb57dfa polish 2009-11-11 19:02:57 +00:00
Keith Donald 35944af7e1 polish 2009-11-11 19:00:52 +00:00
Keith Donald 522bb6ee56 polish 2009-11-11 18:57:52 +00:00
Keith Donald 7e63df9ea8 annotation driven number formatting with default number formatting rules 2009-11-11 18:53:28 +00:00
Keith Donald b56a47da97 annotation driven number formatting with default number formatting rules 2009-11-11 18:53:02 +00:00
Juergen Hoeller bfffb51257 added JBoss jars 2009-11-11 18:19:47 +00:00
Juergen Hoeller d46c1f600a TransactionAwareDataSourceProxy processes isClosed explicitly in order to avoid potential leaks (SPR-5780) 2009-11-11 18:19:16 +00:00
Thomas Risberg 2b962e7730 added unwrapping of scoped proxy tp unwrapResourceIfNecessary() (SPR-5671) 2009-11-11 18:16:41 +00:00
Arjen Poutsma 68f57aa953 SPR-6308 - Spring Expression Language creates systemProperties bean calling System.getProperties() which in enterprise shared containers is locked down 2009-11-11 16:39:20 +00:00
Thomas Risberg 7844a633b5 added entry for unversioned xsd reference 2009-11-11 16:29:31 +00:00
Thomas Risberg f38b8975c5 added entry for unversioned xsd reference 2009-11-11 16:25:34 +00:00
Keith Donald fdabfefe32 docs 2009-11-11 15:51:43 +00:00
Keith Donald a725717261 tests for custom conversion service / validator 2009-11-11 15:43:57 +00:00
Christian Dupuis cb8b603bdf update icon for mvc namespace 2009-11-11 15:42:53 +00:00
Keith Donald e690bf0c62 not needed according to Christian 2009-11-11 15:28:29 +00:00
Keith Donald 6f3dfe13d0 mvc namespace conversion-service and validator attributes 2009-11-11 15:26:08 +00:00
Luke Taylor 89d997a5bc SPR-3695: Added note on servlet/JSP/JSTL versions with reference to external blog article 2009-11-11 14:03:09 +00:00
Chris Beams 2663ab9975 fixed typo in javadoc: s/poitncut/pointcut/ 2009-11-11 01:38:26 +00:00
Chris Beams ee553f7804 SPR-6328: Rename @ImportXml -> @ImportResource and allow for usage of non-XML BeanDefinitionReader types 2009-11-11 00:48:30 +00:00
Mark Fisher 81efd48352 SPR-5507 SchedulerFactoryBean now implements SmartLifecycle instead of ApplicationListener. 2009-11-10 23:25:29 +00:00
Thomas Risberg 7d2b3f2e7e relaxed Map<String, Object> to Map<String, ?> for method parameter 2009-11-10 23:14:54 +00:00
Keith Donald 36e00054b6 polish 2009-11-10 20:46:06 +00:00
Keith Donald 417939774c removed old dir 2009-11-10 20:43:49 +00:00
Keith Donald 04dee9ab76 removed old dir 2009-11-10 20:43:10 +00:00
Keith Donald 17bbdfc13f polish 2009-11-10 20:42:33 +00:00
Keith Donald 4b76cdd1a3 date time format code review 2009-11-10 20:34:59 +00:00
Luke Taylor ae3e0c0bda SPR-5276: Updated Acegi site link to point to Spring Security 2009-11-10 20:26:49 +00:00
Keith Donald 1bb007c321 results of code review of mvc namespace 2009-11-10 19:15:32 +00:00
Luke Taylor 4a5a2b18ac SPR-6169: Clarified that DispatcherServlet configuraion options are init-param values for the servlet declaration, not context params 2009-11-10 19:03:17 +00:00
Luke Taylor d293c2248c SPR-5430,SPR-6224: Converted deprecated view property names to use '.(class)' syntax. 2009-11-10 18:44:56 +00:00
Thomas Risberg f91d44691e added note to changelog about supporting load-time weaving in JBoss 5 (SPR-5764) 2009-11-10 16:19:03 +00:00
Luke Taylor edf331b5a6 SPR-6293: Updated required tiles version to 2.1.2 2009-11-10 14:29:30 +00:00
Mark Fisher d5fd22c8fe SPR-5507 GenericMessageEndpointManager now implements SmartLifecycle instead of ApplicationListener. 2009-11-10 12:59:50 +00:00
Mark Fisher a15a9600b7 SPR-5507 AbstractJmsListeningContainer now implements SmartLifecycle instead of ApplicationListener. 2009-11-10 04:52:56 +00:00
Mark Fisher a7c1f6b730 SPR-5507 Added SmartLifecycle interface with 'isAutoStartup' method and added an 'onRefresh' method to the LifecycleProcessor. 2009-11-10 04:49:13 +00:00
Keith Donald 91dd752e71 added test dep to ivy.xml causing build failure 2009-11-10 04:32:48 +00:00
Mark Fisher 5b088f5cb4 SPR-5507 Factored out Lifecycle management to a LifecycleProcessor strategy with the default implementation as DefaultLifecycleProcessor. The 'lifecycleProcessor' bean may be defined to override the default. 2009-11-10 04:00:42 +00:00
Keith Donald 566516b89a polishing 2009-11-09 21:59:59 +00:00
Keith Donald 835b958911 polish 2009-11-09 21:10:51 +00:00
Keith Donald 6f4112af80 updated favoring style pattern string instead of Style enum for DateTimeFormat 2009-11-09 21:07:41 +00:00
Keith Donald 7ed6c164b6 javadoc polishing 2009-11-09 20:25:03 +00:00
Juergen Hoeller 90f8e5dcf8 WebSphereUowTransactionManager suspends synchronizations even without existing transaction (SPR-6167) 2009-11-09 19:59:27 +00:00
Costin Leau c3bf658058 SPR-6102
+ add old method for backwards compatibility
2009-11-09 19:11:41 +00:00
Costin Leau af0a529bb5 SPR-6102
+ loosen FrameworkServlet#createWebApplicationContext signature
2009-11-09 18:27:10 +00:00
Costin Leau bcc6413ef7 SPR-5762
+ allow unknown URL protocols to be used with import directive
2009-11-09 15:59:08 +00:00
Arjen Poutsma 077055c8f2 SPR-6291 - UrlPathHelper is too aggressive decoding URLs 2009-11-09 12:15:17 +00:00
Costin Leau 24a9ecd4a3 + removed unused imports 2009-11-09 12:02:42 +00:00
Costin Leau 9a111e504f SPR-6194
+ add setter for servlet minor version to MockServletContext
2009-11-09 11:51:30 +00:00
Arjen Poutsma 7ec9f1506a SPR-6005 - org.springframework.beans.propertyeditors.URIEditor does double escaping for % signes for URIs that contain a schema 2009-11-09 09:15:49 +00:00
Sam Brannen 2cc6155dec JavaDoc 2009-11-08 14:27:47 +00:00
Thomas Risberg 076b912f05 removed filter for classes from the JPA providers package for EclipseLink (SPR-6040) 2009-11-07 19:46:46 +00:00
Chris Beams 46aabf0b65 Additional tests rounding out @ImportXml coverage 2009-11-07 03:53:58 +00:00
Keith Donald 7bd34a6cb1 added format import to web.servlet manifest 2009-11-07 03:53:38 +00:00
Juergen Hoeller 2922b1fcb9 updated for extended RC2 period 2009-11-07 01:32:31 +00:00
Juergen Hoeller 15777818c4 made Excel tests work 2009-11-07 01:32:18 +00:00
Juergen Hoeller 2a0b3cf3c9 polishing 2009-11-07 01:30:50 +00:00
Juergen Hoeller 205b5a477b JSR-303 Validator will only register validation failures if no binding failure happened 2009-11-07 01:29:50 +00:00
Juergen Hoeller 4e233047c8 TilesConfigurer only sets up EL support if JSP 2.1 is present (for JSP 2.0 compatibility; SPR-6309) 2009-11-07 01:16:40 +00:00
Juergen Hoeller b321376703 AbstractExcelView is compatible with Apache POI 3.0 as well as 3.5 now (SPR-6298) 2009-11-07 01:11:53 +00:00
Juergen Hoeller a62068461f AbstractApplicationContext can also start up in case of system properties access failure 2009-11-07 01:09:02 +00:00
Keith Donald fe4f41d33c default config for web binding initializer and formatting/conversion system w/ mvc namespace 2009-11-07 00:41:08 +00:00
Chris Beams 8ece98c694 Fixed build breakage due to use of WebDataBinder.setDisallowedFields(String); changed calls to use the updated String[] signature. 2009-11-07 00:40:50 +00:00
Chris Beams 0a4463fb71 SPR-6158: Initial implementation and tests for @ImportXml 2009-11-07 00:32:40 +00:00
Chris Beams 20ec13ded5 SPR-5529: removed package.html files 2009-11-06 23:15:35 +00:00
Chris Beams ca0b590bb9 SPR-5523: converted a few additional package.html artifacts to package-info.java 2009-11-06 23:13:15 +00:00
Juergen Hoeller 6494041849 changed Servlet API dependency to provided (SPR-6284) 2009-11-06 16:42:14 +00:00
Keith Donald ee15bbb494 mvc namespace installation of handler mapping and handler adapter 2009-11-06 15:38:08 +00:00
Mark Fisher d96bea9f6a SPR-4716 GenericMessageEndpointManager now "auto-starts" upon receiving a ContextRefreshedEvent rather than within afterPropertiesSet(). 2009-11-06 15:24:12 +00:00
Arjen Poutsma d415d36192 Renamed Md5HashUtils to DigestUtils 2009-11-06 11:52:53 +00:00
Mark Fisher 91297d9863 SPR-6307 Quartz SchedulerFactoryBean now "auto-starts" upon receiving a ContextRefreshedEvent rather than within afterPropertiesSet(). 2009-11-05 23:41:01 +00:00
Mark Fisher 40720ab0f1 SPR-4716 AbstractJmsListeningContainer now "auto-starts" upon receiving a ContextRefreshedEvent rather than within afterPropertiesSet(). 2009-11-05 22:05:52 +00:00
Keith Donald 389ad03e84 package info file 2009-11-05 21:49:46 +00:00
Keith Donald 733be4f400 spring mvc namespace initial commit; work in progress 2009-11-05 21:49:21 +00:00
Keith Donald fed96f85ae fixed failing test due to case issue 2009-11-05 19:17:53 +00:00
Keith Donald b6ec4e30d9 javadoc polish 2009-11-05 17:48:54 +00:00
Keith Donald d65454175d iso date time format tests 2009-11-05 17:18:54 +00:00
Arjen Poutsma 8de34c6fa7 SPR-6301 - Support @RequestHeader on HttpHeaders parameters 2009-11-05 15:42:24 +00:00
Keith Donald a62b413be4 Renamed org.springframework.ui.format package to simply org.springframework.format package; 'ui' is not adding any value - it makes the package name longer and also discourages use of formatters outside in other "non ui" environments where localized formatting of field values is needed. 2009-11-05 15:21:22 +00:00
Keith Donald f0de1c3069 revised matchable converter lookup algorithm; added conversion service bean container tests 2009-11-05 14:52:57 +00:00
Arjen Poutsma c812cd370b Fixing test 2009-11-05 13:44:52 +00:00
Arjen Poutsma db252cd0af SPR-6303 - Add more logging to RestTemplate 2009-11-05 13:32:14 +00:00
Arjen Poutsma f1075c7b04 javadoc. 2009-11-05 10:17:37 +00:00
Keith Donald bc4d52a7e3 added date midnight 2009-11-05 05:24:50 +00:00
Keith Donald 2405848c4c comment on ignored test 2009-11-05 05:21:19 +00:00
Keith Donald ba0f1da96f more joda time formatting tests 2009-11-05 05:19:27 +00:00
Keith Donald 8a15486de3 fixed bug related to annotation driven formatting 2009-11-04 23:12:24 +00:00
Keith Donald ff39bc376f formatting tests and polishing 2009-11-04 23:02:10 +00:00
Keith Donald 9ec337b736 joda time formatting tests 2009-11-04 22:53:26 +00:00
Keith Donald 791832789d polish 2009-11-04 17:38:17 +00:00
Keith Donald 0df1bac33c since 3.0 2009-11-04 17:33:09 +00:00
Keith Donald 9fdd11c89c polish 2009-11-04 17:25:37 +00:00
Keith Donald 6d020502b9 polish 2009-11-04 17:23:31 +00:00
Keith Donald 53f3d0b755 polish 2009-11-04 17:22:09 +00:00
Keith Donald 374ea05028 polish 2009-11-04 17:08:51 +00:00
Keith Donald ffbfa2992c polish 2009-11-04 17:07:25 +00:00
Keith Donald 0a78287a8f formatters now plugged into unified type conversion api with formatter specific registry spi 2009-11-04 00:08:47 +00:00
Keith Donald 2e4fa28ca6 removed embedded databases factory in favor of new useDefaultScripts builder method 2009-11-03 23:19:26 +00:00
Keith Donald f1d012bffa embeddedd databases convenience factory; builder polishing 2009-11-03 23:05:41 +00:00
Scott Andrews 6c80dbaa9e polish - removing unused import 2009-11-03 21:02:22 +00:00
Scott Andrews 67b5781dab SPR-6296 Spring:url tag should not use application/x-www-form-urlencoded encoding
Work around for application/x-www-form-urlencoded encoding.  Replaces '+' from java.net.URLDecoder with charset specific encoded space value ('%20' for most charsets).

The custom urlEncode method should be replaced with calls to a true URL encoder once available.
2009-11-03 21:01:23 +00:00
Ramnivas Laddad 868cf09b2d Modified staticmethod mocking to remove compile-time dependency on JUnit (see ROO-314 and related issues) 2009-11-03 00:51:22 +00:00
Sam Brannen 04a7656292 Updated ivy settings so that org.jboss.util is downloaded to the local repository; updated Eclipse classpath regarding latest version of org.jboss.util; added classpath entry for org.jboss.classloading.spi so that JBoss5ClassLoader compiles in Eclipse. 2009-11-01 17:02:08 +00:00
Keith Donald 470302ecc6 javadoc 2009-10-30 20:35:29 +00:00
Keith Donald c8fd4a45fc more eclipse compile errors 2009-10-30 19:59:31 +00:00
Keith Donald f1cab9acda fixed failing test; take 2 2009-10-30 19:52:19 +00:00
Keith Donald 4151c52af6 removed unused import 2009-10-30 19:34:55 +00:00
Keith Donald 7a4ca36413 Fixed failed tests 2009-10-30 19:34:21 +00:00
Keith Donald 0b46950818 fixed eclipse classpath compile errors 2009-10-30 19:26:39 +00:00
Keith Donald a2be2e15e9 polish; fixed failed tests 2009-10-30 19:19:27 +00:00
Keith Donald 3a3edb53f6 polish / code review of data source embedded and init 2009-10-30 19:01:48 +00:00
Keith Donald 913bc03a3b ui.format system refining from RC1 feedback: Support for one format annotation applying to multiple field types, Printer/Parser building blocks for more flexibility, full Joda time formatting support, FormattingService as a service entry-point for clients to use 2009-10-30 18:44:40 +00:00
Thomas Risberg 471fbf7ebf added classes from contributed patch for load-time weaving in JBoss 5 (SPR-5764) 2009-10-30 17:11:26 +00:00
David Syer 14e7b46163 RESOLVED - issue SPR-5917: fixed classpath pattern for ANT 2009-10-30 11:51:50 +00:00
David Syer e9a37e4400 RESOLVED - issue SPR-5917: DataSourceInitializer and namespace support for creating and populating databases
Moved classes but not resources (fixed)
2009-10-30 11:26:45 +00:00
David Syer 747f71f9d2 RESOLVED - issue SPR-5917: DataSourceInitializer and namespace support for creating and populating databases
Tweak initializer to allow placeholders for script locations
2009-10-30 11:09:49 +00:00
David Syer 0c8a320130 RESOLVED - issue SPR-5917: updated jdbc docs 2009-10-30 10:32:15 +00:00
David Syer 0db68e1b57 RESOLVED - issue SPR-5917: DataSourceInitializer and namespace support for creating and populating databases
Moved populator to init package and added namespace features
2009-10-30 10:31:37 +00:00
Ramnivas Laddad ab403468f9 Mark junit dependency as compile, since aspects depend on it at compile-time 2009-10-29 17:18:49 +00:00
Arjen Poutsma f839969b6c javadoc. 2009-10-29 12:32:17 +00:00
Arjen Poutsma 2288b2523e SPR-6021 - Allow for using MultiValueMap in GET request for mapping multiple request params 2009-10-29 11:18:43 +00:00
Mark Fisher 53eb612a68 SPR-6059 Avoiding NPE for OR operator. If the value is null instead of a valid boolean or Boolean, it will now trigger an EvaluationException. 2009-10-28 23:14:29 +00:00
Thomas Risberg 4a315ba6d1 fixed rertieval of generated keys for HSQLDB 1.9 and fixed some typos (SPR-6266) 2009-10-28 22:25:58 +00:00
Mark Fisher f4460dcbf7 SPR-6059 Avoiding NPE for unary-not and ternary operators. If the value is null instead of a valid boolean or Boolean, it will now trigger an EvaluationException. 2009-10-28 21:57:09 +00:00
Thomas Risberg a2cd909306 fixed rertieval of generated keys for HSQLDB 1.9 and fixed some typos (SPR-6266) 2009-10-28 19:40:32 +00:00
Thomas Risberg 84c1b56e35 fixed null handling for all Derby drivers to be the same as for the embedded driver (SPR-6000) 2009-10-28 17:14:47 +00:00
Mark Fisher 0baa29f1ac removed @Override from interface method 2009-10-28 14:45:31 +00:00
Mark Fisher 0400b68afb SPR-6240 Added namespace support for ErrorHandler strategy on JMS "listener-container" elements. 2009-10-28 14:36:01 +00:00
David Syer 0e85c66f2f SPR-6246: Java6 @Override removed 2009-10-28 13:56:11 +00:00
David Syer b580696550 Exclude Jetty version of servlet API 2009-10-28 13:43:55 +00:00
David Syer bce723d9e3 SPR-6246: split up Velocity test cases for neatness. Add fix for bug in exception creation in VelocityView. 2009-10-28 13:43:27 +00:00
Mark Fisher 3346752cfd INT-6051 SpEL selection and projection may now be applied to arrays. 2009-10-28 03:42:36 +00:00
Ramnivas Laddad 65f10cceb9 Removed unneeded empty directories 2009-10-28 01:28:28 +00:00
Ramnivas Laddad 92d6dfbe8d Renamed static_mock package to staticmock 2009-10-28 01:23:43 +00:00
Mark Fisher 776edbcae3 SPR-6051 avoiding NPE in TypedValue.toString() 2009-10-27 23:59:46 +00:00
Ramnivas Laddad d1f3772ca1 Fixed a build issue 2009-10-27 19:35:01 +00:00
David Syer 6aa97d5a3a RESOLVED - issue SPR-6038: HSQLDB+Quarz using data source causes "Unexpected token: FOR in statement " exception
Missing ivy dependency
2009-10-27 19:24:15 +00:00
Ramnivas Laddad 66261ecb8c Moved over JPA exception translator from Roo 2009-10-27 19:15:54 +00:00
David Syer 2c0cf49b94 RESOLVED - issue SPR-6038: HSQLDB+Quarz using data source causes "Unexpected token: FOR in statement " exception
Detect HSQL in LocalDataSourceJobStore and force locks to be taken locally (with a SimpleSemaphore)
2009-10-27 18:39:42 +00:00
David Syer 89424579ae OPEN - issue SPR-6038: HSQLDB+Quarz using data source causes "Unexpected token: FOR in statement " exception
Convert test case to JUnit 4
2009-10-27 18:25:18 +00:00
David Syer 092a25d0d8 SPR-4783: missing commit for bean def parser (duh) 2009-10-27 18:03:38 +00:00
Ramnivas Laddad dee410c0c4 Fixed test by moving Delegate to its own file 2009-10-27 17:38:50 +00:00
Ramnivas Laddad 064343d056 Make JUnit a compile-time dependency, since static mock functionality depends on its annotations. 2009-10-27 17:23:23 +00:00
Ramnivas Laddad 451bbce345 Moved over static mock testing from Roo; added tests 2009-10-27 17:16:02 +00:00
David Syer 57afe3baab RESOLVED - issue SPR-4783: OK, that wasn't it (reverted previous dumb change). Scratch, scratch... 2009-10-27 15:48:59 +00:00
David Syer 0cf31f012d RESOLVED - issue SPR-4783: Add name attribute to XML namespaces that want to support it (through parser base class)
Duh: bitten by the classpath*: again
2009-10-27 15:33:59 +00:00
David Syer f23921153d Add resource pattern so that tests run properly with resources in non-standard locations 2009-10-27 15:23:13 +00:00
David Syer dec2ca30c2 RESOLVED - issue SPR-4783: Add name attribute to all namespaces that use AbstractBeanDefinitionParser and declare name= attribute (includes <lang:groovy.../>). 2009-10-27 15:22:36 +00:00
David Syer 1a9599c815 RESOLVED - issue SPR-4661: Improve context-property-placeholder configurablity
Classpath ordering broke the build (duh: test-classes comes before classes in Maven but not Ant).
2009-10-27 14:49:10 +00:00
David Syer b250c65c45 RESOLVED - issue SPR-4661: Improve context-property-placeholder configurablity
Remove spaces from locations (seems like integration from SPR-6195 didn't reach the build yet)
2009-10-27 13:57:48 +00:00
David Syer 4be237dd84 RESOLVED - issue SPR-6195 2009-10-27 13:41:22 +00:00
David Syer a29253f2ca RESOLVED - issue SPR-4661: Improve context-property-placeholder configurability
Added new features to property override and placeholders (order, locations, system-properties-mode, ignore-*)
2009-10-27 13:38:29 +00:00
David Syer c63cdb2444 OPEN - issue SPR-6246: Velocity MethodInvocationExceptions not properly reported
Added test case for exception.  This probably fails on a non-Sun JVM?
2009-10-27 12:32:14 +00:00
David Syer 2978a4d0eb SPR-6160: resolved by referring to 'future release' instead of 2.5 2009-10-27 11:59:59 +00:00
David Syer 46818b038a SPR-6257: Resolved in beans.xml 2009-10-27 11:56:06 +00:00
Arjen Poutsma d0893c425e SPR-6247 - Multipart Content-Type charset is ignored in CommonsFileUploadSupport. 2009-10-27 11:42:36 +00:00
Arjen Poutsma d54a975af4 SPR-6248 - Accept header should not be mandatory for properly handling response body. 2009-10-27 10:50:45 +00:00
David Syer a86baca9cb Add atinject dependency for TCK test 2009-10-26 22:48:35 +00:00
David Syer 8b2a7c8be8 Fix wrong Maven dependency in pom.xml for validation and inject APIs 2009-10-26 22:38:08 +00:00
David Syer 560e07a966 Fix wrong Maven dependency in pom.xml for validation and inject APIs 2009-10-26 22:37:45 +00:00
David Syer 3c9eed1c22 SPR-6273: resolved with patch - use recursive call to reset low order bits and then re-seek match for pattern 2009-10-26 22:37:04 +00:00
Juergen Hoeller 7b54746a50 verified choice of primary bean in case of implicit name match in a scanning plus factory method scenario (SPR-6065) 2009-10-26 15:28:09 +00:00
Sam Brannen 1b92a2fae1 [SPR-6124] Verified that timed transactional tests fail with the TestNG integration in the TestContext framework. 2009-10-26 13:38:59 +00:00
Sam Brannen 02dfe94396 [SPR-6128] Verified that claims raised in this issue no longer apply. 2009-10-26 13:00:04 +00:00
Keith Donald 381d1d5a94 default date/time converters 2009-10-25 04:52:26 +00:00
Sam Brannen d868785b5f fixed DocBook structure and typo 2009-10-24 19:37:10 +00:00
Sam Brannen 83f3df14bd Updating Mail chapter regarding changes in Spring 2.0 and 3.0. 2009-10-24 19:32:05 +00:00
Sam Brannen e651c69a44 Polishing the Portlet sections of the reference manual. 2009-10-24 19:25:09 +00:00
Sam Brannen f14c2de5e9 Polishing the Portlet sections of the reference manual. 2009-10-24 18:58:39 +00:00
Sam Brannen dc897e7b34 Polishing 2009-10-24 17:33:23 +00:00
Sam Brannen d13d556260 Polishing the Portlet sections of the reference manual. 2009-10-24 17:04:52 +00:00
Sam Brannen 642549a1e7 Polishing the web integration sections of the reference manual. 2009-10-24 17:04:08 +00:00
Juergen Hoeller 8a09c8e7da reworked ConfigurationClass(Web)ApplicationContext into AnnotationConfig(Web)ApplicationContext; revised BeansException signatures 2009-10-23 17:46:16 +00:00
Juergen Hoeller 87b2f23692 updated version ranges for javax.el and javax.inject 2009-10-23 17:26:12 +00:00
Sam Brannen cc07b8d002 Polishing the web integration sections of the reference manual. 2009-10-22 13:17:39 +00:00
Sam Brannen 2a4fe95e24 Polishing the MVC sections of the reference manual. 2009-10-22 12:54:34 +00:00
Sam Brannen a995c6f65f Polishing the MVC sections of the reference manual. 2009-10-22 12:53:03 +00:00
Sam Brannen 50f96a268e Added the @Inject TCK to the Eclipse classpath. 2009-10-20 22:27:04 +00:00
Sam Brannen a789bf2f1e Polishing the MVC sections of the reference manual. 2009-10-20 21:56:22 +00:00
Juergen Hoeller ee8ed4e410 fixed getBean signature ambiguity in tests 2009-10-20 20:14:49 +00:00
Juergen Hoeller cf580f024a added first cut of getBean(Class) lookup method 2009-10-20 19:52:30 +00:00
Juergen Hoeller a83756f771 deprecated remoting support for JAX-RPC (in favor of JAX-WS) 2009-10-20 18:35:35 +00:00
Juergen Hoeller 54221500c1 fixed PersistenceInjectionTests 2009-10-20 18:30:55 +00:00
Juergen Hoeller 94533976d0 full compliance with the JSR-330 TCK 2009-10-20 18:18:25 +00:00
Juergen Hoeller a429e230b6 revised version checks and exception signatures 2009-10-20 16:53:24 +00:00
Sam Brannen ccb103417d Polishing the MVC sections of the reference manual. 2009-10-19 22:32:15 +00:00
Sam Brannen 32fb767c87 Polishing the reference manual. 2009-10-19 18:26:02 +00:00
Sam Brannen c399cb1b27 fixed typos 2009-10-19 18:23:51 +00:00
Juergen Hoeller a7f0d50643 fixed ParseException constructor calls (SPR-6239) 2009-10-19 12:59:17 +00:00
Keith Donald db2ff40e4b commented out test failing nightly snapshot 2009-10-19 02:42:29 +00:00
Keith Donald 1c0f188adc maven central joda-time artifact 2009-10-19 02:14:34 +00:00
Keith Donald e4f50f5b73 SPR-6245 bean wrapper copy constructor not copying all state 2009-10-19 01:06:44 +00:00
Keith Donald 2fe6003923 SPR-6199 2009-10-19 00:13:30 +00:00
Keith Donald 0e4064fecc added null handling, fixed bug relating to conversion of non-generic collections 2009-10-18 22:20:53 +00:00
Sam Brannen 206963bcba Polishing the reference manual. 2009-10-18 21:35:56 +00:00
Keith Donald 66e6560560 polish 2009-10-17 06:39:35 +00:00
Keith Donald 44a238616c polish 2009-10-17 06:10:59 +00:00
Keith Donald db9f25d6de polish 2009-10-17 06:10:29 +00:00
Keith Donald be94b45636 polish 2009-10-17 05:54:36 +00:00
Keith Donald bd0356a712 polish 2009-10-17 05:49:28 +00:00
Keith Donald 9584a81687 conditional mapping 2009-10-17 05:33:04 +00:00
Keith Donald 3c4596a424 conditional mapping and polish 2009-10-17 05:32:30 +00:00
Keith Donald f63c3d5313 polish 2009-10-17 04:03:56 +00:00
Keith Donald f55b54ec3b builder 2009-10-16 23:15:48 +00:00
Keith Donald c833269aa3 polish 2009-10-16 23:14:01 +00:00
Keith Donald 106847e739 polish 2009-10-16 23:11:24 +00:00
Keith Donald a221fb5718 MapperFactory and MapperBuilder config API 2009-10-16 22:44:54 +00:00
Sam Brannen 5616770a27 Corrected minor errors regarding JDO, grammar, etc. 2009-10-16 21:29:30 +00:00
Sam Brannen c686035773 Updated Eclipse classpath regarding javax.inject and javax.validation. 2009-10-16 10:16:25 +00:00
Sam Brannen c29cbc18ee Cleaning up and upgrading Eclipse classpaths. 2009-10-16 10:11:10 +00:00
Sam Brannen ad1bfbcbfd Added Eclipse project settings for the new web.struts module. 2009-10-15 23:24:38 +00:00
Keith Donald 3fb3549997 polish 2009-10-15 15:49:26 +00:00
Juergen Hoeller e99cda3739 updated to final versions of JSR-330 and JSR-303 APIs 2009-10-15 14:31:41 +00:00
Arjen Poutsma b42cf25599 SPR-6236: Reintroduce Struts support 2009-10-15 14:04:13 +00:00
Arjen Poutsma 7031c31904 Updated build settings 2009-10-15 13:57:28 +00:00
Arjen Poutsma 7461d70582 SPR-6236: Reintroduce Struts support 2009-10-15 10:50:58 +00:00
Juergen Hoeller 11d987009a revised destroy method lookup after deserialization (avoiding NPE in case of default-destroy-method; SPR-6211) 2009-10-15 10:33:05 +00:00
Arjen Poutsma 7fa9105096 SPR-6236: Reintroduce Struts support 2009-10-15 10:31:47 +00:00
Arjen Poutsma e24e768054 SPR-6164 - a Uri Value is incorrectly extracted if it contains '.'. 2009-10-15 09:18:14 +00:00
Keith Donald 64ded0484e polish 2009-10-15 00:38:18 +00:00
Keith Donald 402f0924da polish 2009-10-15 00:36:31 +00:00
Keith Donald 66d901b9fe naming improvements from mark fisher code review 2009-10-15 00:33:17 +00:00
Keith Donald 4563cb2804 initial joda time support courtesy of Oliver Gierke 2009-10-15 00:20:14 +00:00
Keith Donald d5a954833c method invoking formatter as a convenience 2009-10-14 22:47:14 +00:00
Mark Fisher bc207042d0 SPR-6170 updated CronSequenceGenerator according to patch applied to the 1.0.x branch of Spring Integration 2009-10-14 22:22:21 +00:00
Sam Brannen 62d7369607 JavaDoc polishing 2009-10-14 22:06:51 +00:00
Keith Donald 4d9bf3a45f removed valueOf convention b/c of unwanted side effects 2009-10-14 21:37:57 +00:00
Keith Donald dc076ee6fe fixed failing tests 2009-10-14 20:45:53 +00:00
Keith Donald 728a1415d9 added convention-based default valueOf formatter 2009-10-14 18:57:36 +00:00
Sam Brannen a696a4fec9 DataBinder now accepts var-args to set allowed, disallowed, and required fields 2009-10-14 14:49:24 +00:00
Sam Brannen 52f03fc759 Added "Changes in version 3.0.0.RC2" section. 2009-10-14 14:47:17 +00:00
Sam Brannen 704d4b785b [SPR-6227] Parameterizing with Class<?> and Class<T> where appropriate; suppressing unchecked warnings; and fixed JavaDoc typos. 2009-10-14 14:07:48 +00:00
Sam Brannen 986ccbe2c6 Suppressing unchecked and serial warnings. 2009-10-14 14:03:11 +00:00
Arjen Poutsma 17d5b31af3 SPR-6206 - When looking up methods with @RequestMapping annotation, unannotated bridge methods are included 2009-10-14 12:24:04 +00:00
Sam Brannen 52ad49b3ae fixed typo and JavaDoc polishing. 2009-10-14 10:48:00 +00:00
Arjen Poutsma 5310035700 SPR-6214 - Using @ResponseBody throws HttpMediaTypeNotAcceptableException when it supports writing an acceptable MediaType 2009-10-14 10:46:29 +00:00
Sam Brannen 0f06771249 fixed typo 2009-10-14 10:45:17 +00:00
Arjen Poutsma 523dba7285 SPR-6183 - integration-tests should not be included in the packaged distribution 2009-10-14 10:31:59 +00:00
Arjen Poutsma 8738fd7b7b SPR-6177 - HttpHeadersTests fails with non-english locale 2009-10-14 09:53:25 +00:00
Juergen Hoeller 74f4749372 fixed extraction of Controller suffix (SPR-6153) 2009-10-13 23:10:48 +00:00
Juergen Hoeller b2129577b9 polishing 2009-10-13 22:48:25 +00:00
Juergen Hoeller cfa7216fac deprecated scheduling support for JDK 1.3 Timer 2009-10-13 21:52:44 +00:00
Juergen Hoeller 3331f16ef7 revised RootBeanDefinition constructors 2009-10-13 21:39:27 +00:00
Juergen Hoeller e2af25b891 avoid hard-coded dependency on backport-concurrent (SPR-6161) 2009-10-13 21:37:05 +00:00
Juergen Hoeller b4ffdcdf18 polishing 2009-10-13 20:59:10 +00:00
Juergen Hoeller 84447cdf94 DataBinder activates autoGrowNestedPaths by default; fixed enum binding with WebRequestDataBinder 2009-10-13 20:55:57 +00:00
Juergen Hoeller a293f50851 Enum counts as simple value type 2009-10-13 20:51:59 +00:00
Juergen Hoeller 49b647ca93 check against MultipartRequest mixin interface 2009-10-13 20:51:01 +00:00
Juergen Hoeller 677baaceb8 polishing 2009-10-13 20:49:34 +00:00
Andy Clement c9057fd1da SPR-6230: SpEL improvements 2009-10-13 18:11:34 +00:00
Arjen Poutsma 06286b19ce Added URI variant methods to the RestTemplate. 2009-10-13 14:20:24 +00:00
Sam Brannen 6aee6a16ab polishing 2009-10-13 11:46:40 +00:00
Sam Brannen c8b8cf45b4 fixed typos and programlisting formatting. 2009-10-13 11:20:32 +00:00
Sam Brannen 9cb3fb7012 fixed typo 2009-10-13 11:19:35 +00:00
Keith Donald 9c3a0569c9 polish 2009-10-12 19:38:55 +00:00
Keith Donald b781a39b46 polish 2009-10-12 19:25:35 +00:00
Keith Donald 16d294c2c0 spring 3 object mapping ref docs 2009-10-12 19:14:45 +00:00
Sam Brannen b287d5a9f1 JUnit 4.6 --> 4.7 2009-10-11 18:31:19 +00:00
Sam Brannen 3dfb1d5c9c [SPR-6222] Updating PetClinic Ivy dependencies so that the web-app runs. 2009-10-11 18:24:36 +00:00
Sam Brannen 2e59673e73 [SPR-6222] Updating PetClinic tutorial. 2009-10-11 18:23:26 +00:00
Sam Brannen f57d702370 [SPR-6222] Updating PetClinic build documentation regarding migration to Spring Build and changes resulting from the upgrade to Spring 3.0. 2009-10-11 18:08:44 +00:00
Sam Brannen 0b069ebe46 Updating PetClinic build documentation regarding migration to Spring Build. 2009-10-11 15:53:51 +00:00
Sam Brannen 8fe497ef53 Updating PetClinic build documentation regarding migration to Spring Build. 2009-10-11 15:30:56 +00:00
Sam Brannen 7983ded6e0 Renamed PetClinicSuiteTests to PetClinicTestSuite so that it doesn't get picked up by Spring Build. 2009-10-11 15:06:29 +00:00
Sam Brannen a3c3b257e1 Pet Clinic tests now run against JUnit 4.7. 2009-10-11 15:03:18 +00:00
Sam Brannen a75a975219 Pet Clinic test suite now includes VisitsAtomViewTest. 2009-10-11 15:02:24 +00:00
Sam Brannen 2827f80d34 Removed @Override. 2009-10-08 13:32:49 +00:00
Sam Brannen 66550c3340 Added an empty implementation of the missing setExclude() method so that the class compiles. 2009-10-08 13:25:43 +00:00
Keith Donald 96cfa0c37d custom mappable type tests 2009-10-07 21:33:53 +00:00
Keith Donald 8fd3de9397 mappable type factory extension point / polish 2009-10-07 20:27:48 +00:00
Keith Donald e3983fe796 polish 2009-10-07 19:37:07 +00:00
Keith Donald 8fe055b0e0 mapping exclusions 2009-10-07 19:28:39 +00:00
Keith Donald a73324bc24 polish 2009-10-07 19:11:22 +00:00
Keith Donald a4476e5e0e nested bean mapper test 2009-10-07 19:03:33 +00:00
Keith Donald f692c765d2 addNestedMapper 2009-10-07 17:50:03 +00:00
Keith Donald 3450c5de0b polish 2009-10-07 17:36:30 +00:00
Keith Donald ec04357580 polish 2009-10-07 17:28:28 +00:00
Keith Donald 9cf508d80d javadoc 2009-10-07 17:18:10 +00:00
Keith Donald ba5335f66e polish 2009-10-07 17:03:02 +00:00
Keith Donald c333494085 javadoc 2009-10-07 17:02:22 +00:00
Keith Donald 6d31db1017 renamed to MappingContext since no spel dep 2009-10-07 16:56:13 +00:00
Keith Donald acf574c3e3 added conversion service performance optimizations; added mapping cyclical ref handling; removed ConverterInfo in favor of specifying S and T at registration time if necessary 2009-10-07 16:54:36 +00:00
Andy Clement c9f0e68c82 SPR-5307: Committing test but can't be uncommented until Spring depends on AspectJ 1.6.7 2009-10-07 02:54:44 +00:00
Keith Donald 0437305669 nested revision 2009-10-06 21:40:59 +00:00
Keith Donald 0f5074db2b spel mapping, polish 2009-10-06 21:31:49 +00:00
Sam Brannen 2c2d79a4bf polishing 2009-10-06 21:11:51 +00:00
Sam Brannen b7e36461ca Now mentioning JSR-330 annotations in test chapter. 2009-10-06 21:10:56 +00:00
Sam Brannen c200715076 Now verifying support for @Named as well. 2009-10-06 21:10:06 +00:00
Chris Beams d020d73118 SPR-6186: removed remaining duplicate check for @Configuration 2009-10-06 04:30:26 +00:00
Chris Beams cbadf350e1 Continued progress on SPR-5682: Provide dedicated ApplicationContext implementations for use with @Configuration classes
Resolved sub-task SPR-6186: Eliminate duplicate code between ConfigurationClassApplicationContext and ConfigurationClassWebApplicationContext
2009-10-06 01:38:16 +00:00
Sam Brannen ab10d37fae Corrections regarding BindingResult(s); added a tip regarding programmatic use of LocalValidatorFactoryBean. 2009-10-05 22:24:42 +00:00
Sam Brannen 710ae3a9d2 SpringJUnit4ClassRunnerAppCtxTests now verifies seamless support for using @Inject in addition to @Autowired, etc. 2009-10-05 22:08:01 +00:00
Keith Donald 0a843e60a6 recursive mapping support 2009-10-05 20:28:10 +00:00
Chris Beams fd8935ba0b SPR-5682:
* polishing for ConfigurationClassApplicationContext & tests
* added ConfigurationClassWebApplicationContext & tests
* next: refactoring out duplications between ConfigurationClassApplicationContext & ConfigurationClassWebApplicationContext
2009-10-05 05:27:30 +00:00
Chris Beams 772a74a636 SPR-5682: fixing test breakage on CI server due to strange non-determinism in the order of bean names being returned in the key set of the map of beans matching the required type. 2009-10-05 03:29:20 +00:00
Chris Beams 8c5f78c0d6 polishing 2009-10-05 00:51:19 +00:00
Chris Beams a48234cf5f SPR-5682: Initial support for ConfigurationClassApplicationContext 2009-10-05 00:35:17 +00:00
Keith Donald e7c8f1ef8b SPR-6179, additional mapper test cases 2009-10-04 04:13:27 +00:00
Sam Brannen 6ea83afe1e Corrected typos and cleaned up DocBook structure. 2009-10-03 23:45:23 +00:00
Sam Brannen 0860f3bb8c [SPR-6174] DataBinder now uses var-args to set allowed/disallowed/required fields. 2009-10-03 22:23:41 +00:00
Sam Brannen f08d15c86f Fixed minor grammatical errors. 2009-10-03 22:19:21 +00:00
Sam Brannen 06872dd465 Fixed minor typo. 2009-10-03 22:18:50 +00:00
Keith Donald 341835a142 mapper initial commit 2009-10-02 16:28:53 +00:00
Sam Brannen 5c055ed6dd [SPR-6174] DataBinder now uses var-args to set allowed/disallowed/required fields. 2009-10-01 23:28:27 +00:00
Sam Brannen 0eda92a51a Fixed minor grammatical errors. 2009-10-01 22:52:46 +00:00
Andy Clement 076fc89a50 SPR-5518: Documented ability to use text rather than symbols for SPEL operators (lt, le, gt, ge, eq, ne, div, mod, not). Can help in XML specification of expressions. 2009-10-01 19:39:20 +00:00
Andy Clement 10e26e6dc7 SPR-6123: doc update on writing good pointcuts (should include a within()) 2009-10-01 19:05:11 +00:00
Juergen Hoeller 71a045328c renamed getAnnotations to getMethodAnnotations; added getMethodAnnotation and getParameterAnnotation convenience methods 2009-10-01 15:20:31 +00:00
Juergen Hoeller b152ac34fd CustomEditorConfigurer supports PropertyEditor instances again (with deprecation warning); for XFire compatibility (SPR-6157) 2009-10-01 13:40:55 +00:00
Juergen Hoeller 0c47a01953 fixed ContentNegotiatingViewResolver to work with the combination of ignoreAcceptHeader=true plus defaultContentType as well (SPR-6163) 2009-10-01 12:06:58 +00:00
Juergen Hoeller 7a700edaa7 understand "on"/"off", "yes"/"no", "1"/"0" as boolean values (analogous to CustomBooleanEditor) 2009-10-01 11:18:48 +00:00
Juergen Hoeller b465f204bd renamed internal *GenericConverters to *Converters 2009-10-01 11:07:22 +00:00
Juergen Hoeller 0543a294ee expose arrays as comma-delimited element String 2009-10-01 11:05:45 +00:00
Juergen Hoeller 784068346d PathMatchingResourcePatternResolver leniently ignores non-existing root directories 2009-09-30 15:04:31 +00:00
Keith Donald 3fa533ddd8 SPR-6032 & SPR-6033: Auto grow nested path enhancements to BeanWrapper 2009-09-29 19:54:35 +00:00
Ramnivas Laddad 832db0abbc Updated Groovy version for Eclipse project to mathc ivy.xml 2009-09-28 20:56:13 +00:00
Ramnivas Laddad 191293f2ef Fixed a commented test 2009-09-28 20:55:12 +00:00
Sam Brannen f95dff6975 org.springframework.instrument.classloading --> org.springframework.instrument.tomcat 2009-09-26 21:02:58 +00:00
Sam Brannen bfddb0938b Abed Rabbo --> Abedrabbo 2009-09-26 20:58:50 +00:00
Juergen Hoeller 72d9640801 final touches for 3.0 RC1 2009-09-25 15:00:43 +00:00
Juergen Hoeller 270fc84923 added ".vm" as resource file extension 2009-09-25 14:48:21 +00:00
Juergen Hoeller 4d29f65a9c @Event/ResourceMapping uniquely mapped to through event/resource id, even across controllers (SPR-6062); type-level @RequestMapping header conditions validated in Portlet environments as well 2009-09-25 14:45:35 +00:00
Mark Fisher 76122c931d updated javadoc 2009-09-25 14:25:56 +00:00
Mark Fisher 22e1305cf0 updated reference documentation now that the <executor/> and <scheduler/> element's 'size' attribute has been renamed to 'pool-size' 2009-09-25 14:21:49 +00:00
Mark Fisher 80ac130dfe Renamed the 'size' attribute to 'pool-size' for the <executor/> and <scheduler/> elements in the task namespace. 2009-09-25 14:19:42 +00:00
Arjen Poutsma cafc106ccc Renamed org.springframework.instrument.classloading module to org.springframework.instrument.tomcat 2009-09-25 12:51:58 +00:00
Juergen Hoeller 72f4572930 preparing for RC1 release 2009-09-25 11:03:57 +00:00
Juergen Hoeller e408cbeecd moved converter initialization code to constructor 2009-09-25 10:57:40 +00:00
Juergen Hoeller ea40fb9bcd all @SessionAttributes get exposed to the model before handler method execution; MultipartRequest is available as a mixin interface on (Native)WebRequest as well 2009-09-25 10:46:38 +00:00
Juergen Hoeller 9cb1338b94 all @SessionAttributes get exposed to the model before handler method execution; MultipartRequest is available as a mixin interface on (Native)WebRequest as well 2009-09-25 10:42:49 +00:00
Arjen Poutsma e49869ea78 SPR-6148 - @ResponseBody with returned String results in unresolvable view ServletException 2009-09-25 10:34:54 +00:00
Arjen Poutsma 5b12503c47 SPR-6144 - @ResponseStatus annotation is ignored in an @Controller redirect (RedirectView)
SPR-5468 - Modify RedirectView to allow 301 Permanent Redirects
2009-09-25 10:23:06 +00:00
Juergen Hoeller 6fe0e36fe0 polishing 2009-09-25 09:59:17 +00:00
Juergen Hoeller ce4e3784d1 updated dependencies 2009-09-25 09:58:54 +00:00
Juergen Hoeller 39a97a61af resolve handler bean name early; validate header conditions as well 2009-09-25 09:53:30 +00:00
Juergen Hoeller aec2bc097e polishing 2009-09-25 09:45:10 +00:00
Juergen Hoeller 09e6a85edd fixed overview files 2009-09-25 08:47:18 +00:00
Arjen Poutsma 04fa5d4b99 SPR-6093 - MVC Annotation Inheritance 2009-09-25 08:45:58 +00:00
Mark Pollack d8245c800b Add minimal doc for JSR 330 support. 2009-09-25 08:17:12 +00:00
Mark Pollack 7ae8be05d1 SPR-5994 - The release archive contains an unecessary .zip file of the contents under the reference doc directories html and html-single 2009-09-25 07:20:45 +00:00
Mark Pollack c6cd1a528e SPR-6119 - Add slf4j dependency back to orm's pom.xml but in test scope as it is needed to run tests that use Hibernate
SPR-5956 - Remove commons-logging dependency definitions in pom.xml for all but spring-core so as to make exclusion rule easier for user who use slf4j
2009-09-25 05:16:55 +00:00
Juergen Hoeller cd1df84d7d removed slf4j dependency (not used in Spring itself; SPR-6119) 2009-09-24 23:16:35 +00:00
Juergen Hoeller 34d2a69a82 removed separate placeholder test class 2009-09-24 22:58:15 +00:00
Juergen Hoeller 60acaf5671 updated dependencies 2009-09-24 22:55:21 +00:00
Juergen Hoeller 5c1b0e6caf removed classes which are not used in 3.0 yet 2009-09-24 22:54:35 +00:00
Juergen Hoeller a59d205b36 removed 3.1 feature classes 2009-09-24 22:53:17 +00:00
Juergen Hoeller 2781b876d2 PropertyPlaceholderConfigurer supports "${myKey:myDefaultValue}" defaulting syntax 2009-09-24 22:51:38 +00:00
Juergen Hoeller 0f43d6c592 PropertyPlaceholderConfigurer supports "${myKey:myDefaultValue}" defaulting syntax 2009-09-24 22:34:02 +00:00
Juergen Hoeller 8eca898d44 removed outdated "cacheJspExpressions" feature from ExpressionEvaluationUtils 2009-09-24 15:56:00 +00:00
Juergen Hoeller c761082eea added simplest possible ExpressionEvaluator 2009-09-24 15:48:48 +00:00
Juergen Hoeller 89aa13e8e5 removed Apache JSTL references completely 2009-09-24 15:35:28 +00:00
Juergen Hoeller 0463c612b5 removed Apache JSTL references completely 2009-09-24 15:31:10 +00:00
Juergen Hoeller 811e9fc043 consistent dependencies 2009-09-24 15:09:57 +00:00
Juergen Hoeller e2093a8414 fixed regression: looking for annotation on original bean class as well, not just on exposed bean type (SPR-5981) 2009-09-24 14:59:26 +00:00
Juergen Hoeller ad492e906e PropertyOverrideConfigurer's "ignoreInvalidKeys" ignores invalid property names as well (SPR-5792) 2009-09-24 14:40:13 +00:00
Juergen Hoeller 557dd1f1c4 initialize transaction synchronization before doBegin call in order to avoid OutOfMemory failures after resource binding 2009-09-24 14:02:40 +00:00
Juergen Hoeller 49bf85baaa factored out common resolveTypeArgument(s) method to GenericTypeResolver 2009-09-24 12:51:52 +00:00
Juergen Hoeller b8c1130eec detect @Bean methods on registered plain bean classes as well (SPR-5795) 2009-09-24 10:45:56 +00:00
Juergen Hoeller 38110d35d2 polishing 2009-09-24 10:21:40 +00:00
Arjen Poutsma 501a1ea9af SPR-5910 - Slight Improvement for Main JavaDoc in RedirectView 2009-09-24 08:31:33 +00:00
Mark Pollack bd098ce1db pom maintenance - sync with ivy.xml
update junit version in ivy.xml for org.sf.aspects
2009-09-24 06:09:54 +00:00
Mark Fisher 616a48acc2 SPR-6142 AbstractMessageListenerContainer now accepts an implementation of the ErrorHandler strategy for handling any uncaught exceptions thrown while processing a Message. The default behavior is still to log at error-level only (no ErrorHandler). 2009-09-23 22:06:46 +00:00
Juergen Hoeller 33265eecbd polishing 2009-09-23 21:19:28 +00:00
Juergen Hoeller 9508f41a91 made InitDestroyAnnotationBeanPostProcessor's logger field transient (SPR-5962) 2009-09-23 21:17:30 +00:00
Juergen Hoeller d4c16e91df SPR-6094: PostConstruct now processed top-down (base class first); @PreDestroy processed bottom-up (subclass first) 2009-09-23 20:53:21 +00:00
Juergen Hoeller 64bf3b74b5 revised Hessian/Burlap exception clauses (SPR-5897) 2009-09-23 19:35:44 +00:00
Keith Donald 2bd30a49ad more tests 2009-09-23 18:36:11 +00:00
Keith Donald 7a6dafd5ad completed generic converter implementation 2009-09-23 18:25:04 +00:00
Juergen Hoeller ce800fb45a allow instrumentation to be specified as a regular VM agent even in OSGi (SPR-6147) 2009-09-23 18:14:20 +00:00
Juergen Hoeller dc05ef6548 revised JBoss VFS support 2009-09-23 17:05:39 +00:00
Juergen Hoeller e56aa91bd7 "data.sql" instead of "test-data.sql" (SPR-6020) 2009-09-23 16:16:40 +00:00
Juergen Hoeller c802253402 "data.sql" instead of "test-data.sql" (SPR-6020) 2009-09-23 15:58:38 +00:00
Rob Harrop 2eb6f497a9 updated testing chapter of ref guide 2009-09-23 14:59:21 +00:00
Juergen Hoeller 6fc190ec25 AbstractBeanDefinitionParser can deal with null return value as well (SPR-5872) 2009-09-23 13:51:14 +00:00
Keith Donald 438f128db6 todos 2009-09-23 04:50:03 +00:00
Keith Donald 187d025c19 map converters 2009-09-23 04:45:04 +00:00
Keith Donald 1ee4ac1b52 string to map converters 2009-09-23 04:20:23 +00:00
Mark Fisher dedecf7ae9 SPR-6142 Moved ErrorHandler strategy interface to the org.springframework.util package so that it can be used by MessageListener containers in addition to TaskSchedulers. 2009-09-23 00:44:58 +00:00
Mark Fisher e2c36fd592 Updated the context module's .classpath file for Groovy 1.6.3 (from 1.5.1) 2009-09-22 23:52:27 +00:00
Keith Donald e6c3227d2d more generic converters 2009-09-22 20:28:23 +00:00
Keith Donald ed611be838 conversion utils helper for common code 2009-09-22 15:37:26 +00:00
Juergen Hoeller 871fc14fbb restored parent property to accept ConversionService instead of GenericConversionService 2009-09-22 13:37:32 +00:00
Juergen Hoeller 0698947e6d skip processing when no PlatformTransactionManager found (SPR-3955) 2009-09-22 13:31:56 +00:00
Keith Donald c693f216f1 Beefed up test suite 2009-09-21 22:59:48 +00:00
Keith Donald e9416db472 javadoc and final 2009-09-21 22:35:39 +00:00
Keith Donald 01e900c33a documented hooks 2009-09-21 22:24:36 +00:00
Keith Donald a6e28f4eb5 polish 2009-09-21 21:32:01 +00:00
Keith Donald 6ce33dba75 getConverter calls now throw exception and query parent 2009-09-21 21:24:37 +00:00
Arjen Poutsma 5faa4d90ac SPR-6130 - Be able to specify a default content type when no extension is used in ContentNegotiatingViewResolver 2009-09-21 14:27:22 +00:00
Mark Pollack 4f94f45ec4 pom maintenance 2009-09-21 07:37:30 +00:00
Keith Donald fe525f5100 polish 2009-09-21 05:51:10 +00:00
Keith Donald 5bae005366 removed ignored test now that convert system has been revised 2009-09-21 05:40:55 +00:00
Keith Donald 17f7796d42 polish 2009-09-21 05:39:16 +00:00
Keith Donald cb54869726 collection to object 2009-09-21 05:30:54 +00:00
Keith Donald 67c02f6c35 generic converter revising 2009-09-21 05:14:14 +00:00
Jeremy Grelle 982ece595c SPR-5931 - Allow non-standard attributes in <form> tags 2009-09-21 02:48:00 +00:00
Juergen Hoeller 566eeba8ca specified excluded names matched against unprefixed FactoryBean names as well (SPR-5926) 2009-09-20 22:22:35 +00:00
Juergen Hoeller 9f75eb4f44 do not check for action exception in resource phase (SPR-6129) 2009-09-20 21:12:41 +00:00
Keith Donald fada151878 array to object 2009-09-18 23:15:33 +00:00
Keith Donald d37c5aba94 polish 2009-09-18 23:06:29 +00:00
Keith Donald 48bc060a77 collection and array merged into one 2009-09-18 23:02:52 +00:00
Keith Donald 2ca694350e array to collection conversion 2009-09-18 22:18:41 +00:00
Juergen Hoeller 6c4fb85753 marked JBoss VFS dependency as optional (SPR-6127) 2009-09-18 21:34:25 +00:00
Juergen Hoeller 66ce8248b5 JSR-330 etc 2009-09-18 21:30:30 +00:00
Keith Donald 25854bd764 polish 2009-09-18 21:07:53 +00:00
Keith Donald b4fd51abd5 polish 2009-09-18 20:41:15 +00:00
Keith Donald 45c542e51e updated for change in conversion service api; source type desc now required 2009-09-18 20:32:41 +00:00
Keith Donald b2e3837956 polish 2009-09-18 20:28:36 +00:00
Keith Donald f1f4bd9fb4 generic converter updates 2009-09-18 20:08:45 +00:00
Keith Donald d3b43ebccb refined generic converter concept 2009-09-18 19:57:59 +00:00
Juergen Hoeller 6420fd303b fixed checkbox macro (SPR-6120) 2009-09-18 14:42:36 +00:00
Keith Donald 8e800f0322 map to map generic converter 2009-09-18 14:30:23 +00:00
Juergen Hoeller ac6e26388f added default editors for "java.util.Currency" and "java.util.TimeZone" 2009-09-18 14:15:06 +00:00
Juergen Hoeller 99753f0d1c polishing 2009-09-18 14:07:19 +00:00
Juergen Hoeller 89216a4b9a marked Hibernate Validator as optional 2009-09-18 14:02:24 +00:00
Juergen Hoeller 7b42a12161 consistent loading of optional classes 2009-09-18 14:01:39 +00:00
Juergen Hoeller 8d66c90760 revised JTA 1.1 support and javadoc 2009-09-18 13:48:37 +00:00
Jeremy Grelle 1c134925ba SPR-6114 - Upgrade the Spring JSP tag libraries to JSP 2.0 2009-09-17 22:39:35 +00:00
Keith Donald d29a894d57 javadoc 2009-09-17 21:32:31 +00:00
Keith Donald 563ef683f9 polish 2009-09-17 21:27:57 +00:00
Keith Donald e9d53cb2e8 ignore failing test for now while revising converter system 2009-09-17 21:11:52 +00:00
Keith Donald 1d9607b465 javadoc 2009-09-17 21:03:19 +00:00
Keith Donald e26163505a added sf4j logging to run tests in eclipse 2009-09-17 20:25:34 +00:00
Keith Donald d848d21f09 polish 2009-09-17 20:16:26 +00:00
Keith Donald e153a1a968 tidying string to char conversion 2009-09-17 20:05:38 +00:00
Keith Donald 5c3e71d494 polish 2009-09-17 19:56:19 +00:00
Keith Donald 3ef485bbbe polish 2009-09-17 19:53:17 +00:00
Keith Donald 31441627de updated formatter conversion service adapter to work with type descriptor 2009-09-17 19:48:55 +00:00
Keith Donald 39c1ab923f tidying 2009-09-17 19:24:35 +00:00
Keith Donald 33c19b8b14 Converter system implementation cleanup and tidying; wip 2009-09-17 19:24:07 +00:00
Thomas Risberg 10c30f0315 modified createRelative according to David Ward's suggestion for JBSPRING-4 (SPR-5120) 2009-09-17 15:58:25 +00:00
Juergen Hoeller ad4f50a0d4 removed outdated reflection code 2009-09-17 15:24:24 +00:00
Juergen Hoeller 9ef1d2b1ad adapted to Converter signature change 2009-09-17 15:20:04 +00:00
Juergen Hoeller 6f2642f2d3 consistently use varargs signature 2009-09-17 10:24:56 +00:00
Juergen Hoeller 87e939a4e9 adapted to Converter signature change 2009-09-17 10:24:08 +00:00
Juergen Hoeller 160521074b avoid caching for expression results even when specified as TypedStringValue (SPR-6115) 2009-09-17 10:04:36 +00:00
Keith Donald 8bf1ee5e7c polish 2009-09-16 19:25:07 +00:00
Keith Donald 1c6965132f convert polishing: removed checked exception from Converter interface to support direct use, added Converter to each implementation for consistency 2009-09-16 19:24:56 +00:00
Keith Donald 881c3ed6fa Mapper and SpelMapper 2009-09-16 15:40:11 +00:00
Sam Brannen a7ab109ab7 TestNG 5.10 2009-09-16 11:15:37 +00:00
Rob Harrop 01fb1825f5 [SPR-6063] fixed issue with inconsistent views of PropertyDescriptors 2009-09-16 09:53:14 +00:00
Rob Harrop aa08c11976 [SPR-5859] @ManagedOperation can now be used on getters/setters 2009-09-16 09:25:48 +00:00
Juergen Hoeller 2a0d68cb5c restored getMostSpecificMethod's traversal of the inheritance hierarchy 2009-09-15 22:31:08 +00:00
Juergen Hoeller fd81aa205d protected @Autowired method can be overridden with non-annotated method to suppress injection; private @Autowired methods with same signature will be called individually across a hierarchy (SPR-6112) 2009-09-15 15:52:13 +00:00
Juergen Hoeller fa2bb722f0 initial JSR-330 injection support 2009-09-15 14:12:16 +00:00
Juergen Hoeller ad1269622b @Scope annotations not sufficient for scanning anymore 2009-09-15 12:36:45 +00:00
Juergen Hoeller e1a3e44485 initial JSR-330 injection support 2009-09-15 12:00:55 +00:00
Arjen Poutsma 429d78b902 javadoc. 2009-09-15 11:02:44 +00:00
Juergen Hoeller 34357d2b1f revised DefaultBindingErrorProcessor to use direct getPropertyName() and getValue() calls on PropertyAccessException itself (SPR-6111) 2009-09-15 10:51:50 +00:00
Arjen Poutsma 9f19e5e73b Polish 2009-09-15 09:17:10 +00:00
Keith Donald 5fa7347641 polish 2009-09-14 23:18:31 +00:00
Keith Donald 0d6b9f1241 polish 2009-09-14 23:17:03 +00:00
Juergen Hoeller ca928944db marked Derby dependency as optional (SPR-6109) 2009-09-14 23:08:32 +00:00
Keith Donald 0d7f4117ab polish 2009-09-14 22:51:22 +00:00
Keith Donald c0d2c6fed4 polish 2009-09-14 22:43:44 +00:00
Keith Donald af1c507f93 polish 2009-09-14 22:40:44 +00:00
Keith Donald 9e9f9df041 polish 2009-09-14 22:25:55 +00:00
Keith Donald df7a4dba3a polish 2009-09-14 22:00:54 +00:00
Keith Donald 5c525e546c polish 2009-09-14 21:59:12 +00:00
Keith Donald 90697e884d polish 2009-09-14 21:32:13 +00:00
Keith Donald d5ed42e860 spring 3 validation docs; jsr303 integration 2009-09-14 20:54:46 +00:00
Rob Harrop 90652bf8ae [SPR-5727] CronTriggerBean supports start delay 2009-09-14 15:53:05 +00:00
Rob Harrop 320f08ac79 [SPR-6017] a few more tweaks to how getLocalName is handled 2009-09-14 15:00:37 +00:00
Juergen Hoeller bb70c9a4c4 @RequestParam and co support placeholders and expressions in their defaultValue attributes (SPR-5922); @Value expressions supported as MVC handler method arguments as well (against request scope) 2009-09-14 10:48:15 +00:00
Rob Harrop 7835e66abb [SPR-6017] a few more tweaks to how getLocalName is handled 2009-09-14 10:43:04 +00:00
Arjen Poutsma ee0a59d464 Test -> Tests 2009-09-14 10:24:42 +00:00
Rob Harrop 7d37c92e4f [SPR-6017] a few more tweaks to the BeanDefinitionParserDelegate public contract 2009-09-14 10:02:15 +00:00
Juergen Hoeller 582c092f0e revised use of generic provider class for Eclipse compile compatibility 2009-09-13 21:27:03 +00:00
Sam Brannen f1bfcf0d25 [SPR-6104] @TestExecutionListeners now supports a 'listeners' alias for its existing 'value' attribute. 2009-09-13 13:55:34 +00:00
Rob Harrop fe16447112 more work on enabling non-namespace extensions of xml parsing 2009-09-11 20:00:04 +00:00
Keith Donald 1e9fc388ac added javax validation, hibernate, and vfs dependencies into eclipse 2009-09-11 19:04:03 +00:00
Rob Harrop 1480202aa3 [SPR-5644] Support for Enum<?> and Enum<T> values as FQN.FIELD_NAME in type conversion 2009-09-11 18:31:51 +00:00
Thomas Risberg f7562614bc changed from M4 to RC1 2009-09-11 15:34:32 +00:00
Thomas Risberg 8303d4945e updated the oxm exceptions figure (SPR-6095) 2009-09-11 15:11:52 +00:00
Juergen Hoeller 2d3c6fa55f removed outdated dependency on standard taglib (SPR-6099) 2009-09-11 14:22:26 +00:00
Thomas Risberg 64c46d48bb extended the range for org.jboss.virtual (SPR-5120) 2009-09-10 11:12:23 +00:00
Thomas Risberg 184f63f689 fixed component scanning for JBoss 5 VFS; applied revised vfs-fixes-3.patch; added ResourceHandlingUtils (SPR-5120) 2009-09-10 10:35:04 +00:00
Thomas Risberg 377359b924 polished 2009-09-09 17:28:34 +00:00
Thomas Risberg aeee120431 Beverly's edits reviewed; fixed coverage for SimpleJdbcCall and the use of default parameter values (SPR-5929) 2009-09-09 17:28:21 +00:00
Thomas Risberg c1f0301433 reduced size of level 4 subsection headings 2009-09-09 17:27:05 +00:00
Thomas Risberg ea674f2fa6 revised the detection of Sybase (SPR-6053) 2009-09-09 13:25:27 +00:00
Juergen Hoeller 4be3c5d88c ObjectFactory etc 2009-09-08 23:05:11 +00:00
Juergen Hoeller cfdb106910 polishing 2009-09-08 23:03:22 +00:00
Juergen Hoeller 634d4b4d4c BeanFactory prefers local primary bean to primary bean in parent factory (SPR-5871) 2009-09-08 23:01:26 +00:00
Juergen Hoeller ee1c68ead4 polishing 2009-09-08 22:35:55 +00:00
Juergen Hoeller 45dc856993 Jpa/JdoTransactionManager passes resolved timeout into Jpa/JdoDialect's beginTransaction; HibernateJpaDialect applies timeout onto native Hibernate Transaction before begin call (SPR-5195) 2009-09-08 22:35:32 +00:00
Rob Harrop 414d6633ea [SPR-6048] fixed Exception signature in CronTriggerBean.afterPropertiesSet() 2009-09-08 21:57:41 +00:00
Rob Harrop 2b96fe8b5d [SPR-5993] Fixed notice file 2009-09-08 21:50:26 +00:00
Rob Harrop 8f6a42bf64 [SPR-3635] [SPR-5039] [SPR-5813] JMX annotation inheritance fixed 2009-09-08 21:37:02 +00:00
Juergen Hoeller 7f7173f790 added copy of SerializationTestUtils to beans module 2009-09-08 21:00:48 +00:00
Juergen Hoeller 209f43bee7 BeanFactory supports ObjectFactory as a dependency type for @Autowired and @Value (SPR-6079) 2009-09-08 20:55:00 +00:00
Rob Harrop 7448214657 reworked PropertyPlaceholderConfigurer to use new PropertyPlaceholderHelper 2009-09-08 20:10:26 +00:00
Rob Harrop f20c074ff4 reworked PropertyPlaceholderHelper 2009-09-08 19:09:12 +00:00
Rob Harrop d16faafc4f [SPR-6025] support for recursive property placeholder replacement in system properties 2009-09-08 17:13:02 +00:00
Rob Harrop 3fe09d70cd [SPR-6025] added SystemPropertyUtilsTests 2009-09-08 16:29:43 +00:00
Rob Harrop 8357bcb050 [SPR-6025] PropertyPlaceholderUtils introduced 2009-09-08 16:24:38 +00:00
Rob Harrop df3881d1e8 Update groovy dependency to match ivy.xml 2009-09-08 16:23:09 +00:00
Thomas Risberg ceca0db645 added synchronization to compile method (SPR-6001) 2009-09-08 16:19:34 +00:00
Rob Harrop ae461db82a fix to resource handling in PluggableSchemaResolver 2009-09-08 08:37:10 +00:00
Juergen Hoeller 6651ff0c55 fixed formatter annotation lookup 2009-09-08 01:35:36 +00:00
Juergen Hoeller c63567c2ef JSR-303 etc 2009-09-08 00:50:52 +00:00
Juergen Hoeller 70038bcf3c fixed format tests 2009-09-08 00:15:09 +00:00
Juergen Hoeller 0d084bd7f8 updated test dependencies 2009-09-08 00:11:28 +00:00
Juergen Hoeller 6e95b2c311 polishing 2009-09-08 00:05:09 +00:00
Juergen Hoeller a86a698e5b initial JSR-303 Bean Validation support; revised ConversionService and FormatterRegistry 2009-09-07 23:58:42 +00:00
Sam Brannen f9f9b431a6 [SPR-4643] SpringJUnit4ClassRunner now optionally calls JUnit 4.7's BlockJUnit4ClassRunner.withRules() method using reflection in order to provide backward compatibility with JUnit 4.5 and 4.6. 2009-09-07 21:03:32 +00:00
Juergen Hoeller 7aff0755a3 expression parser uses context's ConversionService by default 2009-09-07 18:53:01 +00:00
Juergen Hoeller 7123e4f81e expression parser uses context's ConversionService by default 2009-09-07 18:37:59 +00:00
Juergen Hoeller efaf76b46f polishing 2009-09-07 18:37:01 +00:00
Juergen Hoeller 57f90ad4ef polishing 2009-09-07 18:07:17 +00:00
Juergen Hoeller 1045847cf7 updated to CGLIB 2.2 and EHCache 1.6.2 2009-09-07 18:04:27 +00:00
Juergen Hoeller e6436bbbbe fixed currently-in-creation check to apply with any log level (SPR-5996) 2009-09-07 12:50:49 +00:00
Juergen Hoeller c5e49fc6dc refined PathMatchingResourcePatternResolver's treatment of non-readable directories (SPR-6086) 2009-09-07 12:44:59 +00:00
Mark Fisher c10342a553 Added documentation for @Scheduled and @Async annotations. 2009-09-07 04:06:18 +00:00
Rob Harrop afd6fe9048 [SPR-5927] fixed FormTag attribute clearing 2009-09-06 19:09:29 +00:00
Mark Fisher b18a1dc5b3 added documentation for the task namespace 2009-09-06 18:24:16 +00:00
Rob Harrop bfa4231c9d removed dependency on ServletException 2009-09-04 18:56:26 +00:00
Rob Harrop aee3f14d3c removed unecessary dependency on ServletException 2009-09-04 18:46:55 +00:00
Rob Harrop c3546f4c78 fixed missing dependencies in iml file 2009-09-04 18:44:31 +00:00
Thomas Risberg b482d6db12 revised the detection of Sybase (SPR-6053) 2009-09-04 18:37:50 +00:00
Rob Harrop 019c3c253a [SPR-6017] updated DBDR and BDPD to allow for overriding of namespace-specific methods 2009-09-04 18:22:37 +00:00
Rob Harrop 5d17db64ec updated javax.el dependency to match the IDEA project file 2009-09-04 18:17:38 +00:00
Rob Harrop 05fe679384 [SPR-6004] Fixed NPE in BeanDefinitionParserDelegate when using empty namespace as the default 2009-09-04 16:59:07 +00:00
Andy Clement 855eac549e SpelExpressionParser made threadsafe 2009-09-03 20:09:11 +00:00
Keith Donald cd20be7a4f polish 2009-09-03 18:52:39 +00:00
Keith Donald 80570a28c0 polish 2009-09-03 16:54:24 +00:00
Keith Donald b4aa322c4c polish 2009-09-03 16:43:44 +00:00
Keith Donald 21d9b70fd8 polish 2009-09-03 16:32:09 +00:00
Keith Donald 9b2f161b7e polish 2009-09-03 16:30:46 +00:00
Rob Harrop a03ca86372 [SPR-6057] test case to show that bug is already fixed 2009-09-03 16:18:22 +00:00
Keith Donald ca159f6d9a polish 2009-09-03 15:01:54 +00:00
Keith Donald 223e1e4522 polish 2009-09-03 14:44:10 +00:00
Keith Donald 35c4a4b3b0 polish 2009-09-03 14:06:10 +00:00
Juergen Hoeller d0c8545d9b updated setCookieMaxAge to match getCookieMaxAge return type (SPR-6070) 2009-09-03 12:15:19 +00:00
Keith Donald 477c4d3865 updaten new in 3 2009-09-03 05:32:19 +00:00
Keith Donald 19450cd069 updaten new in 3 2009-09-03 05:30:56 +00:00
Keith Donald e7095748f3 polish 2009-09-03 04:44:21 +00:00
Keith Donald 421aab0fa5 polish 2009-09-03 04:41:37 +00:00
Keith Donald 354e6fafe9 polish 2009-09-03 04:17:18 +00:00
Keith Donald d18bc356f2 polish 2009-09-03 03:40:37 +00:00
Keith Donald 835ebfcd25 setting up FormatterRegistrY 2009-09-03 03:36:57 +00:00
Keith Donald 70083474e1 polish 2009-09-02 23:47:21 +00:00
Keith Donald 900660ae56 converter / formatter docs initial commit 2009-09-02 23:34:01 +00:00
Thomas Risberg d10be7443f Fixed JavaDoc for determineRootDir method (SPR-5340) 2009-09-02 20:03:12 +00:00
Keith Donald f323a5bb5d fixed broken classpaths for ehcache and junit 2009-09-02 16:29:43 +00:00
Sam Brannen 0a781f3084 Including HibernateSessionFlushingTests in the suite. 2009-09-01 17:33:29 +00:00
Sam Brannen 2dee54b78a [SPR-4702] now updating TestContext state before calling before/after test class life cycle callbacks. 2009-09-01 17:33:12 +00:00
Juergen Hoeller ba425c34f8 updated to EHCache 1.6.0 2009-08-31 11:40:48 +00:00
Juergen Hoeller 8675281972 updated to AspectJ 1.6.5 2009-08-31 11:30:30 +00:00
Juergen Hoeller 8754f0bc85 updated dependencies 2009-08-31 11:25:54 +00:00
Chris Beams 19bccaaa11 updates made during my review of beans.xml:
* eliminated all usage of "the section entitled", because <xref> links already render including "the section called ".  This was resulting in sentences like 'see also the section entitled the section called "@Autowired"'. This issue affected nearly all sections of the documentation, so went beyond just beans.xml

* fixed table overflow in the "Using filters to customize scanning" section (approx. p.90)

* fixed all code overflows in <programlisting/> elements

* corrected a couple minor syntax errors with SpEL examples (missing closing braces)

* added 'language="..."' element to <programlisting> elements where appropriate to enable syntax highlighting.

* normalized all code indention to four-space (some code listings were using one- and two-space)

* updated all code listings to use same-line opening braces.

* eliminated section regarding backward compatibility with Spring DTDs and singleton=true|false.  This seems like cruft to me, and we shouldn't keep historical notes around forever.

* Added <note> regarding the new thread scope (SimpleThreadScope) to Section 3.5 Bean Scopes.  Also updated the section on registering a custom Scope implementation to use the SimpleThreadScope as an example.

* updated the new-in-3.xml section to improve the @Configuration example
2009-08-31 05:36:34 +00:00
Thomas Risberg 7b6029d515 Beverly's edits reviewed; modified the introduction part to include the preface text 2009-08-29 03:17:02 +00:00
Sam Brannen a45d1dec65 [SPR-6011] SpringJUnit4ClassRunner once again supports collective timeouts for repeated tests 2009-08-28 17:29:37 +00:00
Sam Brannen 984504735e [SPR-6011] SpringJUnit4ClassRunner once again supports collective timeouts for repeated tests. 2009-08-28 17:28:25 +00:00
Mark Fisher e0c63d8cba minor typos and tweaks to 'expressions' chapter 2009-08-28 12:44:54 +00:00
Sam Brannen eda193fc98 Added assertPersonCount() functionality for increased robustness. 2009-08-28 09:23:02 +00:00
Arjen Poutsma 66a799552f SPR-2784: Support MultipartFile-array property 2009-08-28 09:15:19 +00:00
Costin Leau ae8c053568 + fixed NPE when closing up non-initialized contexts 2009-08-28 05:43:12 +00:00
Juergen Hoeller 773bdcded5 changed NamedParameter/SimpleJdbcOperations parameter signatures to accept any Map value type (SPR-6046) 2009-08-27 13:53:00 +00:00
Arjen Poutsma e1b73ade8a Removed duplicate OrderItem 2009-08-27 13:51:47 +00:00
Juergen Hoeller 904c2358cd adapted to changes in non-lenient mode 2009-08-27 10:45:46 +00:00
Arjen Poutsma 636c4901c0 More autoboxing madness. 2009-08-27 10:30:47 +00:00
Juergen Hoeller fb7fd4bb52 added superfluous cast to get around ambiguity problem with some compilers 2009-08-27 10:23:04 +00:00
Costin Leau 015284af7c + add implicit (String) type for typed string values w/o a specified type 2009-08-27 09:47:15 +00:00
Arjen Poutsma c870e01757 Added castor properties 2009-08-27 09:26:01 +00:00
Arjen Poutsma 157a87e910 SPR-6003 - Improve CastorMarshaller support for loading class descriptors 2009-08-27 09:05:36 +00:00
Juergen Hoeller 52b51888f9 first cut of changes for 3.0.0.RC1 2009-08-27 01:01:25 +00:00
Juergen Hoeller 83289cb8b0 updated JPA 2.0 compatibility to EclipseLink 2.0.0.M7 2009-08-27 00:51:47 +00:00
Mark Fisher d3a6c48cf0 modified intro to accommodate new order and added features 2009-08-27 00:17:08 +00:00
Mark Fisher b5661ebd12 Moved Quartz and Timer discussion after TaskExecutor and TaskScheduler 2009-08-26 23:48:47 +00:00
Sam Brannen a07da0d950 [SPR-6043] @NotTransactional is now deprecated 2009-08-26 23:23:07 +00:00
Mark Fisher eb5d47c64e Added documentation for the TaskScheduler abstraction. 2009-08-26 22:06:34 +00:00
Juergen Hoeller ce3c72f8c2 compatibility with Hibernate 3.5 beta 1 2009-08-26 15:20:53 +00:00
Sam Brannen 4a7c299761 [SPR-5995] SpringJUnit4ClassRunner is now compatible with JUnit 4.5 - 4.7 2009-08-26 14:46:28 +00:00
Juergen Hoeller e0bb838259 MBeanServerFactoryBean returns JDK 1.5 platform MBeanServer for agent id "" (SPR-5909) 2009-08-26 13:42:28 +00:00
Sam Brannen 8fb53c801e [SPR-5995] Updated documentation regarding compatibility with JUnit 4.5, 4.6, and 4.7. 2009-08-26 13:13:06 +00:00
Sam Brannen da3eb580f6 [SPR-5995] Renamed makeNotifier() to springMakeNotifier() in order to allow compatibility with JUnit 4.5, 4.6, and 4.7. 2009-08-26 12:37:59 +00:00
Juergen Hoeller 5a55b8384a refined logging in JMS SingleConnectionFactory and DefaultMessageListenerContainer 2009-08-26 12:01:51 +00:00
Arjen Poutsma 5c2d63745f SPR-6037 - Ability to configure a XStream subclass on XStreamMarshaller 2009-08-26 09:36:50 +00:00
Juergen Hoeller 04cd95ff50 fixed accidental test failures 2009-08-25 13:49:10 +00:00
Juergen Hoeller 9a48f3f3a8 try to create unknown collection implementation types via default constructor 2009-08-25 13:29:22 +00:00
Chris Beams b118aae971 s/(init|destroy)MethodName/(init|destroy)Method/ to reflect recent changes made when porting @Bean to Spring core. 2009-08-25 05:10:42 +00:00
Christian Dupuis a7acea2329 remove obsolete xsd 2009-08-24 23:09:25 +00:00
Costin Leau 0179c66d2a + add security manager checks to avoid the creation of inner privileged action classes 2009-08-24 15:53:48 +00:00
Juergen Hoeller 04b619ebfb fixed accidental test failures 2009-08-24 13:48:21 +00:00
Juergen Hoeller 427edfe93c fixed package-info 2009-08-24 13:36:32 +00:00
Juergen Hoeller fee838a65e support for default "conversionService" bean in an ApplicationContext; revised formatting package, now integrated with DataBinder and AnnotationMethodHandlerAdapter; revised AccessControlContext access from BeanFactory 2009-08-24 13:30:42 +00:00
Sam Brannen 9f9f2349cd polishing 2009-08-24 12:14:57 +00:00
Sam Brannen 77821845a7 [SPR-4702] Updated JavaDoc regarding before/after test class lifecycle callbacks. 2009-08-22 21:50:02 +00:00
Sam Brannen 9eb19ac816 Polishing test annotation declarations and JavaDoc. 2009-08-21 11:44:38 +00:00
Keith Donald a1b3b87540 polish 2009-08-20 03:53:49 +00:00
Keith Donald 641407cb4d missing field test case 2009-08-20 03:51:20 +00:00
Keith Donald 901e88c575 polish 2009-08-20 03:45:08 +00:00
Keith Donald 78304c0ccf core context.message, context.alert, model.binder modules; includes SpEL-based GenericBinder implementation 2009-08-20 03:40:23 +00:00
Keith Donald 2bd664f7ee removed framework specific annotation in favor of user-defined for now 2009-08-19 15:02:50 +00:00
Keith Donald 704cc79cee polish 2009-08-19 14:43:20 +00:00
Arjen Poutsma 8d7d3cff1b SPR-6009 - @ExceptionHandler methods are still expected to return a ModelAndView, even when consuming a ServletResponse/OutputStream/Writer 2009-08-19 11:03:28 +00:00
Arjen Poutsma 3b7691d525 SPR-6008 - @ResponseStatus on @ExceptionHandler method is ignored 2009-08-18 14:37:23 +00:00
Arjen Poutsma 5680cd4a19 SWS-548 - Expose suppressNamespace and suppressXSIType as properties to CastorMarshaller 2009-08-18 10:45:20 +00:00
Keith Donald 20f5f99e9a SPR-6013, SPR-6014, SPR-6015 tests 2009-08-17 23:13:29 +00:00
Keith Donald db40e15a3e polish 2009-08-17 18:43:47 +00:00
Keith Donald 2381452e9a SPR-6012, SPR-6013, SPR-6014 initial commit 2009-08-17 18:35:04 +00:00
Arjen Poutsma 839e94618d SWS-548 - Expose suppressNamespace and suppressXSIType as properties to CastorMarshaller 2009-08-17 08:50:41 +00:00
Sam Brannen 601120979b [SPR-5964] Upgraded to TestNG 5.10 2009-08-11 10:31:06 +00:00
Sam Brannen 42638585b5 [SPR-5963] Upgraded to JUnit 4.7 2009-08-11 10:12:20 +00:00
Sam Brannen 5d17515dc5 [SPR-5888] Upgraded to TestNG 5.9.0. 2009-08-11 09:26:40 +00:00
Mark Pollack 7b26ae479b pom maintenance - extraneous dependency on cglib-nodep 2009-08-10 23:31:56 +00:00
Arjen Poutsma 2df7ceac16 Removed ci.build=true 2009-08-10 09:00:11 +00:00
1744 changed files with 91969 additions and 46873 deletions
+7
View File
@@ -0,0 +1,7 @@
target
integration-repo
ivy-cache
spring-build
jmx.log
.springBeans
.DS_Store
+12 -12
View File
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
+12 -6
View File
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="build-spring-framework" default="precommit">
<path id="bundles">
<path id="unit.test.bundles">
<pathelement location="../org.springframework.instrument"/>
<pathelement location="../org.springframework.instrument.classloading"/>
<pathelement location="../org.springframework.asm"/>
<pathelement location="../org.springframework.instrument.tomcat"/>
<pathelement location="../org.springframework.core"/>
<pathelement location="../org.springframework.expression"/>
<pathelement location="../org.springframework.beans"/>
@@ -13,16 +12,23 @@
<pathelement location="../org.springframework.transaction"/>
<pathelement location="../org.springframework.oxm"/>
<pathelement location="../org.springframework.jms"/>
<pathelement location="../org.springframework.aspects"/>
<pathelement location="../org.springframework.jdbc"/>
<pathelement location="../org.springframework.web"/>
<pathelement location="../org.springframework.orm"/>
<pathelement location="../org.springframework.context.support"/>
<pathelement location="../org.springframework.aspects"/>
<pathelement location="../org.springframework.web.servlet"/>
<pathelement location="../org.springframework.web.portlet"/>
<pathelement location="../org.springframework.test"/>
<pathelement location="../org.springframework.spring-library"/>
<pathelement location="../org.springframework.web.struts"/>
</path>
<path id="bundles">
<pathelement location="../org.springframework.spring-parent"/>
<pathelement location="../org.springframework.asm"/>
<path refid="unit.test.bundles" />
<pathelement location="../org.springframework.integration-tests"/>
<pathelement location="../org.springframework.spring-library"/>
</path>
<property file="${basedir}/../build.properties"/>
@@ -31,7 +37,7 @@
<import file="${basedir}/publish-documentation.xml"/>
<import file="${basedir}/../spring-build/multi-bundle/default.xml"/>
<target name="precommit" depends="clean,clean-integration,test"/>
<target name="precommit" depends="clean, clean-integration, test"/>
<presetdef name="javadoc.links">
<javadoc>
-130
View File
@@ -1,130 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="generate-poms" xmlns:ivy="antlib:org.apache.ivy.ant">
<property file="${basedir}/../build.properties"/>
<import file="${basedir}/../spring-build/multi-bundle/default.xml"/>
<path id="modules-to-process">
<pathelement location="../org.springframework.instrument"/>
<pathelement location="../org.springframework.instrument.classloading"/>
<pathelement location="../org.springframework.asm"/>
<pathelement location="../org.springframework.core"/>
<pathelement location="../org.springframework.expression"/>
<pathelement location="../org.springframework.beans"/>
<pathelement location="../org.springframework.aop"/>
<pathelement location="../org.springframework.context"/>
<pathelement location="../org.springframework.transaction"/>
<pathelement location="../org.springframework.oxm"/>
<pathelement location="../org.springframework.jms"/>
<pathelement location="../org.springframework.aspects"/>
<pathelement location="../org.springframework.jdbc"/>
<pathelement location="../org.springframework.web"/>
<pathelement location="../org.springframework.orm"/>
<pathelement location="../org.springframework.context.support"/>
<pathelement location="../org.springframework.web.servlet"/>
<pathelement location="../org.springframework.web.portlet"/>
<pathelement location="../org.springframework.test"/>
</path>
<condition property="maven.extension" value=".bat" else="">
<os family="windows"/>
</condition>
<property name="mvn.exe" value="mvn${maven.extension}"/>
<target name="test">
<echo message="pom version = ${project.version}"/>
</target>
<target name="generate-pom" depends="ivy.init">
<all-bundles target="do-generate-pom" buildpathRef="modules-to-process"/>
</target>
<target name="generate-pom-test">
<all-bundles target="do-generate-pom-test" buildpathRef="modules-to-process"/>
</target>
<target name="do-generate-pom" depends="ivy.init">
<delete file="pom.xml" quiet="true"/>
<delete file="central-pom.xml" quiet="true"/>
<ivy:makepom ivyfile="ivy.xml" pomfile="pom.xml">
<mapping conf="compile" scope="compile"/>
<mapping conf="test" scope="test"/>
<mapping conf="provided" scope="provided"/>
<mapping conf="runtime" scope="runtime"/>
</ivy:makepom>
<xmlproperty file="../org.springframework.spring-library/pom.xml"/>
<replaceregexp file="pom.xml"
match="&lt;version>.*?&lt;/version>"
replace="&lt;version>@project-version@&lt;/version>" />
<exec executable="${mvn.exe}" failonerror="true">
<arg line="org.springframework.build.repository:org.springframework.build.repository.maven:create-central"/>
</exec>
<move file="pom.xml" tofile="pom-bundle.xml"/>
<move file="central-pom.xml" tofile="pom.xml"/>
<replace file="pom.xml">
<replacetoken><![CDATA[ <version>@project-version@</version>]]></replacetoken>
<replacevalue><![CDATA[ <version>@project-version@</version>
<parent>
<groupId>org.springframework</groupId>
<artifactId>spring-parent</artifactId>
<relativePath>../org.springframework.spring-parent</relativePath>
<version>@project-version@</version>
</parent>
]]></replacevalue>
</replace>
<replace file="pom.xml" token="@project-version@" value="${project.version}"/>
<replace file="pom.xml" token="latest.integration" value="${project.version}"/>
<fixcrlf srcDir="."
eol="lf"
eof="remove"
includes="pom.xml"/>
</target>
<target name="remove-unresolved-references">
<!-- TODO in spring-context these are only found in S2 bundle repo, not maven central -->
<replace file="pom.xml">
<replacetoken><![CDATA[<dependency>
<groupId>com.oracle.oc4j</groupId>
<artifactId>oracle.classloader</artifactId>
<version>10.1.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.enterprise</groupId>
<artifactId>com.sun.enterprise.loader</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
]]></replacetoken>
<replacevalue><![CDATA[]]></replacevalue>
</replace>
</target>
<target name="do-generate-pom-test">
<exec executable="${mvn.exe}" failonerror="true">
<env key="MAVEN_TERMINATE_CMD" value="on" />
<arg line="-P stage,fast install"/>
</exec>
</target>
</project>
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="package-bundle">
<import file="publish-maven.xml"/>
<target name="package" depends="ivy.init">
<dist-jar/>
<src-jar/>
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="package-library">
<import file="publish-maven.xml"/>
<target name="package" depends="ivy.init">
<dist-jar/>
</target>
+12 -8
View File
@@ -22,9 +22,14 @@
<all-bundles target="doc" buildpathRef="doc.projects"/>
<delete>
<fileset dir="${basedir}/../spring-framework-reference" includes="**/*.zip"/>
</delete>
<all-bundles target="package" buildpathRef="doc.projects">
<property name="package.output.dir" value="${package.output.dir}"/>
</all-bundles>
<!-- Reference Document END-->
<copy todir="${package.output.dir}">
@@ -36,7 +41,6 @@
<exclude name="*/target/**"/>
<exclude name="integration-repo/**"/>
<exclude name="ivy-cache/**"/>
<!--exclude name="ivy-cache/repository/org.apache.velocity/org.apache.velocity.docbookframework.dist/**"/-->
<exclude name="spring-build/lib/docbook/**" />
<exclude name="**/*OLD*/**"/>
</fileset>
@@ -51,19 +55,19 @@
<zip destfile="${package.output.file}">
<zipfileset dir="${package.dir}">
<exclude name="${package.basename}/docs/**"/>
<exclude name="${package.basename}/projects/ivy-cache/**"/>
</zipfileset>
</zip>
<zip destfile="${artifacts.dir}/${package.basename}-with-docs.zip">
<zipfileset dir="${package.dir}">
<exclude name="${package.basename}/projects/ivy-cache/**"/>
</zipfileset>
<zipfileset dir="${package.dir}"/>
</zip>
<!--zip destfile="${artifacts.dir}/${package.basename}-with-dependencies.zip">
<zipfileset dir="${package.dir}"/>
</zip-->
<zip destfile="${artifacts.dir}/${package.basename}-dependencies.zip">
<zipfileset dir="${basedir}/../ivy-cache/repository">
<exclude name="org.apache.velocity/org.apache.velocity.docbookframework.dist/**"/>
</zipfileset>
</zip>
</target>
</project>
-100
View File
@@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
This POM cannot be used to build Spring; it is a work in progress and should only be used as
part of a Maven repository upload bundle using artifacts created by the spring build system.
-->
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<packaging>pom</packaging>
<version>3.0.0.BUILD-SNAPSHOT</version>
<name>Spring Framework</name>
<description>Spring is a layered Java/J2EE application platform, based on code published in Expert
One-on-One J2EE Design and Development by Rod Johnson (Wrox, 2002). </description>
<url>http://www.springframework.org</url>
<issueManagement>
<system>JIRA</system>
<url>http://jira.springframework.org/browse/SPR</url>
</issueManagement>
<ciManagement>
<system>Bamboo</system>
<url>https://build.springframework.org/browse/SPR</url>
</ciManagement>
<inceptionYear>2003</inceptionYear>
<organization>
<name>SpringSource</name>
<url>http://www.springsource.com</url>
</organization>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<url>https://fisheye.springframework.org/browse/spring-framework</url>
<connection>scm:svn:https://src.springframework.org/svn/spring-framework/trunk</connection>
<developerConnection>scm:svn:https://src.springframework.org/svn/spring-framework/trunk</developerConnection>
</scm>
<mailingLists>
<mailingList>
<name> Spring Forum
</name>
<post>http://forum.springframework.org</post>
<archive>http://forum.springframework.org</archive>
</mailingList>
</mailingLists>
<modules>
<module>../org.springframework.spring-parent</module>
<module>../org.springframework.instrument</module>
<module>../org.springframework.instrument.classloading</module>
<module>../org.springframework.asm</module>
<module>../org.springframework.core</module>
<module>../org.springframework.expression</module>
<module>../org.springframework.beans</module>
<module>../org.springframework.aop</module>
<module>../org.springframework.context</module>
<module>../org.springframework.transaction</module>
<module>../org.springframework.oxm</module>
<module>../org.springframework.jms</module>
<module>../org.springframework.aspects</module>
<module>../org.springframework.jdbc</module>
<module>../org.springframework.web</module>
<module>../org.springframework.orm</module>
<module>../org.springframework.context.support</module>
<module>../org.springframework.web.servlet</module>
<module>../org.springframework.web.portlet</module>
<module>../org.springframework.test</module>
</modules>
<profiles>
<profile>
<id>staging</id>
<distributionManagement>
<site>
<id>staging</id>
<url>file:///${user.dir}/target/staging</url>
</site>
<repository>
<id>staging</id>
<url>file:///${user.dir}/target/staging</url>
</repository>
<snapshotRepository>
<id>staging</id>
<url>file:///${user.dir}/target/staging</url>
</snapshotRepository>
</distributionManagement>
</profile>
</profiles>
</project>
-95
View File
@@ -1,95 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="publish-maven-central-only-pom" xmlns:maven="antlib:org.apache.maven.artifact.ant">
<description>
This build file publishes to a maven repository and two ways.
1. Publish jar, source-jar, and pom artifacts.
2. Publish only the pom artifact.
The additional complexity in the implementation is due to a bug in the maven ant tasks version 2.0.8 that
prevents deploying to a local file repository on windows.
</description>
<condition property="is.windows" value="windows">
<os family="windows"/>
</condition>
<!-- top level targets -->
<target name="publish-maven-central-only-pom-artifacts" depends="publish-central-only-pom-windows,publish-central-only-pom-unix">
</target>
<target name="publish-maven-central-code-artifacts" depends="publish-central-windows,publish-code-unix">
</target>
<target name="publish-maven-milestone-only-pom-artifacts" depends="maven.init">
<maven:deploy>
<remoteRepository url="s3://${publish.bucket}/maven/bundles/${adjusted.release.type}">
<authentication username="${accessKey}" passphrase="${secretKey}"/>
</remoteRepository>
<pom file="${local.pom.output.file}"/>
</maven:deploy>
</target>
<target name="publish-maven-milestone-code-artifacts" depends="maven.init">
<maven:deploy file="${jar.output.file}">
<remoteRepository url="s3://${publish.bucket}/maven/bundles/${adjusted.release.type}">
<authentication username="${accessKey}" passphrase="${secretKey}"/>
</remoteRepository>
<pom file="${pom.output.file}"/>
<attach file="${source-jar.output.file}" classifier="sources"/>
</maven:deploy>
</target>
<target name="install-pom" depends="maven.init">
<maven:install>
<pom file="${local.pom.output.file}"/>
</maven:install>
</target>
<!-- Supporting targets -->
<!-- POM only deployment -->
<target name="publish-central-only-pom-windows" depends="maven.init" if="is.windows">
<maven:deploy>
<!-- Due to http://jira.codehaus.org/browse/MANTTASKS-103 in 2.0.8 on windows, fixed in 2.0.9 -->
<!-- Assuming using local file, value of variable should be of the form L:\temp\maven-repo-test -->
<remoteRepository id="localDisk" url="file:${maven.central.repository}"/>
<pom file="${local.pom.output.file}"/>
</maven:deploy>
</target>
<target name="publish-central-only-pom-unix" depends="maven.init" unless="is.windows">
<maven:deploy>
<remoteRepository url="${maven.central.repository}"/>
<pom file="${local.pom.output.file}"/>
</maven:deploy>
</target>
<!-- jar, source-jar and POM deployment -->
<target name="publish-central-windows" depends="maven.init">
<maven:deploy file="${jar.output.file}">
<!-- Due to http://jira.codehaus.org/browse/MANTTASKS-103 in 2.0.8 on windows, fixed in 2.0.9 -->
<!-- Assuming using local file, value of variable should be of the form L:\temp\maven-repo-test -->
<remoteRepository id="localDisk" url="file:${maven.central.repository}"/>
<pom file="${local.pom.output.file}"/>
<attach file="${source-jar.output.file}" classifier="sources"/>
</maven:deploy>
</target>
<target name="publish-code-unix" depends="maven.init" unless="is.windows">
<maven:deploy file="${jar.output.file}">
<remoteRepository url="${maven.central.repository}"/>
<pom file="${local.pom.output.file}"/>
<attach file="${source-jar.output.file}" classifier="sources"/>
</maven:deploy>
</target>
</project>
+6 -6
View File
@@ -7,7 +7,7 @@
<target name="publish-package" depends="aws.init">
<checksum file="${package.output.file}" algorithm="sha1"/>
<checksum file="${artifacts.dir}/${package.basename}-with-docs.zip" algorithm="sha1"/>
<!--checksum file="${artifacts.dir}/${package.basename}-with-dependencies.zip" algorithm="sha1"/-->
<checksum file="${artifacts.dir}/${package.basename}-dependencies.zip" algorithm="sha1"/>
<aws:s3 accessKey="${accessKey}" secretKey="${secretKey}">
<upload bucketName="dist.${bucket.basename}" file="${package.output.file}"
@@ -30,15 +30,15 @@
<upload bucketName="dist.${bucket.basename}" file="${artifacts.dir}/${package.basename}-with-docs.zip.sha1"
toFile="${adjusted.release.type}/${project.key}/${package.basename}-with-docs.zip.sha1" publicRead="true"/>
<!--upload bucketName="dist.${bucket.basename}" file="${artifacts.dir}/${package.basename}-with-dependencies.zip"
toFile="${adjusted.release.type}/${project.key}/${package.basename}-with-dependencies.zip" publicRead="true">
<upload bucketName="dist.${bucket.basename}" file="${artifacts.dir}/${package.basename}-dependencies.zip"
toFile="${adjusted.release.type}/${project.key}/${package.basename}-dependencies.zip" publicRead="true">
<metadata name="project.name" value="Spring Framework"/>
<metadata name="release.type" value="${release.type}"/>
<metadata name="bundle.version" value="${bundle.version}"/>
<metadata name="package.file.name" value="${package.basename}-with-dependencies.zip"/>
<metadata name="package.file.name" value="${package.basename}-dependencies.zip"/>
</upload>
<upload bucketName="dist.${bucket.basename}" file="${artifacts.dir}/${package.basename}-with-dependencies.zip.sha1"
toFile="${adjusted.release.type}/${project.key}/${package.basename}-with-dependencies.zip.sha1" publicRead="true"/-->
<upload bucketName="dist.${bucket.basename}" file="${artifacts.dir}/${package.basename}-dependencies.zip.sha1"
toFile="${adjusted.release.type}/${project.key}/${package.basename}-dependencies.zip.sha1" publicRead="true"/>
</aws:s3>
</target>
</project>
-57
View File
@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="publish-spring-framework" xmlns:maven="antlib:org.apache.maven.artifact.ant">
<property file="${basedir}/../build.properties"/>
<import file="${basedir}/../spring-build/multi-bundle/default.xml"/>
<path id="modules-with-code-artifacts">
<pathelement location="../org.springframework.instrument"/>
<pathelement location="../org.springframework.instrument.classloading"/>
<pathelement location="../org.springframework.asm"/>
<pathelement location="../org.springframework.core"/>
<pathelement location="../org.springframework.expression"/>
<pathelement location="../org.springframework.beans"/>
<pathelement location="../org.springframework.aop"/>
<pathelement location="../org.springframework.context"/>
<pathelement location="../org.springframework.transaction"/>
<pathelement location="../org.springframework.oxm"/>
<pathelement location="../org.springframework.jms"/>
<pathelement location="../org.springframework.aspects"/>
<pathelement location="../org.springframework.jdbc"/>
<pathelement location="../org.springframework.web"/>
<pathelement location="../org.springframework.orm"/>
<pathelement location="../org.springframework.context.support"/>
<pathelement location="../org.springframework.web.servlet"/>
<pathelement location="../org.springframework.web.portlet"/>
<pathelement location="../org.springframework.test"/>
</path>
<path id="modules-with-only-pom-artifacts">
<pathelement location="../org.springframework.spring-library"/>
<pathelement location="../org.springframework.spring-parent"/>
</path>
<!-- for milestones -->
<target name="publish-maven-milestone" depends="publish-maven-milestone-only-pom">
<all-bundles target="publish-maven-milestone-code-artifacts" buildpathRef="modules-with-code-artifacts"/>
</target>
<target name="publish-maven-milestone-only-pom">
<all-bundles target="publish-maven-milestone-only-pom-artifacts" buildpathRef="modules-with-only-pom-artifacts"/>
</target>
<!-- for releases -->
<target name="publish-maven-central-release" depends="publish-maven-central-only-pom-release">
<all-bundles target="publish-maven-central-code-artifacts" buildpathRef="modules-with-code-artifacts"/>
</target>
<target name="publish-maven-central-only-pom-release">
<all-bundles target="publish-maven-central-only-pom-artifacts" buildpathRef="modules-with-only-pom-artifacts"/>
</target>
</project>
+355 -1
View File
@@ -3,9 +3,363 @@ SPRING FRAMEWORK CHANGELOG
http://www.springsource.org
Changes in version 3.0.0.M4 (2009-08-10)
Changes in version 3.0.4 (2010-08-19)
-------------------------------------
* support for Hibernate Core 3.6, Hibernate Validator 4.1, EclipseLink 2.1, EHCache 2.2
* OSGi manifest version range accepts EHCache 2.x as well
* added "contentLength()" method to Resource abstraction
* URL-based Resource variants introspect "last-modified" and "content-length" response headers
* refined "exists()" check for UrlResource (HEAD request) and ClassPathResource (URL resolution)
* ConversionService is able to deal with empty collections and nested collections (fixed regression)
* ConversionService properly handles nested Resource arrays in Map values (fixed regression)
* ConversionService does not accidentally use copy constructor for same type
* fixed double ConversionFailedException nesting for ObjectToObjectConverter invocations
* BeanWrapper preserves annotation information for individual array/list/map elements
* Spring's constructor resolution consistently finds non-public multi-arg constructors
* revised constructor argument caching, avoiding a race condition for converted argument values
* SpEL passes full collection type context (generics, annotations) to ConversionService
* SpEL 'select last' operator now works consistently with maps
* BeanWrapper/DataBinder's "autoGrowNestedPaths" works for Maps as well
* fixed concurrency issue in TypedStringValue, showing for nested typed Maps in prototype beans
* fixed WeakReferenceMonitor to never stop its monitoring thread if an entry has been registered
* fixed CronTrigger to correctly parse month parts expressed as numbers (1-12 instead of 0-11)
* TaskExecutorFactoryBean (as used by task:executor) exposes full ThreadPoolTaskExecutor type
* JmsResourceHolder does not ignore IllegalStateException from locally synchronized transaction
* fixed JMS CachingConnectionFactory to correctly cache a producer without fixed destination as well
* DefaultMessageListenerContainer triggers Session commit even if no message has been received
* DefaultMessageListenerContainer supports client id setting even for non-shared Connections
* Spring's MessageEndpointFactory classes are now JCA 1.6 compliant as well
* AbstractJaxWsServiceExporter supports "bindingType" bean property, overriding @BindingType
* AbstractJaxWsServiceExporter supports "webServiceFeatures" bean property on JAX-WS 2.2
* JaxWsPortProxyFactoryBean takes "wsdlDocumentUrl", "namespaceUri" etc defaults from @WebService
* Jaxb2Marshaller's "marshallerProperties" Map accepts any value type
* SpringTemplateLoader for FreeMarker supports last-modified timestamp through Resource abstraction
* HibernateJpaDialect correctly closes borrowed connections even for nested JDBC executions
* DefaultJdoDialect supports JDO 3.0 query timeout facility (as supported by DataNucleus 2.1)
* transaction names based on method id from most specific method (target class instead of interface)
* added "validationMessageSource" to LocalValidatorFactoryBean, for Spring-based validation messages
* Spring field error arguments include actually declared annotation attributes in alphabetical order
* JSR-303 Pattern message resolvable through Spring MessageSource (despite special characters)
* DispatcherServlet applies default view name translation to error views as well
* mvc:annotation-driven reliably detects JSR-303 and JAXB2 in an OSGi environment as well
* revised @MVC handler method resolution with respect to handler methods on generic interfaces
* @MVC handler methods reliably resolve MultipartRequest arguments with HiddenHttpMethodFilter
* WebDataBinder and @MVC request params detect and introspect MultipartFile arrays as well
* fixed @PathVariable regression in combination with ConversionService usage on DataBinder
* @CookieValue returns decoded cookie value in a Servlet environment (analogous to @RequestParam)
* MVC HandlerExceptionResolvers prevent caching for exception views if preventResponseCaching=true
* @ExceptionHandler works for inherited method and CGLIB proxies on Portlet controllers as well
* Portlet @MVC's implicit render model will be updated at the end of the event phase
* Portlet AbstractController consistently uses session mutex if "synchronizeOnSession" is active
* PortletWrappingController supports Portlet 2.0 resource and event requests as well
* fixed JSP EvalTag to render null result as empty String instead of "null" String
* JSP EvalTag resolves "@myBeanName" references in expressions against the WebApplicationContext
* added support for static resource serving: ResourceHttpRequestHandler, mvc:resources
* revised DispatcherServlet's last-modified handling to properly work with scoped controllers
* MockMultipartHttpServletRequest pre-defines method "POST" and content type "multipart/form-data"
Changes in version 3.0.3 (2010-06-15)
-------------------------------------
* Spring autodetects JodaTime 1.3 or higher (as required), ignoring older JodaTime versions
* clarified that Spring's Jackson support requires Jackson 1.3 or higher
* JPA 2.0 support tested and supported with Hibernate 3.5.2 and OpenJPA 2.0.0 GA as well
* revised VFS support for Spring's component scanning to work on JBoss AS 6.0.0 M3 as well
* fixed URIEditor's URI construction to consider fragment as well
* added default InputSourceEditor for SAX InputSource construction with a URL String as system id
* CachedIntrospectionResults only caches GenericTypeAwarePropertyDescriptors if fully safe
* revised BeanWrapper's exception wrapping to consistently handle ConversionExceptions
* DefaultListableBeanFactory checks for alias circle on registerAlias (avoiding endless loop)
* ConversionService is able to apply Converters to interface-based array elements
* ConversionService fully supports conversion from String to MediaType now (through 'valueOf')
* revised exception handling in ObjectToObjectConverter, avoiding InvocationTargetExceptions
* a context ConversionService is able to override an ApplicationContext's resource editors
* refined LifecycleProcessor exception handling, properly wrapping a start exception from a bean
* revised DefaultLifecycleProcessor's handling of circular dependencies to avoid stack overflow
* fixed constructor argument caching for prototypes with multiple constructor matches
* specific detection of CGLIB subclasses in order to properly handle CGLIB interfaces
* registerDependentBean resolves to the canonical bean name in order to handle alias references
* fixed registerResolvableDependency mechanism to correctly handle non-serializable factory objects
* added "expose-proxy" attribute to aop namespace (enforcing AopContext proxy exposure with CGLIB)
* revised AbstractInterceptorDrivenBeanDefinitionDecorator for further alignment with auto-proxying
* BeanDefinitionVisitor/PropertyPlaceholderConfigurer finds and resolves values in arrays as well
* property placeholders can deal with nested expressions which happen to use the same suffix
* SpEL's Elvis operator is able to deal with #{${myProp}?:defaultValue} case if myProp is empty
* introduced EmbeddedValueResolverAware callback interface for convenient placeholder resolution
* @Transactional qualifier value matches against @Qualifier annotations on @Bean methods as well
* setTransactionIsolation on JDBC Connection only called when actually necessary (for PostgreSQL)
* added limit for parsed SQL cache to NamedParameterJdbcTemplate (default is 256; configurable)
* CachingConnectionFactory detects destination equality for WebSphere MQ as well (using toString)
* DefaultPersistenceUnitManager's getPersistenceUnitInfo method has 2.5 compatible signature again
* DefaultMessageListenerContainer reacts to maxConcurrentConsumers reduction for long-lived tasks
* added "idleConsumerLimit" bean property to DefaultMessageListenerContainer (default is 1)
* AsyncAnnotationBeanPostProcessor consistently adds @Async processing as first Advisor in the chain
* ScheduledTaskRegistrar (as used for @Scheduled processing) properly shuts down its default executor
* CronTrigger defensively protects itself against accidental re-fires if a task runs too early
* MailSendException includes all messages as failed messages in case of a connect failure
* added support for JAX-WS 2.1 WebServiceFeatures to JaxWsPortClientInterceptor/PortProxyFactoryBean
* added XmlAwareFormHttpMessageConverter, taking over the 3.0.2-introduced XML multipart support
* ServletContextResourcePatternResolver handles "/WEB-INF/lib/*.jar!/**/context.xml" style patterns
* fixed MVC mapping regression for servlet url-pattern "/" case on servers other than WebSphere
* MVC mappings properly apply even to welcome file entries that forward to a DispatcherServlet
* fixed @ExceptionHandler resolution in case of multiple matches at different inheritance levels
* revised Portlet SessionStatus.setComplete() to avoid re-exposure of attributes in render phase
* shortened Portlet MVC's implicit model render parameter name to "implicitModel"
* added convenient "checkRefresh" bean property to TilesConfigurer
* TilesConfigurer's "definitionsFactoryClass" property applies common Tiles DefinitionsFactory setup
* JSP FormTag calculates proper default form action even when using a rewrite filter on WebSphere
* JSP HiddenInputTag allows for using common HTML attributes (equivalent to LabelTag)
* fixed JSP ErrorsTag to avoid invalid "*.errors" id, using form object name as id prefix instead
* fixed JSP SelectTag's support for rendering enum constants
* JSP Radiobutton/CheckboxesTag utilizes PropertyEditor/ConversionService for label rendering
* MockHttpServletResponse supports multiple includes
Changes in version 3.0.2 (2010-04-02)
-------------------------------------
* fixed cross-module version ranges in OSGi manifests
* fixed contents of org.springframework.web.struts jar
* upgraded to Hibernate Validator 4.0.2 and Jackson 1.4.2
* compatibility with Hibernate 3.5 final (native and also as a JPA 2.0 provider)
* compatibility with OpenJPA 2.0 (support for JPA 2.0 persistence.xml versioning)
* compatibility with Hessian 4.0 (in terms of exception propagation)
* compatibility with JasperReports 3.x (in terms of resource management)
* restored full compatibility with Servlet 2.4 containers on all VMs
* PropertyEditor lookup fallback works on Google App Engine as well
* fixed TypeDescriptor/MethodParameter toString for all cases in debug log messages
* widened AbstractFactoryBean's "getObjectType" signature to return any Class as well
* BeanPostProcessors are allowed to return a null bean value in the middle of the chain
* autowire="byType" ignores parameter name when choosing a primary bean, as defined
* ObjectFactoryCreatingFactoryBean creates a serializable ObjectFactory reference
* added ProviderCreatingFactoryBean, exposing a serializable JSR-330 Provider reference
* "conversionService" bean will be ignored if it is not of type ConversionService
* revised AbstractInterceptorDrivenBeanDefinitionDecorator for alignment with auto-proxying
* SimpleJdbcCall's "returningResultSet" accepts any plain RowMapper now
* added public "validateDatabaseSchema" method to Hibernate LocalSessionFactoryBean
* HibernateJpaDialect borrows JDBC Connection on demand (supporting aggressive release)
* JCA listener containers delegate to wrapped Transaction handle (for Geronimo compatibility)
* @Transactional qualifiers work in unit tests as well (TransactionalTestExecutionListener)
* @Value processing works in test instances (using the test context framework) as well now
* @DirtiesContext is now inherited for class-level usage
* NativeWebRequest detects native MultipartRequest when decorated by HiddenHttpMethodFilter
* WebRequestInterceptor exposes HttpServletResponse through NativeWebRequest (after downcast)
* WebContentInterceptor does not restrict HTTP methods by default anymore
* WebApplicationObjectSupport's initServletContext will be called only once in any scenario
* DispatcherPortlet passes handler instance into HandlerExceptionResolver for action exception
* DispatcherPortlet applies preHandleRender callbacks in case of action exception as well
* UrlPathHelper cuts off trailing servlet-path slashes for root mappings (on WebSphere)
* introduced support for HttpEntity and ResponseEntity wrappers, adding context to body values
* fixed DataBinder's conversion error handling for direct field access with ConversionService
* @InitBinder methods support all applicable Spring 3.0 parameter annotations as well
* fixed @RequestParam(required=false) regression for @InitBinder methods
* @ExceptionHandler methods consistently receive original exception
* fixed indexed property binding regression in form tag library
* fixed @Configurable issue with null bean name
Changes in version 3.0.1 (2010-02-18)
-------------------------------------
* upgraded to AspectJ 1.6.8
* full support for JPA 2.0 persistence schema and PersistenceUnitInfo SPI
* support for JPA PersistenceContext/Unit injection on Google App Engine
* support for Hibernate 3.5 (as native Hibernate API and as JPA 2.0 provider)
* support for Tiles 2.2.1 (preserving compatibility with Tiles 2.1.2 and above)
* consistent treatment of unresolvable placeholders for Resource and Resource array properties
* ConversionFailedException exDLBFposes offending value through public "getValue()" method
* fixed BeanFactory's "getBeansWithAnnotation" to ignore beans with non-determinable type
* widened FactoryBean's "getObjectType" signature to return any Class (Class<?>)
* do not ever consider Object as a candidate type for autowiring by type (autowire="byType")
* BeanDefinitionReader and ClassPath/FileSystemXmlApplicationContext use varargs where possible
* introduced BeanDefinitionRegistryPostProcessor extension to BeanFactoryPostProcessor
* @Configuration classes support definition of BeanFactoryPostProcessor beans
* component-scan's scoped-proxy attribute applies to scope-annotated singleton beans as well
* generic ApplicationListener event type gets detected through AOP proxy as well
* ApplicationListeners will only be executed once per event (even for scripted objects)
* ApplicationListeners will get detected lazily as well (e.g. on @Bean's concrete result)
* inner bean ApplicationListeners will be invoked through their proxy (if any)
* fixed SimpleApplicationEventMulticaster's retriever caching to allow for proper removal
* context-specific "conversionService" bean may refer to annotation-configured converter beans
* refined DefaultLifecycleProcessor's start/stop logging and stop exception handling
* DefaultLifecycleProcessor allows for overriding specific hooks in subclasses
* BeanNameAutoProxyCreator detects alias matches for specified bean names
* proxies with AspectJ pointcuts are fully serializable within a BeanFactory now
* SharedEntityManagerCreator's EntityManager proxies are fully serializable now
* Query call chaining works with shared EntityManager proxy outside of transaction as well
* TransactionInterceptor is able to serialize "transactionManagerBeanName" as well
* non-matching @Transactional qualifier value will lead to IllegalStateException
* fixed WebSphereUowTransactionManager regression: correctly roll back in case of exception
* JndiObjectFactoryBean explicitly only chooses public interfaces as default proxy interfaces
* added vararg variants of query methods to JdbcTemplate (as known from SimpleJdbcTemplate)
* MBeanClientInterceptor/MBeanProxyFactoryBean understands CompositeData/TabularData arrays
* added "workManagerMBeanName" property to JBossWorkManagerTaskExecutor
* task:executor's id value is now used as thread name prefix of ThreadPoolTaskExecutor
* fixed @Scheduled processing to kick in once only even in an ApplicationContext hierarchy
* fixed MediaType's Comparable behavior to do a full comparison, aligned with equals behavior
* added "sortBySpecificity" method to MediaType, for typical use with accept header matching
* MimeMessageHelper encodes from, to, cc, bcc String addresses with given encoding as well
* changed HttpStatus.REQUEST_TOO_LONG constant to REQUEST_ENTITY_TOO_LARGE
* relaxed generic Class declaration in HttpMessageConverter's canRead/canWrite/read signatures
* fixed "mvc:view-controller" to work in a fully isolated fashion on Spring Dynamic Modules
* DefaultRequestToViewNameTranslator strips trailing slashes as well (can also be turned off)
* @RequestParam/RequestHeader/CookieValue's defaultValue allows for declaring empty String
* @SessionAttributes works when used on an annotated controller interface with AOP proxying
* WebRequest is a resolvable dependency in Servlet/Portlet web application contexts
* revised JSP-based views to never fail when trying to set Servlet API forward attributes
* lenient evaluation of boolean 'true' attribute expressions in JSP form tag library
* added new spring:eval tag for evaluating SpEL expressions from JSP pages
* SpringBeanAutowiringSupport works in extra ClassLoaders as well (e.g. WebLogic JAX-WS)
Changes in version 3.0.0.GA (2009-12-16)
----------------------------------------
* component scanning autodetects the new EE 6 "javax.annotation.ManagedBean" stereotype
* updated JPA 2.0 support to the final spec (tested compatibility with EclipseLink 2.0 GA)
* full support for GlassFish V3 GA (includes component scanning and load-time weaving)
* upgraded to JRuby 1.4 (while remaining compatible with JRuby 1.1 and above)
* bean property names are matched leniently ("title" and "Title"; "ISBN" and "iSBN")
* bean properties of type enum array/collection can be populated with comma-separated String
* removed getBeansWithAnnotation(Class,boolean,boolean) method from ListableBeanFactory
* PropertyPlaceholderConfigurer is compatible with Spring 2.5 extensions (again)
* SmartLifecycle beans will get auto-started on demand even if marked as lazy-init
* MBeanExporter detects FactoryBean-exported resources independent from declaration order
* refactored SpelExpressionParser to accept SpelParserConfiguration object with boolean flags
* revised TypeDescriptor's valueOf and forObject factory methods with some level of caching
* revised GenericConverter's "getConvertibleTypes" signature to return Set of ConvertiblePair
* GenericConversionService prefers matches against inherited interfaces over superclasses
* renamed ConverterRegistry's addGenericConverter(GenericConverter) method to addConverter
* no default converters for Object-to-Map and Map-To-Object anymore
* default converter for String-to-Properties parsing only applies for actual Properties objects
* default ObjectToStringConverter only stringifies objects that indicate proper toString behavior
* added "converters" property to FormattingConversionServiceFactoryBean as well
* full support for formatters and formatting annotations on array/collection elements
* no default number formatter (relying on plain java.lang.Number parsing and rendering)
* no default formatters for Date/Calendar (requiring explicit use of @DateTimeFormat)
* BeanValidationPostProcessor runs in before-initialization phase (before init methods) by default
* removed MultipartRequest mixin interface again (avoiding a package dependency cycle)
* revised RestTemplate method signatures to accept Object values instead of just Strings
* revised path variable extraction to properly deal with dots in variable values (again)
* reintroduced createBinder template method in Servlet/Portlet AnnotationMethodHandlerAdapter
Changes in version 3.0.0.RC3 (2009-12-01)
-----------------------------------------
* prepared for Grails and ROO requirements
* restored compatibility with Apache CXF
* fixed bean definition import via "classpath*:" URLs
* added chaining-capable "add" method to MutablePropertyValues
* constructor arguments can be overridden by name in child bean definitions
* BeanDefinitions return isSingleton()=true by default again, with scope name empty
* init/destroy methods get processed in the order of declaration at each hierarchy level
* fixed lookup of LifecycleProcessor bean in a Spring Dynamic Modules environment
* refined lifecycle processing through introduction of startup/shutdown phases
* fixed transaction synchronization setup with TransactionAwareDataSourceProxy involved
* added support for Hibernate 3.3 RegionFactory cache SPI to LocalSessionFactoryBean
* JSR-303 SpringValidatorAdapter uses field name as first argument (analogous to bind errors)
* replaced DefaultConversionService with ConversionServiceFactory(Bean)
* revised FormatterRegistry interface and FormattingConversionServiceFactoryBean setup
* mvc:annotation-driven exposes default Validator and ConversionService as top-level beans
* mvc:annotation-driven registers applicable HttpMessageConverters by default, if available
* added interceptors support to mvc namespace, for path-based interceptor mappings
Changes in version 3.0.0.RC2 (2009-11-13)
-----------------------------------------
* updated to final versions of JSR-330 "javax.inject" and JSR-303 "javax.validation" APIs
* full compliance with the JSR-330 TCK (i.e. full compliance with the final specification)
* support for Hibernate Validator 4.0 GA (as the JSR-303 reference implementation)
* added support for load-time weaving in JBoss 5.x
* added support for recent EHCache 1.6 configuration properties to EHCacheFactoryBean
* added AnnotatedBeanDefinitionReader helper for programmatic registration of annotated classes
* added AnnotationConfig(Web)ApplicationContext for convenient registration/scanning of classes
* added GenericXmlApplicationContext with flexible configuration options for its XML support
* AbstractApplicationContext can also start up in case of system properties access failure
* internal MergedBeanDefinitionPostProcessors apply after all other post-processors
* inner beans detected as ApplicationListeners as well (only supported for inner singletons)
* child bean definition's scope attribute can be inherited from parent bean definition now
* introduced SmartLifecycle interface with auto-startup and shutdown order support
* introduced LifecycleProcessor delegate, customizable through "lifecycleProcessor" bean
* MessageListenerContainers and Quartz SchedulerFactoryBean start up on refresh instead of init
* added initialize-database tag to jdbc namespace for populating external data sources with data
* PathMatchingResourcePatternResolver leniently ignores non-existing root directories
* DefaultConversionService understands "on"/"off", "yes"/"no", "1"/"0" as boolean values
* CustomEditorConfigurer supports PropertyEditor instances again (with deprecation warning)
* revised MethodParameter's annotation accessor methods
* ClassUtils is now parameterized with Class<?> and Class<T> where appropriate
* DataBinder now accepts var-args to set allowed, disallowed, and required fields
* DataBinder auto-grows nested paths on traversal (avoiding NullValueInNestedPathException)
* fixed enum binding regression with WebRequestDataBinder (as used by @MVC data binding now)
* fixed FieldError to expose rejected input value as String value instead of as array
* JSR-303 Validator will only register validation failures if no binding failure happened
* ContentNegotiatingViewResolver works with ignoreAcceptHeader and defaultContentType as well
* added Spring MVC namespace, with convenient mvc:annotation-driven configuration element
* default number and datetime formatters configured when using the Spring MVC namespace
* full support for datetime formatting using the Joda Time library (automatically enabled)
* added convenient @NumberFormat and @DateTimeFormat annotations for declarative formatting
* implicit T.valueOf(S) and constructor T(S) lookup if no explicit S->T converter matches
* AbstractExcelView is compatible with Apache POI 3.0 as well as 3.5 now
* TilesConfigurer only sets up EL support if JSP 2.1 is present (for JSP 2.0 compatibility)
* re-introduced Struts 1.x support ("org.springframework.web.struts") in deprecated form
* deprecated scheduling support for JDK 1.3 Timer ("org.springframework.scheduling.timer")
* deprecated remoting support for JAX-RPC (in favor of JAX-WS)
Changes in version 3.0.0.RC1 (2009-09-25)
-----------------------------------------
* upgraded to CGLIB 2.2, AspectJ 1.6.5, Groovy 1.6.3, EHCache 1.6.2, JUnit 4.7, TestNG 5.10
* introduced early support for JSR-330 "javax.inject" annotations (for autowiring)
* introduced early support for JSR-303 Bean Validation (setup and MVC integration)
* added default editors for "java.util.Currency" and "java.util.TimeZone"
* refined PathMatchingResourcePatternResolver's treatment of non-readable directories
* PathMatchingResourcePatternResolver understands VFS resources (i.e. works on JBoss 5.x)
* revised AccessControlContext access from BeanFactory
* AbstractBeanDefinitionParser can deal with null return value as well
* PropertyOverrideConfigurer's "ignoreInvalidKeys" ignores invalid property names as well
* PropertyPlaceholderConfigurer supports "${myKey:myDefaultValue}" defaulting syntax
* BeanFactory's default type conversion falls back to String constructor on target type
* BeanFactory tries to create unknown collection implementation types via default constructor
* BeanFactory supports ObjectFactory as a dependency type for @Autowired and @Value
* BeanFactory supports JSR-330 Provider interface as a dependency type for @Inject
* BeanFactory prefers local primary bean to primary bean in parent factory
* protected @Autowired method can be overridden with non-annotated method to suppress injection
* private @Autowired methods with same signature will be called individually across a hierarchy
* @PostConstruct processed top-down (base class first); @PreDestroy bottom-up (subclass first)
* ConfigurationClassPostProcessor detect @Bean methods on registered plain bean classes as well
* support for default "conversionService" bean in an ApplicationContext
* MBeanServerFactoryBean returns JDK 1.5 platform MBeanServer for agent id "" (empty String)
* changed NamedParameter/SimpleJdbcOperations parameter signatures to accept any Map value type
* refined logging in JMS SingleConnectionFactory and DefaultMessageListenerContainer
* introduced "ui.format" package as an alternative to PropertyEditors for data binding
* @RequestMapping annotation now supported for annotated interfaces (and JDK proxies) as well
* @RequestParam and co support placeholders and expressions in their defaultValue attributes
* @Value expressions supported as MVC handler method arguments as well (against request scope)
* JSR-303 support for validation of @MVC handler method arguments driven by @Valid annotations
* refined response handling for @ExceptionHandler methods
* @ResponseStatus usage in handler methods detected by RedirectView
* all @SessionAttributes get exposed to the model before handler method execution
* @Event/ResourceMapping uniquely mapped to through event/resource id, even across controllers
* MultipartRequest is available as a mixin interface on (Native)WebRequest as well
* removed outdated "cacheJspExpressions" feature from ExpressionEvaluationUtils
* introduced common ErrorHandler strategy, supported by message listener container
* Jpa/JdoTransactionManager passes resolved timeout into Jpa/JdoDialect's beginTransaction
* HibernateJpaDialect applies timeout onto native Hibernate Transaction before begin call
* Spring's Hibernate support is now compatible with Hibernate 3.5 beta 1 as well
* Spring's JPA support is now fully compatible with JPA 2.0 as in EclipseLink 2.0.0.M7
* SpringJUnit4ClassRunner is now compatible with JUnit 4.5, 4.6, and 4.7
* SpringJUnit4ClassRunner once again supports collective timeouts for repeated tests
* deprecated @NotTransactional annotation for test classes in favor of @BeforeTransaction
Changes in version 3.0.0.M4 (2009-08-10)
----------------------------------------
* upgraded to JUnit 4.6, TestNG 5.9, and EasyMock 2.5.1
* updated all Spring Framework OSGI manifests to list unversioned imports explicitly
* relaxed several OSGi bundle dependencies (optional, extended version ranges)
+2 -2
View File
@@ -1,6 +1,6 @@
======================================================================
== NOTICE file corresponding to section 4 d of the Apache License, ==
== Version 2.0, for the Spring Web Flow distribution. ==
== Version 2.0, for the Spring Framework distribution. ==
======================================================================
This product includes software developed by
@@ -18,5 +18,5 @@
The names "Spring", "Spring Framework", and "Spring Web Flow" must
not be used to endorse or promote products derived from this
software without prior written permission. For written permission,
please contact rod.johnson@interface21.com or juergen.hoeller@interface21.com.
please contact enquiries@springsource.com.
+14 -12
View File
@@ -1,25 +1,27 @@
SPRING FRAMEWORK 3.0 M4 (August 2009)
-------------------------------------
SPRING FRAMEWORK 3.0.4 (August 2010)
------------------------------------
http://www.springframework.org
1. INTRODUCTION
This is the fourth milestone of Spring 3.0 which is scheduled for final release in Q3 2009.
It is nearly feature complete, with only very specific areas still being worked on for RC1.
Spring Framework 3.0 is the next generation of Spring: fully Java 5 based,
EL enabled, REST enabled, and with support for JSR-330 (Dependency
Injection) and JSR-303 (Bean Validation).
2. RELEASE NOTES
This release comes with complete reference documentation already. Consult the provided
javadoc for technical details of specific packages and classes.
This release comes with complete reference documentation. For further
details, consult the provided javadoc for specific packages and classes.
3. DISTRIBUTION JAR FILES
The Spring Framework module jar files can be found in the 'dist' directory. Note that
this release does not contain a 'spring.jar' file anymore, in contrast to previous Spring
generations. Furthermore, the jar file names follow bundle repository conventions now.
The Spring Framework module jar files can be found in the 'dist'
directory. Note that this release does not contain a 'spring.jar' file
anymore, in contrast to previous Spring generations. Furthermore, the jar
file names now follow bundle repository conventions.
4. GETTING STARTED
A Getting Started guide is to be provided in time for Spring 3.0 GA. For the time being,
please consult the blog examples at http://blog.springsource.com as well as the sections
of interest in the reference documentation.
Please consult the blog examples at http://blog.springsource.com as well
as sections of interest in the reference documentation. Sample
applications and related material are provided as separate downloads.
+10 -6
View File
@@ -1,5 +1,12 @@
version=3.0.0
release.type=integration
version=3.0.4
# osgi ranges
spring.osgi.range.nq=${version:[=.=.=, =.=.+1)}
spring.osgi.range="${spring.osgi.range.nq}"
aj.osgi.range="[1.5.4, 2.0.0)"
#
release.type=release
build.stamp=RELEASE
natural.name=spring-framework
project.name=Spring Framework
project.key=SPR
@@ -7,7 +14,7 @@ ivy.cache.dir=${basedir}/../ivy-cache
integration.repo.dir=${basedir}/../integration-repo
javadoc.exclude.package.names=org/springframework/samples/**
javadoc.max.memory=256M
test.vm.args=-XX:MaxPermSize=128M
test.vm.args=-Xmx1024M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError
compiler.args=-enableJavadoc -warn:none
# For when releasing
@@ -21,6 +28,3 @@ compiler.args=-enableJavadoc -warn:none
# For development in trunk
#release.type=integration
#build.stamp=BUILD-SNAPSHOT
overwrite=true
ci.build=true
+6 -2
View File
@@ -1,2 +1,6 @@
org.testng.version=5.9.0
org.junit.version=4.6.0
#common dependency versions
aspectj.version=1.6.8.RELEASE
commons.pool.version=1.5.3
slf4j.version=1.5.6
org.testng.version=5.10.0
org.junit.version=4.7.0
+22 -21
View File
@@ -1,21 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="IVY_CACHE/org.aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-1.0.0.jar" sourcepath="/IVY_CACHE/org.aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-sources-1.0.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-2.5.1.jar" sourcepath="/IVY_CACHE/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-sources-2.5.1.jar"/>
<classpathentry kind="var" path="IVY_CACHE/com.jamonapi/com.springsource.com.jamonapi/2.4.0/com.springsource.com.jamonapi-2.4.0.jar" sourcepath="/IVY_CACHE/com.jamonapi/com.springsource.com.jamonapi/2.4.0/com.springsource.com.jamonapi-sources-2.4.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-2.1.3.jar" sourcepath="/IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-sources-2.1.3.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar" sourcepath="/IVY_CACHE/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-sources-1.2.15.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-4.6.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-sources-4.6.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.pool/1.3.0/com.springsource.org.apache.commons.pool-1.3.0.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.pool/1.3.0/com.springsource.org.apache.commons.pool-sources-1.3.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.3.RELEASE/com.springsource.org.aspectj.weaver-1.6.3.RELEASE.jar" sourcepath="IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.3.RELEASE/com.springsource.org.aspectj.weaver-sources-1.6.3.RELEASE.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.beans"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.core"/>
<classpathentry kind="lib" path="/org.springframework.asm/target/artifacts/org.springframework.asm.jar" sourcepath="/org.springframework.asm/target/artifacts/org.springframework.asm-sources.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="IVY_CACHE/org.aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-1.0.0.jar" sourcepath="/IVY_CACHE/org.aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-sources-1.0.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-2.5.1.jar" sourcepath="/IVY_CACHE/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-sources-2.5.1.jar"/>
<classpathentry kind="var" path="IVY_CACHE/com.jamonapi/com.springsource.com.jamonapi/2.4.0/com.springsource.com.jamonapi-2.4.0.jar" sourcepath="/IVY_CACHE/com.jamonapi/com.springsource.com.jamonapi/2.4.0/com.springsource.com.jamonapi-sources-2.4.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.2.0/com.springsource.net.sf.cglib-2.2.0.jar" sourcepath="/IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-sources-2.1.3.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar" sourcepath="/IVY_CACHE/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-sources-1.2.15.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.7.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.pool/1.3.0/com.springsource.org.apache.commons.pool-1.3.0.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.pool/1.3.0/com.springsource.org.apache.commons.pool-sources-1.3.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.8.RELEASE/com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar" sourcepath="IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.8.RELEASE/com.springsource.org.aspectj.weaver-sources-1.6.8.RELEASE.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.beans"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.core"/>
<classpathentry kind="lib" path="/org.springframework.asm/target/artifacts/org.springframework.asm.jar" sourcepath="/org.springframework.asm/target/artifacts/org.springframework.asm-sources.jar"/>
<classpathentry kind="var" path="IVY_CACHE"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
+32 -122
View File
@@ -1,122 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="inheritedJdk" />
<orderEntry type="module" module-name="beans" />
<orderEntry type="module" module-name="core" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-1.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.aopalliance/com.springsource.org.aopalliance/1.0.0/com.springsource.org.aopalliance-sources-1.0.0.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.apache.commons/com.springsource.org.apache.commons.pool/1.4.0/com.springsource.org.apache.commons.pool-1.4.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.apache.commons/com.springsource.org.apache.commons.pool/1.4.0/com.springsource.org.apache.commons.pool-sources-1.4.0.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.aspectj/com.springsource.org.aspectj.weaver/1.6.2.RELEASE/com.springsource.org.aspectj.weaver-1.6.2.RELEASE.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.aspectj/com.springsource.org.aspectj.weaver/1.6.2.RELEASE/com.springsource.org.aspectj.weaver-sources-1.6.2.RELEASE.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/com.jamonapi/com.springsource.com.jamonapi/2.4.0/com.springsource.com.jamonapi-2.4.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/com.jamonapi/com.springsource.com.jamonapi/2.4.0/com.springsource.com.jamonapi-sources-2.4.0.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-2.1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-sources-2.1.3.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-sources-1.2.15.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-4.6.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-sources-4.6.0.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-2.5.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-sources-2.5.1.jar!/" />
</SOURCES>
</library>
</orderEntry>
</component>
<component name="copyright">
<Base>
<setting name="state" value="2" />
</Base>
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="inheritedJdk" />
<orderEntry type="module" module-name="beans" />
<orderEntry type="module" module-name="core" />
<orderEntry type="library" name="AOP Alliance" level="project" />
<orderEntry type="library" name="AspectJ" level="project" />
<orderEntry type="library" name="CGLIB" level="project" />
<orderEntry type="library" name="Commons Logging" level="project" />
<orderEntry type="library" name="Commons Pool" level="project" />
<orderEntry type="library" name="EasyMock" level="project" />
<orderEntry type="library" name="Jamon" level="project" />
<orderEntry type="library" name="JUnit" level="project" />
<orderEntry type="library" name="Log4j" level="project" />
</component>
<component name="copyright">
<Base>
<setting name="state" value="2" />
</Base>
</component>
</module>
+1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="org.springframework.aop">
<property file="${basedir}/../build.properties"/>
<property file="${basedir}/../build.versions"/>
<import file="${basedir}/../build-spring-framework/package-bundle.xml"/>
<import file="${basedir}/../spring-build/standard/default.xml"/>
</project>
+6 -5
View File
@@ -11,6 +11,7 @@
<configurations>
<include file="${spring.build.dir}/common/default-ivy-configurations.xml"/>
<conf name="commons-logging" extends="runtime" description="JARs needed to run with Commons Logging"/>
<conf name="aspectj" extends="runtime" description="JARs needed to run with AspectJ"/>
<conf name="bytecode-proxy" extends="runtime" description="JARs needed to run with CGLIB bytecode proxies"/>
<conf name="jamon" extends="runtime" description="JARs needed to run with JamonAPI"/>
@@ -24,17 +25,17 @@
<dependencies>
<dependency org="com.jamonapi" name="com.springsource.com.jamonapi" rev="2.4.0" conf="optional, jamon->compile"/>
<dependency org="net.sourceforge.cglib" name="com.springsource.net.sf.cglib" rev="2.1.3" conf="optional, bytecode-proxy->compile"/>
<dependency org="net.sourceforge.cglib" name="com.springsource.net.sf.cglib" rev="2.2.0" conf="optional, bytecode-proxy->compile"/>
<dependency org="org.aopalliance" name="com.springsource.org.aopalliance" rev="1.0.0" conf="compile->compile"/>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.logging" rev="1.1.1" conf="compile->compile"/>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.pool" rev="1.4.0" conf="optional, pooling->compile"/>
<dependency org="org.aspectj" name="com.springsource.org.aspectj.weaver" rev="1.6.3.RELEASE" conf="optional, aspectj->compile"/>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.logging" rev="1.1.1" conf="compile, commons-logging->compile"/>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.pool" rev="${commons.pool.version}" conf="optional, pooling->compile"/>
<dependency org="org.aspectj" name="com.springsource.org.aspectj.weaver" rev="${aspectj.version}" conf="optional, aspectj->compile"/>
<dependency org="org.springframework" name="org.springframework.beans" rev="latest.integration" conf="compile->compile"/>
<dependency org="org.springframework" name="org.springframework.core" rev="latest.integration" conf="compile->compile"/>
<!-- test dependencies -->
<dependency org="org.apache.log4j" name="com.springsource.org.apache.log4j" rev="1.2.15" conf="test->runtime"/>
<dependency org="org.easymock" name="com.springsource.org.easymock" rev="2.5.1" conf="test->compile"/>
<dependency org="org.junit" name="com.springsource.org.junit" rev="4.6.0" conf="test->runtime"/>
<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit.version}" conf="test->runtime"/>
<dependency org="org.springframework" name="org.springframework.asm" rev="latest.integration" conf="test->runtime"/>
</dependencies>
+5 -14
View File
@@ -4,12 +4,12 @@
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<packaging>jar</packaging>
<version>3.0.0.BUILD-SNAPSHOT</version>
<version>3.0.4.RELEASE</version>
<parent>
<groupId>org.springframework</groupId>
<artifactId>spring-parent</artifactId>
<relativePath>../org.springframework.spring-parent</relativePath>
<version>3.0.0.BUILD-SNAPSHOT</version>
<version>3.0.4.RELEASE</version>
</parent>
<dependencies>
@@ -22,7 +22,7 @@
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.1_3</version>
<version>2.2</version>
<optional>true</optional>
</dependency>
<dependency>
@@ -31,22 +31,16 @@
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>compile</scope>
</dependency>
<!-- common logging dependency is in spring-core -->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.4</version>
<version>1.5.3</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.2</version>
<optional>true</optional>
</dependency>
<dependency>
@@ -70,19 +64,16 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.6</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -34,6 +34,6 @@ public interface TargetClassAware {
* (typically a proxy configuration or an actual proxy).
* @return the target Class, or <code>null</code> if not known
*/
Class getTargetClass();
Class<?> getTargetClass();
}
@@ -1,5 +1,5 @@
/*<
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -39,7 +39,7 @@ public interface TargetSource extends TargetClassAware {
* target class.
* @return the type of targets returned by this {@link TargetSource}
*/
Class getTargetClass();
Class<?> getTargetClass();
/**
* Will all calls to {@link #getTarget()} return the same object?
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -18,6 +18,7 @@ package org.springframework.aop.aspectj;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
@@ -139,9 +140,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
private boolean argumentsIntrospected = false;
// The actual type is java.lang.reflect.Type,
// but for JDK 1.4 compatibility we use Object as the static type.
private Object discoveredReturningGenericType;
private Type discoveredReturningGenericType;
// Note: Unlike return type, no such generic information is needed for the throwing type,
// since Java doesn't allow exception types to be parameterized.
@@ -295,7 +294,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
return this.discoveredReturningType;
}
protected Object getDiscoveredReturningGenericType() {
protected Type getDiscoveredReturningGenericType() {
return this.discoveredReturningGenericType;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -69,21 +69,11 @@ public class AspectJAfterReturningAdvice extends AbstractAspectJAdvice implement
*/
private boolean shouldInvokeOnReturnValueOf(Method method, Object returnValue) {
Class type = getDiscoveredReturningType();
Object genericType = getDiscoveredReturningGenericType();
Type genericType = getDiscoveredReturningGenericType();
// If we aren't dealing with a raw type, check if generic parameters are assignable.
return (ClassUtils.isAssignableValue(type, returnValue) &&
(genericType == null || genericType == type || GenericTypeMatcher.isAssignable(genericType, method)));
}
/**
* Inner class to avoid a static JDK 1.5 dependency for generic type matching.
*/
private static class GenericTypeMatcher {
public static boolean isAssignable(Object genericType, Method method) {
return TypeUtils.isAssignable((Type) genericType, method.getGenericReturnType());
}
(genericType == null || genericType == type ||
TypeUtils.isAssignable(genericType, method.getGenericReturnType())));
}
}
@@ -16,6 +16,8 @@
package org.springframework.aop.aspectj;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Map;
@@ -75,27 +77,29 @@ import org.springframework.util.StringUtils;
public class AspectJExpressionPointcut extends AbstractExpressionPointcut
implements ClassFilter, IntroductionAwareMethodMatcher, BeanFactoryAware {
private static final Set<PointcutPrimitive> DEFAULT_SUPPORTED_PRIMITIVES = new HashSet<PointcutPrimitive>();
private static final Set<PointcutPrimitive> SUPPORTED_PRIMITIVES = new HashSet<PointcutPrimitive>();
static {
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.EXECUTION);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.ARGS);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.REFERENCE);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.THIS);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.TARGET);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.WITHIN);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ANNOTATION);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_WITHIN);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ARGS);
DEFAULT_SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_TARGET);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.EXECUTION);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.ARGS);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.REFERENCE);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.THIS);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.TARGET);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.WITHIN);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ANNOTATION);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_WITHIN);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ARGS);
SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_TARGET);
}
private static final Log logger = LogFactory.getLog(AspectJExpressionPointcut.class);
private final Map<Method, ShadowMatch> shadowMatchCache = new ConcurrentHashMap<Method, ShadowMatch>(32);
private transient PointcutParser pointcutParser;
private PointcutParser pointcutParser;
private transient PointcutExpression pointcutExpression;
private transient Map<Method, ShadowMatch> shadowMatchCache = new ConcurrentHashMap<Method, ShadowMatch>(32);
private Class pointcutDeclarationScope;
@@ -105,26 +109,12 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
private BeanFactory beanFactory;
private PointcutExpression pointcutExpression;
/**
* Create a new default AspectJExpressionPointcut.
*/
public AspectJExpressionPointcut() {
this(DEFAULT_SUPPORTED_PRIMITIVES);
}
/**
* Create a new AspectJExpressionPointcut with the given supported primitives.
* @param supportedPrimitives Set of {@link org.aspectj.weaver.tools.PointcutPrimitive}
* instances
*/
public AspectJExpressionPointcut(Set supportedPrimitives) {
this.pointcutParser =
PointcutParser.getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(
supportedPrimitives);
this.pointcutParser.registerPointcutDesignatorHandler(new BeanNamePointcutDesignatorHandler());
initializePointcutParser();
}
/**
@@ -134,7 +124,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
* @param paramTypes the parameter types for the pointcut
*/
public AspectJExpressionPointcut(Class declarationScope, String[] paramNames, Class[] paramTypes) {
this(DEFAULT_SUPPORTED_PRIMITIVES);
initializePointcutParser();
this.pointcutDeclarationScope = declarationScope;
if (paramNames.length != paramTypes.length) {
throw new IllegalStateException(
@@ -144,6 +134,13 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
this.pointcutParameterTypes = paramTypes;
}
private void initializePointcutParser() {
this.pointcutParser =
PointcutParser.getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(
SUPPORTED_PRIMITIVES);
this.pointcutParser.registerPointcutDesignatorHandler(new BeanNamePointcutDesignatorHandler());
}
/**
* Set the declaration scope for the pointcut.
@@ -215,10 +212,10 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
* <p>This method converts back to <code>&&</code> for the AspectJ pointcut parser.
*/
private String replaceBooleanOperators(String pcExpr) {
pcExpr = StringUtils.replace(pcExpr," and "," && ");
pcExpr = StringUtils.replace(pcExpr, " or ", " || ");
pcExpr = StringUtils.replace(pcExpr, " not ", " ! ");
return pcExpr;
String result = StringUtils.replace(pcExpr, " and ", " && ");
result = StringUtils.replace(result, " or ", " || ");
result = StringUtils.replace(result, " not ", " ! ");
return result;
}
/**
@@ -462,7 +459,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
* <p>Dynamic match tests for this matcher always return true,
* since the matching decision is made at the proxy creation time.
* For static match tests, this matcher abstains to allow the overall
* pointcut to match even when negation is used with the bean() poitncut.
* pointcut to match even when negation is used with the bean() pointcut.
*/
private class BeanNameContextMatcher implements ContextBasedMatcher {
@@ -528,4 +525,18 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
}
}
//---------------------------------------------------------------------
// Serialization support
//---------------------------------------------------------------------
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Rely on default serialization, just initialize state after deserialization.
ois.defaultReadObject();
// Initialize transient fields.
initializePointcutParser();
this.shadowMatchCache = new ConcurrentHashMap<Method, ShadowMatch>(32);
}
}
@@ -132,6 +132,11 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
return ProceedingJoinPoint.METHOD_EXECUTION;
}
public int getId() {
// TODO: It's just an adapter but returning 0 might still have side effects...
return 0;
}
public JoinPoint.StaticPart getStaticPart() {
return this;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -73,7 +73,7 @@ class RuntimeTestWalker {
catch (IllegalAccessException illegalAccessEx) {
// Famous last words... but I don't see how this can happen given the
// makeAccessible call above
throw new IllegalStateException("Unable to access ShadowMatchImpl.runtimeTest field.");
throw new IllegalStateException("Unable to access ShadowMatchImpl.residualTest field");
}
}
@@ -83,15 +83,18 @@ class RuntimeTestWalker {
* then it tests subtype sensitive vars.
*/
public boolean testsSubtypeSensitiveVars() {
return new SubtypeSensitiveVarTypeTestVisitor().testsSubtypeSensitiveVars(this.runtimeTest);
return (this.runtimeTest != null &&
new SubtypeSensitiveVarTypeTestVisitor().testsSubtypeSensitiveVars(this.runtimeTest));
}
public boolean testThisInstanceOfResidue(Class thisClass) {
return new ThisInstanceOfResidueTestVisitor(thisClass).thisInstanceOfMatches(this.runtimeTest);
return (this.runtimeTest != null &&
new ThisInstanceOfResidueTestVisitor(thisClass).thisInstanceOfMatches(this.runtimeTest));
}
public boolean testTargetInstanceOfResidue(Class targetClass) {
return new TargetInstanceOfResidueTestVisitor(targetClass).targetInstanceOfMatches(this.runtimeTest);
return (this.runtimeTest != null &&
new TargetInstanceOfResidueTestVisitor(targetClass).targetInstanceOfMatches(this.runtimeTest));
}
@@ -139,8 +142,7 @@ class RuntimeTestWalker {
try {
Field varTypeField = ReflectionVar.class.getDeclaredField("varType");
ReflectionUtils.makeAccessible(varTypeField);
Integer varTypeValue = (Integer) varTypeField.get(v);
return varTypeValue.intValue();
return (Integer) varTypeField.get(v);
}
catch (NoSuchFieldException noSuchFieldEx) {
throw new IllegalStateException("the version of aspectjtools.jar / aspectjweaver.jar " +
@@ -150,7 +152,7 @@ class RuntimeTestWalker {
catch (IllegalAccessException illegalAccessEx) {
// Famous last words... but I don't see how this can happen given the
// makeAccessible call above
throw new IllegalStateException("Unable to access ReflectionVar.varType field.");
throw new IllegalStateException("Unable to access ReflectionVar.varType field");
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -215,9 +215,10 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
*/
protected static class AspectJAnnotation<A extends Annotation> {
private static Map<Class,AspectJAnnotationType> annotationTypes = new HashMap<Class,AspectJAnnotationType>();
private static final String[] EXPRESSION_PROPERTIES = new String[] {"value", "pointcut"};
private static final String[] EXPRESSION_PROPERTIES = new String[]{"value", "pointcut"};
private static Map<Class, AspectJAnnotationType> annotationTypes =
new HashMap<Class, AspectJAnnotationType>();
static {
annotationTypes.put(Pointcut.class,AspectJAnnotationType.AtPointcut);
@@ -229,46 +230,48 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
}
private final A annotation;
private AspectJAnnotationType annotationType;
private final String expression;
private final String argNames;
public AspectJAnnotation(A aspectjAnnotation) {
this.annotation = aspectjAnnotation;
for (Class type : annotationTypes.keySet()) {
if (type.isInstance(this.annotation)) {
this.annotationType = annotationTypes.get(type);
break;
}
}
if (this.annotationType == null) {
throw new IllegalStateException("Unknown annotation type: " + this.annotation.toString());
}
private final AspectJAnnotationType annotationType;
private final String pointcutExpression;
private final String argumentNames;
public AspectJAnnotation(A annotation) {
this.annotation = annotation;
this.annotationType = determineAnnotationType(annotation);
// We know these methods exist with the same name on each object,
// but need to invoke them reflectively as there isn't a common interface.
try {
this.expression = resolveExpression();
this.argNames = (String)
this.annotation.getClass().getMethod("argNames", (Class[]) null).invoke(this.annotation);
this.pointcutExpression = resolveExpression(annotation);
this.argumentNames = (String) annotation.getClass().getMethod("argNames").invoke(annotation);
}
catch (Exception ex) {
throw new IllegalArgumentException(aspectjAnnotation + " cannot be an AspectJ annotation", ex);
throw new IllegalArgumentException(annotation + " cannot be an AspectJ annotation", ex);
}
}
private String resolveExpression() throws Exception {
private AspectJAnnotationType determineAnnotationType(A annotation) {
for (Class type : annotationTypes.keySet()) {
if (type.isInstance(annotation)) {
return annotationTypes.get(type);
}
}
throw new IllegalStateException("Unknown annotation type: " + annotation.toString());
}
private String resolveExpression(A annotation) throws Exception {
String expression = null;
for (String methodName : EXPRESSION_PROPERTIES) {
Method method;
try {
method = this.annotation.getClass().getDeclaredMethod(methodName);
method = annotation.getClass().getDeclaredMethod(methodName);
}
catch (NoSuchMethodException ex) {
method = null;
}
if (method != null) {
String candidate = (String) method.invoke(this.annotation);
String candidate = (String) method.invoke(annotation);
if (StringUtils.hasText(candidate)) {
expression = candidate;
}
@@ -286,11 +289,11 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
}
public String getPointcutExpression() {
return this.expression;
return this.pointcutExpression;
}
public String getArgNames() {
return this.argNames;
public String getArgumentNames() {
return this.argumentNames;
}
@Override
@@ -314,7 +317,7 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
if (annotation == null) {
return null;
}
StringTokenizer strTok = new StringTokenizer(annotation.getArgNames(), ",");
StringTokenizer strTok = new StringTokenizer(annotation.getArgumentNames(), ",");
if (strTok.countTokens() > 0) {
String[] names = new String[strTok.countTokens()];
for (int i = 0; i < names.length; i++) {
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2006 the original author or authors.
* Copyright 2002-2010 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,18 +58,13 @@ class InstantiationModelAwarePointcutAdvisorImpl
private String aspectName;
private Boolean isBeforeAdvice = null;
private Boolean isBeforeAdvice;
private Boolean isAfterAdvice = null;
private Boolean isAfterAdvice;
public InstantiationModelAwarePointcutAdvisorImpl(
AspectJAdvisorFactory af,
AspectJExpressionPointcut ajexp,
MetadataAwareAspectInstanceFactory aif,
Method method,
int declarationOrderInAspect,
String aspectName) {
public InstantiationModelAwarePointcutAdvisorImpl(AspectJAdvisorFactory af, AspectJExpressionPointcut ajexp,
MetadataAwareAspectInstanceFactory aif, Method method, int declarationOrderInAspect, String aspectName) {
this.declaredPointcut = ajexp;
this.method = method;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2006 the original author or authors.
* Copyright 2002-2010 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,9 +21,9 @@ import java.util.List;
import org.w3c.dom.Node;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.ManagedList;
@@ -34,22 +34,25 @@ import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/**
* Base implementation for {@link org.springframework.beans.factory.xml.BeanDefinitionDecorator BeanDefinitionDecorators} wishing
* to add an {@link org.aopalliance.intercept.MethodInterceptor interceptor} to the resulting
* bean.
* Base implementation for
* {@link org.springframework.beans.factory.xml.BeanDefinitionDecorator BeanDefinitionDecorators}
* wishing to add an {@link org.aopalliance.intercept.MethodInterceptor interceptor}
* to the resulting bean.
*
* <p>This base class controls the creation of the {@link ProxyFactoryBean} bean definition
* and wraps the original as an inner-bean definition for the <code>target</code> property of
* {@link ProxyFactoryBean}.
* and wraps the original as an inner-bean definition for the <code>target</code> property
* of {@link ProxyFactoryBean}.
*
* <p>Chaining is correctly handled, ensuring that only one {@link ProxyFactoryBean} definition
* is created. If a previous {@link org.springframework.beans.factory.xml.BeanDefinitionDecorator} already created the {@link org.springframework.aop.framework.ProxyFactoryBean}
* then the interceptor is simply added to the existing definition.
* is created. If a previous {@link org.springframework.beans.factory.xml.BeanDefinitionDecorator}
* already created the {@link org.springframework.aop.framework.ProxyFactoryBean} then the
* interceptor is simply added to the existing definition.
*
* <p>Subclasses have only to create the <code>BeanDefinition</code> to the interceptor they
* wish to add.
* <p>Subclasses have only to create the <code>BeanDefinition</code> to the interceptor that
* they wish to add.
*
* @author Rob Harrop
* @author Juergen Hoeller
* @since 2.0
* @see org.aopalliance.intercept.MethodInterceptor
*/
@@ -60,51 +63,54 @@ public abstract class AbstractInterceptorDrivenBeanDefinitionDecorator implement
// get the root bean name - will be the name of the generated proxy factory bean
String existingBeanName = definitionHolder.getBeanName();
BeanDefinition existingDefinition = definitionHolder.getBeanDefinition();
BeanDefinition targetDefinition = definitionHolder.getBeanDefinition();
BeanDefinitionHolder targetHolder = new BeanDefinitionHolder(targetDefinition, existingBeanName + ".TARGET");
// delegate to subclass for interceptor def
// delegate to subclass for interceptor definition
BeanDefinition interceptorDefinition = createInterceptorDefinition(node);
// generate name and register the interceptor
String interceptorName = existingBeanName + "." + getInterceptorNameSuffix(interceptorDefinition);
BeanDefinitionReaderUtils.registerBeanDefinition(new BeanDefinitionHolder(interceptorDefinition, interceptorName), registry);
BeanDefinitionReaderUtils.registerBeanDefinition(
new BeanDefinitionHolder(interceptorDefinition, interceptorName), registry);
BeanDefinitionHolder result = definitionHolder;
if (!isProxyFactoryBeanDefinition(existingDefinition)) {
// create the proxy definitionHolder
if (!isProxyFactoryBeanDefinition(targetDefinition)) {
// create the proxy definition
RootBeanDefinition proxyDefinition = new RootBeanDefinition();
// create proxy factory bean definitionHolder
// create proxy factory bean definition
proxyDefinition.setBeanClass(ProxyFactoryBean.class);
// set up property values
MutablePropertyValues mpvs = new MutablePropertyValues();
proxyDefinition.setPropertyValues(mpvs);
proxyDefinition.setScope(targetDefinition.getScope());
proxyDefinition.setLazyInit(targetDefinition.isLazyInit());
// set the target
mpvs.addPropertyValue("target", existingDefinition);
proxyDefinition.setDecoratedDefinition(targetHolder);
proxyDefinition.getPropertyValues().add("target", targetHolder);
// create the interceptor names list
ManagedList interceptorList = new ManagedList();
mpvs.addPropertyValue("interceptorNames", interceptorList);
proxyDefinition.getPropertyValues().add("interceptorNames", new ManagedList<String>());
// copy autowire settings from original bean definition.
proxyDefinition.setAutowireCandidate(targetDefinition.isAutowireCandidate());
proxyDefinition.setPrimary(targetDefinition.isPrimary());
if (targetDefinition instanceof AbstractBeanDefinition) {
proxyDefinition.copyQualifiersFrom((AbstractBeanDefinition) targetDefinition);
}
// wrap it in a BeanDefinitionHolder with bean name
result = new BeanDefinitionHolder(proxyDefinition, existingBeanName);
}
addInterceptorNameToList(interceptorName, result.getBeanDefinition());
return result;
}
@SuppressWarnings("unchecked")
private void addInterceptorNameToList(String interceptorName, BeanDefinition beanDefinition) {
List list = (List) beanDefinition.getPropertyValues().getPropertyValue("interceptorNames").getValue();
List<String> list = (List<String>)
beanDefinition.getPropertyValues().getPropertyValue("interceptorNames").getValue();
list.add(interceptorName);
}
private boolean isProxyFactoryBeanDefinition(BeanDefinition existingDefinition) {
return existingDefinition.getBeanClassName().equals(ProxyFactoryBean.class.getName());
return ProxyFactoryBean.class.getName().equals(existingDefinition.getBeanClassName());
}
protected String getInterceptorNameSuffix(BeanDefinition interceptorDefinition) {
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -93,7 +93,14 @@ public abstract class AopConfigUtils {
public static void forceAutoProxyCreatorToUseClassProxying(BeanDefinitionRegistry registry) {
if (registry.containsBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME)) {
BeanDefinition definition = registry.getBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME);
definition.getPropertyValues().addPropertyValue("proxyTargetClass", Boolean.TRUE);
definition.getPropertyValues().add("proxyTargetClass", Boolean.TRUE);
}
}
static void forceAutoProxyCreatorToExposeProxy(BeanDefinitionRegistry registry) {
if (registry.containsBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME)) {
BeanDefinition definition = registry.getBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME);
definition.getPropertyValues().add("exposeProxy", Boolean.TRUE);
}
}
@@ -113,7 +120,7 @@ public abstract class AopConfigUtils {
}
RootBeanDefinition beanDefinition = new RootBeanDefinition(cls);
beanDefinition.setSource(source);
beanDefinition.getPropertyValues().addPropertyValue("order", Ordered.HIGHEST_PRECEDENCE);
beanDefinition.getPropertyValues().add("order", Ordered.HIGHEST_PRECEDENCE);
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
registry.registerBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME, beanDefinition);
return beanDefinition;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -46,6 +46,11 @@ public abstract class AopNamespaceUtils {
*/
public static final String PROXY_TARGET_CLASS_ATTRIBUTE = "proxy-target-class";
/**
* The <code>expose-proxy</code> attribute as found on AOP-related XML tags.
*/
private static final String EXPOSE_PROXY_ATTRIBUTE = "expose-proxy";
public static void registerAutoProxyCreatorIfNecessary(
ParserContext parserContext, Element sourceElement) {
@@ -102,6 +107,10 @@ public abstract class AopNamespaceUtils {
if (proxyTargetClass) {
AopConfigUtils.forceAutoProxyCreatorToUseClassProxying(registry);
}
boolean exposeProxy = Boolean.valueOf(sourceElement.getAttribute(EXPOSE_PROXY_ATTRIBUTE));
if (exposeProxy) {
AopConfigUtils.forceAutoProxyCreatorToExposeProxy(registry);
}
}
}
@@ -65,7 +65,7 @@ class AspectJAutoProxyBeanDefinitionParser implements BeanDefinitionParser {
}
if (!includePatterns.isEmpty()) {
includePatterns.setSource(parserContext.extractSource(element));
beanDef.getPropertyValues().addPropertyValue("includePatterns", includePatterns);
beanDef.getPropertyValues().add("includePatterns", includePatterns);
}
}
@@ -102,20 +102,17 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
configureAutoProxyCreator(parserContext, element);
NodeList childNodes = element.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node node = childNodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
String localName = node.getLocalName();
if (POINTCUT.equals(localName)) {
parsePointcut((Element) node, parserContext);
}
else if (ADVISOR.equals(localName)) {
parseAdvisor((Element) node, parserContext);
}
else if (ASPECT.equals(localName)) {
parseAspect((Element) node, parserContext);
}
List<Element> childElts = DomUtils.getChildElements(element);
for (Element elt: childElts) {
String localName = parserContext.getDelegate().getLocalName(elt);
if (POINTCUT.equals(localName)) {
parsePointcut(elt, parserContext);
}
else if (ADVISOR.equals(localName)) {
parseAdvisor(elt, parserContext);
}
else if (ASPECT.equals(localName)) {
parseAspect(elt, parserContext);
}
}
@@ -154,12 +151,12 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
Object pointcut = parsePointcutProperty(advisorElement, parserContext);
if (pointcut instanceof BeanDefinition) {
advisorDef.getPropertyValues().addPropertyValue(POINTCUT, pointcut);
advisorDef.getPropertyValues().add(POINTCUT, pointcut);
parserContext.registerComponent(
new AdvisorComponentDefinition(advisorBeanName, advisorDef, (BeanDefinition) pointcut));
}
else if (pointcut instanceof String) {
advisorDef.getPropertyValues().addPropertyValue(POINTCUT, new RuntimeBeanReference((String) pointcut));
advisorDef.getPropertyValues().add(POINTCUT, new RuntimeBeanReference((String) pointcut));
parserContext.registerComponent(
new AdvisorComponentDefinition(advisorBeanName, advisorDef));
}
@@ -183,12 +180,12 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
"'advice-ref' attribute contains empty value.", advisorElement, this.parseState.snapshot());
}
else {
advisorDefinition.getPropertyValues().addPropertyValue(
advisorDefinition.getPropertyValues().add(
ADVICE_BEAN_NAME, new RuntimeBeanNameReference(adviceRef));
}
if (advisorElement.hasAttribute(ORDER_PROPERTY)) {
advisorDefinition.getPropertyValues().addPropertyValue(
advisorDefinition.getPropertyValues().add(
ORDER_PROPERTY, advisorElement.getAttribute(ORDER_PROPERTY));
}
@@ -216,7 +213,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
boolean adviceFoundAlready = false;
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (isAdviceNode(node)) {
if (isAdviceNode(node, parserContext)) {
if (!adviceFoundAlready) {
adviceFoundAlready = true;
if (!StringUtils.hasText(aspectName)) {
@@ -264,12 +261,12 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
* '<code>before</code>', '<code>after</code>', '<code>after-returning</code>',
* '<code>after-throwing</code>' or '<code>around</code>'.
*/
private boolean isAdviceNode(Node aNode) {
private boolean isAdviceNode(Node aNode, ParserContext parserContext) {
if (!(aNode instanceof Element)) {
return false;
}
else {
String name = aNode.getLocalName();
String name = parserContext.getDelegate().getLocalName(aNode);
return (BEFORE.equals(name) || AFTER.equals(name) || AFTER_RETURNING_ELEMENT.equals(name) ||
AFTER_THROWING_ELEMENT.equals(name) || AROUND.equals(name));
}
@@ -317,18 +314,18 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
List<BeanDefinition> beanDefinitions, List<BeanReference> beanReferences) {
try {
this.parseState.push(new AdviceEntry(adviceElement.getLocalName()));
this.parseState.push(new AdviceEntry(parserContext.getDelegate().getLocalName(adviceElement)));
// create the method factory bean
RootBeanDefinition methodDefinition = new RootBeanDefinition(MethodLocatingFactoryBean.class);
methodDefinition.getPropertyValues().addPropertyValue("targetBeanName", aspectName);
methodDefinition.getPropertyValues().addPropertyValue("methodName", adviceElement.getAttribute("method"));
methodDefinition.getPropertyValues().add("targetBeanName", aspectName);
methodDefinition.getPropertyValues().add("methodName", adviceElement.getAttribute("method"));
methodDefinition.setSynthetic(true);
// create instance factory definition
RootBeanDefinition aspectFactoryDef =
new RootBeanDefinition(SimpleBeanFactoryAwareAspectInstanceFactory.class);
aspectFactoryDef.getPropertyValues().addPropertyValue("aspectBeanName", aspectName);
aspectFactoryDef.getPropertyValues().add("aspectBeanName", aspectName);
aspectFactoryDef.setSynthetic(true);
// register the pointcut
@@ -341,7 +338,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
advisorDefinition.setSource(parserContext.extractSource(adviceElement));
advisorDefinition.getConstructorArgumentValues().addGenericArgumentValue(adviceDef);
if (aspectElement.hasAttribute(ORDER_PROPERTY)) {
advisorDefinition.getPropertyValues().addPropertyValue(
advisorDefinition.getPropertyValues().add(
ORDER_PROPERTY, aspectElement.getAttribute(ORDER_PROPERTY));
}
@@ -366,22 +363,22 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
RootBeanDefinition methodDef, RootBeanDefinition aspectFactoryDef,
List<BeanDefinition> beanDefinitions, List<BeanReference> beanReferences) {
RootBeanDefinition adviceDefinition = new RootBeanDefinition(getAdviceClass(adviceElement));
RootBeanDefinition adviceDefinition = new RootBeanDefinition(getAdviceClass(adviceElement, parserContext));
adviceDefinition.setSource(parserContext.extractSource(adviceElement));
adviceDefinition.getPropertyValues().addPropertyValue(ASPECT_NAME_PROPERTY, aspectName);
adviceDefinition.getPropertyValues().addPropertyValue(DECLARATION_ORDER_PROPERTY, order);
adviceDefinition.getPropertyValues().add(ASPECT_NAME_PROPERTY, aspectName);
adviceDefinition.getPropertyValues().add(DECLARATION_ORDER_PROPERTY, order);
if (adviceElement.hasAttribute(RETURNING)) {
adviceDefinition.getPropertyValues().addPropertyValue(
adviceDefinition.getPropertyValues().add(
RETURNING_PROPERTY, adviceElement.getAttribute(RETURNING));
}
if (adviceElement.hasAttribute(THROWING)) {
adviceDefinition.getPropertyValues().addPropertyValue(
adviceDefinition.getPropertyValues().add(
THROWING_PROPERTY, adviceElement.getAttribute(THROWING));
}
if (adviceElement.hasAttribute(ARG_NAMES)) {
adviceDefinition.getPropertyValues().addPropertyValue(
adviceDefinition.getPropertyValues().add(
ARG_NAMES_PROPERTY, adviceElement.getAttribute(ARG_NAMES));
}
@@ -407,8 +404,8 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
/**
* Gets the advice implementation class corresponding to the supplied {@link Element}.
*/
private Class getAdviceClass(Element adviceElement) {
String elementName = adviceElement.getLocalName();
private Class getAdviceClass(Element adviceElement, ParserContext parserContext) {
String elementName = parserContext.getDelegate().getLocalName(adviceElement);
if (BEFORE.equals(elementName)) {
return AspectJMethodBeforeAdvice.class;
}
@@ -507,7 +504,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser {
RootBeanDefinition beanDefinition = new RootBeanDefinition(AspectJExpressionPointcut.class);
beanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);
beanDefinition.setSynthetic(true);
beanDefinition.getPropertyValues().addPropertyValue(EXPRESSION, expression);
beanDefinition.getPropertyValues().add(EXPRESSION, expression);
return beanDefinition;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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,6 +58,7 @@ import org.springframework.util.CollectionUtils;
* @author Juergen Hoeller
* @see org.springframework.aop.framework.AopProxy
*/
@SuppressWarnings("unchecked")
public class AdvisedSupport extends ProxyConfig implements Advised {
/** use serialVersionUID from Spring 2.0 for interoperability */
@@ -161,7 +162,7 @@ public class AdvisedSupport extends ProxyConfig implements Advised {
this.targetSource = EmptyTargetSource.forClass(targetClass);
}
public Class getTargetClass() {
public Class<?> getTargetClass() {
return this.targetSource.getTargetClass();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -19,6 +19,10 @@ package org.springframework.aop.framework;
import java.util.Arrays;
import org.springframework.aop.SpringProxy;
import org.springframework.aop.TargetClassAware;
import org.springframework.aop.TargetSource;
import org.springframework.aop.support.AopUtils;
import org.springframework.aop.target.SingletonTargetSource;
import org.springframework.util.Assert;
/**
@@ -34,6 +38,37 @@ import org.springframework.util.Assert;
*/
public abstract class AopProxyUtils {
/**
* Determine the ultimate target class of the given bean instance, traversing
* not only a top-level proxy but any number of nested proxies as well -
* as long as possible without side effects, that is, just for singleton targets.
* @param candidate the instance to check (might be an AOP proxy)
* @return the target class (or the plain class of the given object as fallback;
* never <code>null</code>)
* @see org.springframework.aop.TargetClassAware#getTargetClass()
* @see org.springframework.aop.framework.Advised#getTargetSource()
*/
public static Class<?> ultimateTargetClass(Object candidate) {
Assert.notNull(candidate, "Candidate object must not be null");
Object current = candidate;
Class<?> result = null;
while (current instanceof TargetClassAware) {
result = ((TargetClassAware) current).getTargetClass();
Object nested = null;
if (current instanceof Advised) {
TargetSource targetSource = ((Advised) current).getTargetSource();
if (targetSource instanceof SingletonTargetSource) {
nested = ((SingletonTargetSource) targetSource).getTarget();
}
}
current = nested;
}
if (result == null) {
result = (AopUtils.isCglibProxy(candidate) ? candidate.getClass().getSuperclass() : candidate.getClass());
}
return result;
}
/**
* Determine the complete set of interfaces to proxy for the given AOP configuration.
* <p>This will always add the {@link Advised} interface unless the AdvisedSupport's
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -268,7 +268,7 @@ final class Cglib2AopProxy implements AopProxy, Serializable {
// Choose a "straight to target" interceptor. (used for calls that are
// unadvised but can return this). May be required to expose the proxy.
Callback targetInterceptor = null;
Callback targetInterceptor;
if (exposeProxy) {
targetInterceptor = isStatic ?
new StaticUnadvisedExposedInterceptor(this.advised.getTargetSource().getTarget()) :
@@ -316,12 +316,8 @@ final class Cglib2AopProxy implements AopProxy, Serializable {
// Now copy both the callbacks from mainCallbacks
// and fixedCallbacks into the callbacks array.
callbacks = new Callback[mainCallbacks.length + fixedCallbacks.length];
for (int x = 0; x < mainCallbacks.length; x++) {
callbacks[x] = mainCallbacks[x];
}
for (int x = 0; x < fixedCallbacks.length; x++) {
callbacks[x + mainCallbacks.length] = fixedCallbacks[x];
}
System.arraycopy(mainCallbacks, 0, callbacks, 0, mainCallbacks.length);
System.arraycopy(fixedCallbacks, 0, callbacks, mainCallbacks.length, fixedCallbacks.length);
this.fixedInterceptorOffset = mainCallbacks.length;
}
else {
@@ -610,7 +606,7 @@ final class Cglib2AopProxy implements AopProxy, Serializable {
targetClass = target.getClass();
}
List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);
Object retVal = null;
Object retVal;
// Check whether we only have one InvokerInterceptor: that is,
// no real advice, but just reflective invocation of the target.
if (chain.isEmpty() && Modifier.isPublic(method.getModifiers())) {
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -146,7 +146,7 @@ final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializa
* unless a hook method throws an exception.
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
MethodInvocation invocation = null;
MethodInvocation invocation;
Object oldProxy = null;
boolean setProxyContext = false;
@@ -169,7 +169,7 @@ final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializa
return AopUtils.invokeJoinpointUsingReflection(this.advised, method, args);
}
Object retVal = null;
Object retVal;
if (this.advised.exposeProxy) {
// Make invocation available if necessary.
@@ -239,7 +239,7 @@ final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializa
return false;
}
JdkDynamicAopProxy otherProxy = null;
JdkDynamicAopProxy otherProxy;
if (other instanceof JdkDynamicAopProxy) {
otherProxy = (JdkDynamicAopProxy) other;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -113,12 +113,14 @@ public class ProxyConfig implements Serializable {
* ThreadLocal for retrieval via the AopContext class. This is useful
* if an advised object needs to call another advised method on itself.
* (If it uses <code>this</code>, the invocation will not be advised).
* <p>Default is "false", for optimal performance.
* <p>Default is "false", in order to avoid unnecessary extra interception.
* This means that no guarantees are provided that AopContext access will
* work consistently within any method of the advised object.
*/
public void setExposeProxy(boolean exposeProxy) {
this.exposeProxy = exposeProxy;
}
/**
* Return whether the AOP proxy will expose the AOP proxy for
* each invocation.
@@ -102,8 +102,8 @@ public class ReflectiveMethodInvocation implements ProxyMethodInvocation, Clonea
* but would complicate the code. And it would work only for static pointcuts.
*/
protected ReflectiveMethodInvocation(
Object proxy, Object target, Method method, Object[] arguments,
Class targetClass, List<Object> interceptorsAndDynamicMethodMatchers) {
Object proxy, Object target, Method method, Object[] arguments,
Class targetClass, List<Object> interceptorsAndDynamicMethodMatchers) {
this.proxy = proxy;
this.target = target;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -52,7 +52,7 @@ public abstract class AutoProxyUtils {
* @return whether the given bean should be proxied with its target class
*/
public static boolean shouldProxyTargetClass(ConfigurableListableBeanFactory beanFactory, String beanName) {
if (beanFactory.containsBeanDefinition(beanName)) {
if (beanName != null && beanFactory.containsBeanDefinition(beanName)) {
BeanDefinition bd = beanFactory.getBeanDefinition(beanName);
return Boolean.TRUE.equals(bd.getAttribute(PRESERVE_TARGET_CLASS_ATTRIBUTE));
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -84,6 +84,15 @@ public class BeanNameAutoProxyCreator extends AbstractAutoProxyCreator {
if (isMatch(beanName, mappedName)) {
return PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS;
}
BeanFactory beanFactory = getBeanFactory();
if (beanFactory != null) {
String[] aliases = beanFactory.getAliases(beanName);
for (String alias : aliases) {
if (isMatch(alias, mappedName)) {
return PROXY_WITHOUT_ADDITIONAL_INTERCEPTORS;
}
}
}
}
}
return DO_NOT_PROXY;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -45,7 +45,7 @@ public abstract class ExposeBeanNameAdvisors {
* Binding for the bean name of the bean which is currently being invoked
* in the ReflectiveMethodInvocation userAttributes Map.
*/
private static final String BEAN_NAME_ATTRIBUTE = ExposeBeanNameAdvisors.class.getName() + ".beanName";
private static final String BEAN_NAME_ATTRIBUTE = ExposeBeanNameAdvisors.class.getName() + ".BEAN_NAME";
/**
@@ -114,7 +114,7 @@ public abstract class ExposeBeanNameAdvisors {
throw new IllegalStateException("MethodInvocation is not a Spring ProxyMethodInvocation: " + mi);
}
ProxyMethodInvocation pmi = (ProxyMethodInvocation) mi;
pmi.setUserAttribute(BEAN_NAME_ATTRIBUTE, beanName);
pmi.setUserAttribute(BEAN_NAME_ATTRIBUTE, this.beanName);
return mi.proceed();
}
}
@@ -137,7 +137,7 @@ public abstract class ExposeBeanNameAdvisors {
throw new IllegalStateException("MethodInvocation is not a Spring ProxyMethodInvocation: " + mi);
}
ProxyMethodInvocation pmi = (ProxyMethodInvocation) mi;
pmi.setUserAttribute(BEAN_NAME_ATTRIBUTE, beanName);
pmi.setUserAttribute(BEAN_NAME_ATTRIBUTE, this.beanName);
return super.invoke(mi);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -53,28 +53,29 @@ public abstract class ScopedProxyUtils {
// Create a scoped proxy definition for the original bean name,
// "hiding" the target bean in an internal target definition.
RootBeanDefinition scopedProxyDefinition = new RootBeanDefinition(ScopedProxyFactoryBean.class);
scopedProxyDefinition.setOriginatingBeanDefinition(definition.getBeanDefinition());
scopedProxyDefinition.setSource(definition.getSource());
scopedProxyDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
RootBeanDefinition proxyDefinition = new RootBeanDefinition(ScopedProxyFactoryBean.class);
proxyDefinition.setOriginatingBeanDefinition(definition.getBeanDefinition());
proxyDefinition.setSource(definition.getSource());
proxyDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
String targetBeanName = getTargetBeanName(originalBeanName);
scopedProxyDefinition.getPropertyValues().addPropertyValue("targetBeanName", targetBeanName);
proxyDefinition.getPropertyValues().add("targetBeanName", targetBeanName);
if (proxyTargetClass) {
targetDefinition.setAttribute(AutoProxyUtils.PRESERVE_TARGET_CLASS_ATTRIBUTE, Boolean.TRUE);
// ScopedFactoryBean's "proxyTargetClass" default is TRUE, so we don't need to set it explicitly here.
}
else {
scopedProxyDefinition.getPropertyValues().addPropertyValue("proxyTargetClass", Boolean.FALSE);
proxyDefinition.getPropertyValues().add("proxyTargetClass", Boolean.FALSE);
}
// Copy autowire settings from original bean definition.
proxyDefinition.setAutowireCandidate(targetDefinition.isAutowireCandidate());
proxyDefinition.setPrimary(targetDefinition.isPrimary());
if (targetDefinition instanceof AbstractBeanDefinition) {
scopedProxyDefinition.copyQualifiersFrom((AbstractBeanDefinition) targetDefinition);
proxyDefinition.copyQualifiersFrom((AbstractBeanDefinition) targetDefinition);
}
scopedProxyDefinition.setAutowireCandidate(targetDefinition.isAutowireCandidate());
scopedProxyDefinition.setPrimary(targetDefinition.isPrimary());
// The target bean should be ignored in favor of the scoped proxy.
targetDefinition.setAutowireCandidate(false);
targetDefinition.setPrimary(false);
@@ -84,7 +85,7 @@ public abstract class ScopedProxyUtils {
// Return the scoped proxy definition as primary bean definition
// (potentially an inner bean).
return new BeanDefinitionHolder(scopedProxyDefinition, originalBeanName, definition.getAliases());
return new BeanDefinitionHolder(proxyDefinition, originalBeanName, definition.getAliases());
}
/**
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -16,6 +16,9 @@
package org.springframework.aop.support;
import java.io.IOException;
import java.io.ObjectInputStream;
import org.aopalliance.aop.Advice;
import org.springframework.beans.factory.BeanFactory;
@@ -41,9 +44,9 @@ public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcu
private BeanFactory beanFactory;
private Advice advice;
private transient Advice advice;
private final Object adviceMonitor = new Object();
private transient volatile Object adviceMonitor = new Object();
/**
@@ -74,7 +77,7 @@ public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcu
synchronized (this.adviceMonitor) {
if (this.advice == null && this.adviceBeanName != null) {
Assert.state(this.beanFactory != null, "BeanFactory must be set to resolve 'adviceBeanName'");
this.advice = (Advice) this.beanFactory.getBean(this.adviceBeanName, Advice.class);
this.advice = this.beanFactory.getBean(this.adviceBeanName, Advice.class);
}
return this.advice;
}
@@ -85,4 +88,17 @@ public abstract class AbstractBeanFactoryPointcutAdvisor extends AbstractPointcu
return getClass().getName() + ": advice bean '" + getAdviceBeanName() + "'";
}
//---------------------------------------------------------------------
// Serialization support
//---------------------------------------------------------------------
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Rely on default serialization, just initialize state after deserialization.
ois.defaultReadObject();
// Initialize transient fields.
this.adviceMonitor = new Object();
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -85,7 +85,7 @@ public abstract class AopUtils {
* Check whether the specified class is a CGLIB-generated class.
* @param clazz the class to check
*/
public static boolean isCglibProxyClass(Class clazz) {
public static boolean isCglibProxyClass(Class<?> clazz) {
return (clazz != null && isCglibProxyClassName(clazz.getName()));
}
@@ -98,22 +98,24 @@ public abstract class AopUtils {
}
/**
* Determine the target class of the given bean instance,
* which might be an AOP proxy.
* Determine the target class of the given bean instance which might be an AOP proxy.
* <p>Returns the target class for an AOP proxy and the plain class else.
* @param candidate the instance to check (might be an AOP proxy)
* @return the target class (or the plain class of the given object as fallback)
* @return the target class (or the plain class of the given object as fallback;
* never <code>null</code>)
* @see org.springframework.aop.TargetClassAware#getTargetClass()
* @see org.springframework.aop.framework.AopProxyUtils#ultimateTargetClass(Object)
*/
public static Class getTargetClass(Object candidate) {
public static Class<?> getTargetClass(Object candidate) {
Assert.notNull(candidate, "Candidate object must not be null");
Class<?> result = null;
if (candidate instanceof TargetClassAware) {
return ((TargetClassAware) candidate).getTargetClass();
result = ((TargetClassAware) candidate).getTargetClass();
}
if (isCglibProxy(candidate)) {
return candidate.getClass().getSuperclass();
if (result == null) {
result = (isCglibProxy(candidate) ? candidate.getClass().getSuperclass() : candidate.getClass());
}
return candidate.getClass();
return result;
}
/**
@@ -165,7 +167,7 @@ public abstract class AopUtils {
* <code>targetClass</code> doesn't implement it or is <code>null</code>
* @see org.springframework.util.ClassUtils#getMostSpecificMethod
*/
public static Method getMostSpecificMethod(Method method, Class targetClass) {
public static Method getMostSpecificMethod(Method method, Class<?> targetClass) {
Method resolvedMethod = ClassUtils.getMostSpecificMethod(method, targetClass);
// If we are dealing with method with generic parameters, find the original method.
return BridgeMethodResolver.findBridgedMethod(resolvedMethod);
@@ -180,7 +182,7 @@ public abstract class AopUtils {
* @param targetClass the class to test
* @return whether the pointcut can apply on any method
*/
public static boolean canApply(Pointcut pc, Class targetClass) {
public static boolean canApply(Pointcut pc, Class<?> targetClass) {
return canApply(pc, targetClass, false);
}
@@ -194,7 +196,7 @@ public abstract class AopUtils {
* for this bean includes any introductions
* @return whether the pointcut can apply on any method
*/
public static boolean canApply(Pointcut pc, Class targetClass, boolean hasIntroductions) {
public static boolean canApply(Pointcut pc, Class<?> targetClass, boolean hasIntroductions) {
if (!pc.getClassFilter().matches(targetClass)) {
return false;
}
@@ -207,7 +209,7 @@ public abstract class AopUtils {
Set<Class> classes = new HashSet<Class>(ClassUtils.getAllInterfacesForClassAsSet(targetClass));
classes.add(targetClass);
for (Class clazz : classes) {
for (Class<?> clazz : classes) {
Method[] methods = clazz.getMethods();
for (Method method : methods) {
if ((introductionAwareMethodMatcher != null &&
@@ -229,7 +231,7 @@ public abstract class AopUtils {
* @param targetClass class we're testing
* @return whether the pointcut can apply on any method
*/
public static boolean canApply(Advisor advisor, Class targetClass) {
public static boolean canApply(Advisor advisor, Class<?> targetClass) {
return canApply(advisor, targetClass, false);
}
@@ -243,7 +245,7 @@ public abstract class AopUtils {
* any introductions
* @return whether the pointcut can apply on any method
*/
public static boolean canApply(Advisor advisor, Class targetClass, boolean hasIntroductions) {
public static boolean canApply(Advisor advisor, Class<?> targetClass, boolean hasIntroductions) {
if (advisor instanceof IntroductionAdvisor) {
return ((IntroductionAdvisor) advisor).getClassFilter().matches(targetClass);
}
@@ -265,7 +267,7 @@ public abstract class AopUtils {
* @return sublist of Advisors that can apply to an object of the given class
* (may be the incoming List as-is)
*/
public static List<Advisor> findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class clazz) {
public static List<Advisor> findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> clazz) {
if (candidateAdvisors.isEmpty()) {
return candidateAdvisors;
}
@@ -299,7 +301,7 @@ public abstract class AopUtils {
* @throws org.springframework.aop.AopInvocationException in case of a reflection error
*/
public static Object invokeJoinpointUsingReflection(Object target, Method method, Object[] args)
throws Throwable {
throws Throwable {
// Use reflection to invoke the method.
try {
@@ -38,6 +38,7 @@ import org.springframework.util.ClassUtils;
* @author Juergen Hoeller
* @since 11.11.2003
*/
@SuppressWarnings({ "unchecked", "serial" })
public class DefaultIntroductionAdvisor implements IntroductionAdvisor, ClassFilter, Ordered, Serializable {
private final Advice advice;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -16,15 +16,12 @@
package org.springframework.aop.target;
import java.io.NotSerializableException;
import java.io.ObjectStreamException;
import java.io.Serializable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.aop.TargetSource;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.util.ClassUtils;
@@ -65,7 +62,7 @@ public abstract class AbstractBeanFactoryBasedTargetSource
private String targetBeanName;
/** Class of the target */
private Class targetClass;
private Class<?> targetClass;
/**
* BeanFactory that owns this TargetSource. We need to hold onto this
@@ -108,7 +105,7 @@ public abstract class AbstractBeanFactoryBasedTargetSource
* Set the owning BeanFactory. We need to save a reference so that we can
* use the <code>getBean</code> method on every invocation.
*/
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
public void setBeanFactory(BeanFactory beanFactory) {
if (this.targetBeanName == null) {
throw new IllegalStateException("Property'targetBeanName' is required");
}
@@ -123,7 +120,7 @@ public abstract class AbstractBeanFactoryBasedTargetSource
}
public synchronized Class getTargetClass() {
public synchronized Class<?> getTargetClass() {
if (this.targetClass == null && this.beanFactory != null) {
// Determine type of the target bean.
this.targetClass = this.beanFactory.getType(this.targetBeanName);
@@ -131,7 +128,10 @@ public abstract class AbstractBeanFactoryBasedTargetSource
if (logger.isTraceEnabled()) {
logger.trace("Getting bean with name '" + this.targetBeanName + "' in order to determine type");
}
this.targetClass = this.beanFactory.getBean(this.targetBeanName).getClass();
Object beanInstance = this.beanFactory.getBean(this.targetBeanName);
if (beanInstance != null) {
this.targetClass = beanInstance.getClass();
}
}
}
return this.targetClass;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -64,7 +64,7 @@ public abstract class AbstractLazyCreationTargetSource implements TargetSource {
* a meaningful value when the target is still <code>null</code>.
* @see #isInitialized()
*/
public synchronized Class getTargetClass() {
public synchronized Class<?> getTargetClass() {
return (this.lazyTarget != null ? this.lazyTarget.getClass() : null);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -89,7 +89,7 @@ public class EmptyTargetSource implements TargetSource, Serializable {
/**
* Always returns the specified target Class, or <code>null</code> if none.
*/
public Class getTargetClass() {
public Class<?> getTargetClass() {
return this.targetClass;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -59,7 +59,7 @@ public class HotSwappableTargetSource implements TargetSource, Serializable {
* Return the type of the current target object.
* <p>The returned type should usually be constant across all target objects.
*/
public synchronized Class getTargetClass() {
public synchronized Class<?> getTargetClass() {
return this.target.getClass();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -55,7 +55,7 @@ public class SingletonTargetSource implements TargetSource, Serializable {
}
public Class getTargetClass() {
public Class<?> getTargetClass() {
return this.target.getClass();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -63,7 +63,7 @@ public abstract class AbstractRefreshableTargetSource implements TargetSource, R
}
public synchronized Class getTargetClass() {
public synchronized Class<?> getTargetClass() {
if (this.targetObject == null) {
refresh();
}
@@ -1,7 +1,7 @@
<html>
<body>
<p>
The Spring Data Binding framework, an internal library used by Spring Web Flow.
Spring's proxy-based AOP framework.
</p>
</body>
</html>
@@ -56,6 +56,15 @@
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="expose-proxy" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation><![CDATA[
Indicate that the proxy should be exposed by the AOP framework as a
ThreadLocal for retrieval via the AopContext class. Off by default,
i.e. no guarantees that AopContext access will work.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
@@ -84,6 +93,15 @@
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="expose-proxy" type="xsd:boolean" default="false">
<xsd:annotation>
<xsd:documentation><![CDATA[
Indicate that the proxy should be exposed by the AOP framework as a
ThreadLocal for retrieval via the AopContext class. Off by default,
i.e. no guarantees that AopContext access will work.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
@@ -18,6 +18,8 @@ package org.springframework.aop.aspectj.annotation;
import static org.junit.Assert.*;
import java.io.FileNotFoundException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.lang.reflect.UndeclaredThrowableException;
import java.rmi.RemoteException;
@@ -406,7 +408,22 @@ public abstract class AbstractAspectJAdvisorFactoryTests {
CannotBeUnlocked.class);
assertFalse("Type pattern must have excluded mixin", proxy instanceof Lockable);
}
/* prereq AspectJ 1.6.7
@Test
public void testIntroductionBasedOnAnnotationMatch_Spr5307() {
AnnotatedTarget target = new AnnotatedTargetImpl();
List<Advisor> advisors = getFixture().getAdvisors(
new SingletonMetadataAwareAspectInstanceFactory(new MakeAnnotatedTypeModifiable(),"someBean"));
Object proxy = createProxy(target,
advisors,
AnnotatedTarget.class);
System.out.println(advisors.get(1));
assertTrue(proxy instanceof Lockable);
Lockable lockable = (Lockable)proxy;
lockable.locked();
}
*/
// TODO: Why does this test fail? It hasn't been run before, so it maybe never actually passed...
public void XtestIntroductionWithArgumentBinding() {
TestBean target = new TestBean();
@@ -966,6 +983,21 @@ class MakeITestBeanModifiable extends AbstractMakeModifiable {
}
/**
* Adds a declare parents pointcut - spr5307
* @author Andy Clement
* @since 3.0
*/
@Aspect
class MakeAnnotatedTypeModifiable extends AbstractMakeModifiable {
@DeclareParents(value = "(@org.springframework.aop.aspectj.annotation.Measured *)",
// @DeclareParents(value = "(@Measured *)", // this would be a nice alternative...
defaultImpl=DefaultLockable.class)
public static Lockable mixin;
}
/**
* Demonstrates introductions, AspectJ annotation style.
@@ -1024,8 +1056,20 @@ interface Modifiable {
}
/**
* Used as a target.
* @author Andy Clement
*/
interface AnnotatedTarget {
}
@Measured
class AnnotatedTargetImpl implements AnnotatedTarget {
}
@Retention(RetentionPolicy.RUNTIME)
@interface Measured {}
class NotLockable {
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -16,15 +16,14 @@
package org.springframework.aop.aspectj.annotation;
import static org.junit.Assert.*;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;
import test.aop.PerThisAspect;
import test.util.SerializationTestUtils;
/**
* @author Rob Harrop
@@ -76,6 +75,7 @@ public final class AspectProxyFactoryTests {
}
@Test
@Ignore // InstantiationModelAwarePointcutAdvisorImpl not serializable yet
public void testWithInstance() throws Exception {
MultiplyReturnValue aspect = new MultiplyReturnValue();
int multiple = 3;
@@ -88,8 +88,10 @@ public final class AspectProxyFactoryTests {
proxyFactory.addAspect(aspect);
ITestBean proxy = proxyFactory.getProxy();
assertEquals(target.getAge() * multiple, proxy.getAge());
ITestBean serializedProxy = (ITestBean) SerializationTestUtils.serializeAndDeserialize(proxy);
assertEquals(target.getAge() * multiple, serializedProxy.getAge());
}
@Test(expected=IllegalArgumentException.class)
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -293,20 +293,33 @@ public final class ProxyFactoryTests {
public void testProxyTargetClassWithInterfaceAsTarget() {
ProxyFactory pf = new ProxyFactory();
pf.setTargetClass(ITestBean.class);
Object proxy = pf.getProxy();
assertTrue("Proxy is a JDK proxy", AopUtils.isJdkDynamicProxy(proxy));
assertTrue(proxy instanceof ITestBean);
assertEquals(ITestBean.class, AopProxyUtils.ultimateTargetClass(proxy));
ProxyFactory pf2 = new ProxyFactory(proxy);
Object proxy2 = pf2.getProxy();
assertTrue("Proxy is a JDK proxy", AopUtils.isJdkDynamicProxy(proxy2));
assertTrue(proxy2 instanceof ITestBean);
assertEquals(ITestBean.class, AopProxyUtils.ultimateTargetClass(proxy2));
}
@Test
public void testProxyTargetClassWithConcreteClassAsTarget() {
ProxyFactory pf = new ProxyFactory();
pf.setTargetClass(TestBean.class);
Object proxy = pf.getProxy();
assertTrue("Proxy is a CGLIB proxy", AopUtils.isCglibProxy(proxy));
assertTrue(proxy instanceof TestBean);
assertEquals(TestBean.class, AopProxyUtils.ultimateTargetClass(proxy));
ProxyFactory pf2 = new ProxyFactory(proxy);
pf2.setProxyTargetClass(true);
Object proxy2 = pf2.getProxy();
assertTrue("Proxy is a CGLIB proxy", AopUtils.isCglibProxy(proxy2));
assertTrue(proxy2 instanceof TestBean);
assertEquals(TestBean.class, AopProxyUtils.ultimateTargetClass(proxy2));
}
@Test
@@ -40,7 +40,7 @@ public final class PrototypeBasedTargetSourceTests {
@Test
public void testSerializability() throws Exception {
MutablePropertyValues tsPvs = new MutablePropertyValues();
tsPvs.addPropertyValue("targetBeanName", "person");
tsPvs.add("targetBeanName", "person");
RootBeanDefinition tsBd = new RootBeanDefinition(TestTargetSource.class, tsPvs);
MutablePropertyValues pvs = new MutablePropertyValues();
+5 -5
View File
@@ -4,14 +4,14 @@ Bundle-Vendor: SpringSource
Bundle-ManifestVersion: 2
Import-Template:
com.jamonapi.*;version="[2.4.0, 3.0.0)";resolution:=optional,
net.sf.cglib.*;version="[2.1.3, 2.2.0)";resolution:=optional,
net.sf.cglib.*;version="[2.1.3, 3.0.0)";resolution:=optional,
org.aopalliance.*;version="[1.0.0, 2.0.0)",
org.apache.commons.logging.*;version="[1.1.1, 2.0.0)",
org.apache.commons.pool.*;version="[1.3.0, 2.0.0)";resolution:=optional,
org.aspectj.*;version="[1.5.4, 2.0.0)";resolution:=optional,
org.springframework.beans.*;version="[3.0.0, 3.0.1)";resolution:=optional,
org.springframework.core.*;version="[3.0.0, 3.0.1)",
org.springframework.util.*;version="[3.0.0, 3.0.1)",
org.aspectj.*;version=${aj.osgi.range};resolution:=optional,
org.springframework.beans.*;version=${spring.osgi.range};resolution:=optional,
org.springframework.core.*;version=${spring.osgi.range},
org.springframework.util.*;version=${spring.osgi.range},
org.w3c.dom.*;version="0";resolution:=optional
Ignored-Existing-Headers:
Bnd-LastModified,
+12 -1
View File
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="org.springframework.asm" xmlns:ivy="antlib:org.apache.ivy.ant">
<project name="org.springframework.asm" xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:bundlor="antlib:com.springsource.bundlor.ant">
<property file="${basedir}/../build.properties"/>
<import file="${basedir}/../build-spring-framework/package-bundle.xml"/>
<import file="${basedir}/../spring-build/standard/default.xml"/>
@@ -45,4 +46,14 @@
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpathref="jarjar.classpath"/>
</target>
<target name="bundlor" depends="bundlor.init" unless="disable.bundlor">
<bundlor:bundlor inputPath="${jar.output.file}" outputPath="${jar.output.file}"
bundleVersion="${bundle.version}" manifestTemplatePath="${manifest.template.file}"
failOnWarnings="${fail.on.warnings}">
<propertyset refid="bundlor.properties"/>
<propertyset>
<propertyref builtin="all"/>
</propertyset>
</bundlor:bundlor>
</target>
</project>
+56 -56
View File
@@ -1,56 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
<packaging>jar</packaging>
<version>3.0.0.BUILD-SNAPSHOT</version>
<parent>
<groupId>org.springframework</groupId>
<artifactId>spring-parent</artifactId>
<relativePath>../org.springframework.spring-parent</relativePath>
<version>3.0.0.BUILD-SNAPSHOT</version>
</parent>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>jarjar</id>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpathref="maven.plugin.classpath" />
<jarjar jarfile="${project.build.directory}${file.separator}${project.build.finalName}-jarjar.jar">
<zipfileset src="${project.build.directory}/jarjar-staging/com.springsource.org.objectweb.asm.jar"/>
<zipfileset src="${project.build.directory}/jarjar-staging/com.springsource.org.objectweb.asm.commons.jar"/>
<rule pattern="org.objectweb.asm.**" result="org.springframework.asm.@1"/>
</jarjar>
<unjar src="${project.build.directory}${file.separator}${project.build.finalName}-jarjar.jar"
dest="${project.build.outputDirectory}">
<patternset>
<include name="**/*.class"/>
<exclude name="*"/>
</patternset>
</unjar>
</tasks>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.google.code</groupId>
<artifactId>jarjar</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
<packaging>jar</packaging>
<version>3.0.4.RELEASE</version>
<parent>
<groupId>org.springframework</groupId>
<artifactId>spring-parent</artifactId>
<relativePath>../org.springframework.spring-parent</relativePath>
<version>3.0.4.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>jarjar</id>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpathref="maven.plugin.classpath" />
<jarjar jarfile="${project.build.directory}${file.separator}${project.build.finalName}-jarjar.jar">
<zipfileset src="${project.build.directory}/jarjar-staging/com.springsource.org.objectweb.asm.jar"/>
<zipfileset src="${project.build.directory}/jarjar-staging/com.springsource.org.objectweb.asm.commons.jar"/>
<rule pattern="org.objectweb.asm.**" result="org.springframework.asm.@1"/>
</jarjar>
<unjar src="${project.build.directory}${file.separator}${project.build.finalName}-jarjar.jar"
dest="${project.build.outputDirectory}">
<patternset>
<include name="**/*.class"/>
<exclude name="*"/>
</patternset>
</unjar>
</tasks>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.google.code</groupId>
<artifactId>jarjar</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
+21 -19
View File
@@ -1,19 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.beans"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.transaction"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar"/>
<classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.core"/>
<classpathentry kind="var" path="IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.5.RELEASE/com.springsource.org.aspectj.weaver-1.6.5.RELEASE.jar" sourcepath="/IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.5.RELEASE/com.springsource.org.aspectj.weaver-sources-1.6.5.RELEASE.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.test"/>
<classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-4.6.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-sources-4.6.0.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.context"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.context.support"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.beans"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.context"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.context.support"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.core"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.transaction"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.test"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.8.RELEASE/com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar" sourcepath="/IVY_CACHE/org.aspectj/com.springsource.org.aspectj.weaver/1.6.8.RELEASE/com.springsource.org.aspectj.weaver-sources-1.6.8.RELEASE.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.7.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/javax.persistence/com.springsource.javax.persistence/1.0.0/com.springsource.javax.persistence-1.0.0.jar" sourcepath="/IVY_CACHE/javax.persistence/com.springsource.javax.persistence/1.0.0/com.springsource.javax.persistence-sources-1.0.0.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.orm"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
+1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="org.springframework.aspects">
<property file="${basedir}/../build.properties"/>
<property file="${basedir}/../build.versions"/>
<import file="${basedir}/../build-spring-framework/package-bundle.xml"/>
<import file="${basedir}/../spring-build/aspect/default.xml"/>
+39 -35
View File
@@ -1,35 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
<ivy-module
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
version="1.3">
<info organisation="org.springframework" module="${ant.project.name}">
<license name="Apache 2.0" url="http://www.apache.org/licenses/LICENSE-2.0"/>
</info>
<configurations>
<include file="${spring.build.dir}/common/default-ivy-configurations.xml"/>
<conf name="aspectj" extends="runtime" description="JARs needed to run with AspectJ"/>
<conf name="tx" extends="runtime" description="JARs needed to run transactional aspects"/>
</configurations>
<publications>
<artifact name="${ant.project.name}"/>
<artifact name="${ant.project.name}-sources" type="src" ext="jar"/>
</publications>
<dependencies>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.logging" rev="1.1.1" conf="compile->compile"/>
<dependency org="org.aspectj" name="com.springsource.org.aspectj.weaver" rev="1.6.5.RELEASE" conf="optional, aspectj->compile"/>
<dependency org="org.springframework" name="org.springframework.beans" rev="latest.integration" conf="test->compile"/>
<dependency org="org.springframework" name="org.springframework.transaction" rev="latest.integration" conf="optional, tx->compile"/>
<dependency org="org.springframework" name="org.springframework.test" rev="latest.integration" conf="test->runtime"/>
<dependency org="org.springframework" name="org.springframework.context" rev="latest.integration" conf="test->runtime"/>
<dependency org="org.springframework" name="org.springframework.context.support" rev="latest.integration" conf="test->runtime"/>
<dependency org="org.junit" name="com.springsource.org.junit" rev="4.6.0" conf="test->compile"/>
<dependency org="javax.mail" name="com.springsource.javax.mail" rev="1.4.0" conf="test->compile"/>
</dependencies>
</ivy-module>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
<ivy-module
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
version="1.3">
<info organisation="org.springframework" module="${ant.project.name}">
<license name="Apache 2.0" url="http://www.apache.org/licenses/LICENSE-2.0"/>
</info>
<configurations>
<include file="${spring.build.dir}/common/default-ivy-configurations.xml"/>
<conf name="commons-logging" extends="runtime" description="JARs needed to run with Commons Logging"/>
<conf name="aspectj" extends="runtime" description="JARs needed to run with AspectJ"/>
<conf name="tx" extends="runtime" description="JARs needed to run transactional aspects"/>
<conf name="orm" extends="runtime" description="JARs needed to compile JPA aspects"/>
</configurations>
<publications>
<artifact name="${ant.project.name}"/>
<artifact name="${ant.project.name}-sources" type="src" ext="jar"/>
</publications>
<dependencies>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.logging" rev="1.1.1" conf="compile, commons-logging->compile"/>
<dependency org="org.aspectj" name="com.springsource.org.aspectj.weaver" rev="${aspectj.version}" conf="optional, aspectj->compile"/>
<dependency org="org.springframework" name="org.springframework.beans" rev="latest.integration" conf="test->compile"/>
<dependency org="org.springframework" name="org.springframework.transaction" rev="latest.integration" conf="optional, tx->compile"/>
<dependency org="org.springframework" name="org.springframework.orm" rev="latest.integration" conf="optional, orm->compile"/>
<dependency org="org.springframework" name="org.springframework.test" rev="latest.integration" conf="test->runtime"/>
<dependency org="org.springframework" name="org.springframework.context" rev="latest.integration" conf="test->runtime"/>
<dependency org="org.springframework" name="org.springframework.context.support" rev="latest.integration" conf="test->runtime"/>
<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit.version}" conf="test->compile"/>
<dependency org="javax.persistence" name="com.springsource.javax.persistence" rev="1.0.0" conf="provided->compile"/>
<dependency org="javax.mail" name="com.springsource.javax.mail" rev="1.4.0" conf="test->compile"/>
</dependencies>
</ivy-module>
+22 -22
View File
@@ -4,25 +4,19 @@
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<packaging>jar</packaging>
<version>3.0.0.BUILD-SNAPSHOT</version>
<version>3.0.4.RELEASE</version>
<parent>
<groupId>org.springframework</groupId>
<artifactId>spring-parent</artifactId>
<relativePath>../org.springframework.spring-parent</relativePath>
<version>3.0.0.BUILD-SNAPSHOT</version>
<version>3.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>compile</scope>
</dependency>
<!-- common logging dependency is in spring-core -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.2</version>
<optional>true</optional>
</dependency>
<dependency>
@@ -38,33 +32,39 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${project.version}</version>
<optional>true</optional>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
<scope>test</scope>
<optional>true</optional>
</dependency>
</dependencies>
@@ -0,0 +1,182 @@
package org.springframework.mock.staticmock;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* Abstract aspect to enable mocking of methods picked out by a pointcut.
* Sub-aspects must define the mockStaticsTestMethod() pointcut to
* indicate call stacks when mocking should be triggered, and the
* methodToMock() pointcut to pick out a method invocations to mock.
*
* @author Rod Johnson
* @author Ramnivas Laddad
*
*/
public abstract aspect AbstractMethodMockingControl percflow(mockStaticsTestMethod()) {
protected abstract pointcut mockStaticsTestMethod();
protected abstract pointcut methodToMock();
private boolean recording = true;
static enum CallResponse { nothing, return_, throw_ };
// Represents a list of expected calls to static entity methods
// Public to allow inserted code to access: is this normal??
public class Expectations {
// Represents an expected call to a static entity method
private class Call {
private final String signature;
private final Object[] args;
private Object responseObject; // return value or throwable
private CallResponse responseType = CallResponse.nothing;
public Call(String name, Object[] args) {
this.signature = name;
this.args = args;
}
public boolean hasResponseSpecified() {
return responseType != CallResponse.nothing;
}
public void setReturnVal(Object retVal) {
this.responseObject = retVal;
responseType = CallResponse.return_;
}
public void setThrow(Throwable throwable) {
this.responseObject = throwable;
responseType = CallResponse.throw_;
}
public Object returnValue(String lastSig, Object[] args) {
checkSignature(lastSig, args);
return responseObject;
}
public Object throwException(String lastSig, Object[] args) {
checkSignature(lastSig, args);
throw (RuntimeException)responseObject;
}
private void checkSignature(String lastSig, Object[] args) {
if (!signature.equals(lastSig)) {
throw new IllegalArgumentException("Signature doesn't match");
}
if (!Arrays.equals(this.args, args)) {
throw new IllegalArgumentException("Arguments don't match");
}
}
}
private List<Call> calls = new LinkedList<Call>();
// Calls already verified
private int verified;
public void verify() {
if (verified != calls.size()) {
throw new IllegalStateException("Expected " + calls.size()
+ " calls, received " + verified);
}
}
/**
* Validate the call and provide the expected return value
* @param lastSig
* @param args
* @return
*/
public Object respond(String lastSig, Object[] args) {
Call call = nextCall();
CallResponse responseType = call.responseType;
if (responseType == CallResponse.return_) {
return call.returnValue(lastSig, args);
} else if(responseType == CallResponse.throw_) {
return (RuntimeException)call.throwException(lastSig, args);
} else if(responseType == CallResponse.nothing) {
// do nothing
}
throw new IllegalStateException("Behavior of " + call + " not specified");
}
private Call nextCall() {
if (verified > calls.size() - 1) {
throw new IllegalStateException("Expected " + calls.size()
+ " calls, received " + verified);
}
return calls.get(verified++);
}
public void expectCall(String lastSig, Object lastArgs[]) {
Call call = new Call(lastSig, lastArgs);
calls.add(call);
}
public boolean hasCalls() {
return !calls.isEmpty();
}
public void expectReturn(Object retVal) {
Call call = calls.get(calls.size() - 1);
if (call.hasResponseSpecified()) {
throw new IllegalStateException("No static method invoked before setting return value");
}
call.setReturnVal(retVal);
}
public void expectThrow(Throwable throwable) {
Call call = calls.get(calls.size() - 1);
if (call.hasResponseSpecified()) {
throw new IllegalStateException("No static method invoked before setting throwable");
}
call.setThrow(throwable);
}
}
private Expectations expectations = new Expectations();
after() returning : mockStaticsTestMethod() {
if (recording && (expectations.hasCalls())) {
throw new IllegalStateException(
"Calls recorded, yet playback state never reached: Create expectations then call "
+ this.getClass().getSimpleName() + ".playback()");
}
expectations.verify();
}
Object around() : methodToMock() && cflowbelow(mockStaticsTestMethod()) {
if (recording) {
expectations.expectCall(thisJoinPointStaticPart.toLongString(), thisJoinPoint.getArgs());
// Return value doesn't matter
return null;
} else {
return expectations.respond(thisJoinPointStaticPart.toLongString(), thisJoinPoint.getArgs());
}
}
public void expectReturnInternal(Object retVal) {
if (!recording) {
throw new IllegalStateException("Not recording: Cannot set return value");
}
expectations.expectReturn(retVal);
}
public void expectThrowInternal(Throwable throwable) {
if (!recording) {
throw new IllegalStateException("Not recording: Cannot set throwable value");
}
expectations.expectThrow(throwable);
}
public void playbackInternal() {
recording = false;
}
}
@@ -0,0 +1,55 @@
package org.springframework.mock.staticmock;
import javax.persistence.Entity;
/**
* Annotation-based aspect to use in test build to enable mocking static methods
* on Entity classes, as used by Roo for finders.
* <br>
* Mocking will occur in the call stack of any method in a class (typically a test class)
* that is annotated with the @MockStaticEntityMethods annotation.
* <br>
* Also provides static methods to simplify the programming model for
* entering playback mode and setting expected return values.
* <br>
* Usage:<ol>
* <li>Annotate a test class with @MockStaticEntityMethods.
* <li>In each test method, AnnotationDrivenStaticEntityMockingControl will begin in recording mode.
* Invoke static methods on Entity classes, with each recording-mode invocation
* being followed by an invocation to the static expectReturn() or expectThrow()
* method on AnnotationDrivenStaticEntityMockingControl.
* <li>Invoke the static AnnotationDrivenStaticEntityMockingControl() method.
* <li>Call the code you wish to test that uses the static methods. Verification will
* occur automatically.
* </ol>
*
* @see MockStaticEntityMethods
*
* @author Rod Johnson
* @author Ramnivas Laddad
*
*/
public aspect AnnotationDrivenStaticEntityMockingControl extends AbstractMethodMockingControl {
/**
* Stop recording mock calls and enter playback state
*/
public static void playback() {
AnnotationDrivenStaticEntityMockingControl.aspectOf().playbackInternal();
}
public static void expectReturn(Object retVal) {
AnnotationDrivenStaticEntityMockingControl.aspectOf().expectReturnInternal(retVal);
}
public static void expectThrow(Throwable throwable) {
AnnotationDrivenStaticEntityMockingControl.aspectOf().expectThrowInternal(throwable);
}
// Only matches directly annotated @Test methods, to allow methods in
// @MockStatics classes to invoke each other without resetting the mocking environment
protected pointcut mockStaticsTestMethod() : execution(public * (@MockStaticEntityMethods *).*(..));
protected pointcut methodToMock() : execution(public static * (@Entity *).*(..));
}
@@ -0,0 +1,21 @@
package org.springframework.mock.staticmock;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation to indicate a test class for whose @Test methods
* static methods on Entity classes should be mocked.
*
* @see AbstractMethodMockingControl
*
* @author Rod Johnson
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MockStaticEntityMethods {
}
@@ -0,0 +1,22 @@
package org.springframework.orm.jpa.aspectj;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.jpa.EntityManagerFactoryUtils;
public aspect JpaExceptionTranslatorAspect {
pointcut entityManagerCall(): call(* EntityManager.*(..)) || call(* EntityManagerFactory.*(..)) || call(* EntityTransaction.*(..)) || call(* Query.*(..));
after() throwing(RuntimeException re): entityManagerCall() {
DataAccessException dex = EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(re);
if (dex != null) {
throw dex;
} else {
throw re;
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2010 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.
@@ -16,12 +16,9 @@
package org.springframework.aop.aspectj.autoproxy;
import org.aspectj.lang.annotation.Aspect;
/**
* @author Adrian Colyer
*/
@Aspect
public aspect CodeStyleAspect {
private String foo;
@@ -409,8 +409,8 @@ public class BeanConfigurerTests extends TestCase {
public static class CircularFactoryBean implements FactoryBean{
public CircularFactoryBean() {
// ValidAutowireByName autowired = new ValidAutowireByName();
// assertNull(autowired.getRamnivas());
ValidAutowireByName autowired = new ValidAutowireByName();
assertNull(autowired.getRamnivas());
}
public Object getObject() throws Exception {
@@ -0,0 +1,146 @@
/*
* Copyright 2009 SpringSource Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.mock.staticmock;
import javax.persistence.PersistenceException;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl.*;
/**
* Test for static entity mocking framework.
* @author Rod Johnson
* @author Ramnivas Laddad
*
*/
@MockStaticEntityMethods
@RunWith(JUnit4.class)
public class AnnotationDrivenStaticEntityMockingControlTest {
@Test
public void testNoArgIntReturn() {
int expectedCount = 13;
Person.countPeople();
expectReturn(expectedCount);
playback();
Assert.assertEquals(expectedCount, Person.countPeople());
}
@Test(expected=PersistenceException.class)
public void testNoArgThrows() {
Person.countPeople();
expectThrow(new PersistenceException());
playback();
Person.countPeople();
}
@Test
public void testArgMethodMatches() {
long id = 13;
Person found = new Person();
Person.findPerson(id);
expectReturn(found);
playback();
Assert.assertEquals(found, Person.findPerson(id));
}
@Test
public void testLongSeriesOfCalls() {
long id1 = 13;
long id2 = 24;
Person found1 = new Person();
Person.findPerson(id1);
expectReturn(found1);
Person found2 = new Person();
Person.findPerson(id2);
expectReturn(found2);
Person.findPerson(id1);
expectReturn(found1);
Person.countPeople();
expectReturn(0);
playback();
Assert.assertEquals(found1, Person.findPerson(id1));
Assert.assertEquals(found2, Person.findPerson(id2));
Assert.assertEquals(found1, Person.findPerson(id1));
Assert.assertEquals(0, Person.countPeople());
}
// Note delegation is used when tests are invalid and should fail, as otherwise
// the failure will occur on the verify() method in the aspect after
// this method returns, failing the test case
@Test
public void testArgMethodNoMatchExpectReturn() {
try {
new Delegate().testArgMethodNoMatchExpectReturn();
Assert.fail();
} catch (IllegalArgumentException expected) {
}
}
@Test(expected=IllegalArgumentException.class)
public void testArgMethodNoMatchExpectThrow() {
new Delegate().testArgMethodNoMatchExpectThrow();
}
private void called(Person found, long id) {
Assert.assertEquals(found, Person.findPerson(id));
}
@Test
public void testReentrant() {
long id = 13;
Person found = new Person();
Person.findPerson(id);
expectReturn(found);
playback();
called(found, id);
}
@Test(expected=IllegalStateException.class)
public void testRejectUnexpectedCall() {
new Delegate().rejectUnexpectedCall();
}
@Test(expected=IllegalStateException.class)
public void testFailTooFewCalls() {
new Delegate().failTooFewCalls();
}
@Test
public void testEmpty() {
// Test that verification check doesn't blow up if no replay() call happened
}
@Test(expected=IllegalStateException.class)
public void testDoesntEverReplay() {
new Delegate().doesntEverReplay();
}
@Test(expected=IllegalStateException.class)
public void testDoesntEverSetReturn() {
new Delegate().doesntEverSetReturn();
}
}
@@ -0,0 +1,76 @@
package org.springframework.mock.staticmock;
import java.rmi.RemoteException;
import javax.persistence.PersistenceException;
import junit.framework.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl;
import org.springframework.mock.staticmock.MockStaticEntityMethods;
//Used because verification failures occur after method returns,
//so we can't test for them in the test case itself
@MockStaticEntityMethods
@Ignore // This isn't meant for direct testing; rather it is driven from AnnotationDrivenStaticEntityMockingControl
public class Delegate {
@Test
public void testArgMethodNoMatchExpectReturn() {
long id = 13;
Person found = new Person();
Person.findPerson(id);
AnnotationDrivenStaticEntityMockingControl.expectReturn(found);
AnnotationDrivenStaticEntityMockingControl.playback();
Assert.assertEquals(found, Person.findPerson(id + 1));
}
@Test
public void testArgMethodNoMatchExpectThrow() {
long id = 13;
Person found = new Person();
Person.findPerson(id);
AnnotationDrivenStaticEntityMockingControl.expectThrow(new PersistenceException());
AnnotationDrivenStaticEntityMockingControl.playback();
Assert.assertEquals(found, Person.findPerson(id + 1));
}
@Test
public void failTooFewCalls() {
long id = 13;
Person found = new Person();
Person.findPerson(id);
AnnotationDrivenStaticEntityMockingControl.expectReturn(found);
Person.countPeople();
AnnotationDrivenStaticEntityMockingControl.expectReturn(25);
AnnotationDrivenStaticEntityMockingControl.playback();
Assert.assertEquals(found, Person.findPerson(id));
}
@Test
public void doesntEverReplay() {
Person.countPeople();
}
@Test
public void doesntEverSetReturn() {
Person.countPeople();
AnnotationDrivenStaticEntityMockingControl.playback();
}
@Test
public void rejectUnexpectedCall() {
AnnotationDrivenStaticEntityMockingControl.playback();
Person.countPeople();
}
@Test(expected=RemoteException.class)
public void testVerificationFailsEvenWhenTestFailsInExpectedManner() throws RemoteException {
Person.countPeople();
AnnotationDrivenStaticEntityMockingControl.playback();
// No calls to allow verification failure
throw new RemoteException();
}
}
@@ -0,0 +1,8 @@
package org.springframework.mock.staticmock;
import javax.persistence.Entity;
@Entity
public class Person {
}
@@ -0,0 +1,84 @@
package org.springframework.mock.staticmock;
privileged aspect Person_Roo_Entity {
@javax.persistence.PersistenceContext
transient javax.persistence.EntityManager Person.entityManager;
@javax.persistence.Id
@javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
@javax.persistence.Column(name = "id")
private java.lang.Long Person.id;
@javax.persistence.Version
@javax.persistence.Column(name = "version")
private java.lang.Integer Person.version;
public java.lang.Long Person.getId() {
return this.id;
}
public void Person.setId(java.lang.Long id) {
this.id = id;
}
public java.lang.Integer Person.getVersion() {
return this.version;
}
public void Person.setVersion(java.lang.Integer version) {
this.version = version;
}
@org.springframework.transaction.annotation.Transactional
public void Person.persist() {
if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
this.entityManager.persist(this);
}
@org.springframework.transaction.annotation.Transactional
public void Person.remove() {
if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
this.entityManager.remove(this);
}
@org.springframework.transaction.annotation.Transactional
public void Person.flush() {
if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
this.entityManager.flush();
}
@org.springframework.transaction.annotation.Transactional
public void Person.merge() {
if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
Person merged = this.entityManager.merge(this);
this.entityManager.flush();
this.id = merged.getId();
}
public static long Person.countPeople() {
javax.persistence.EntityManager em = new Person().entityManager;
if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
return (Long) em.createQuery("select count(o) from Person o").getSingleResult();
}
public static java.util.List<Person> Person.findAllPeople() {
javax.persistence.EntityManager em = new Person().entityManager;
if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
return em.createQuery("select o from Person o").getResultList();
}
public static Person Person.findPerson(java.lang.Long id) {
if (id == null) throw new IllegalArgumentException("An identifier is required to retrieve an instance of Person");
javax.persistence.EntityManager em = new Person().entityManager;
if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
return em.find(Person.class, id);
}
public static java.util.List<Person> Person.findPersonEntries(int firstResult, int maxResults) {
javax.persistence.EntityManager em = new Person().entityManager;
if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
return em.createQuery("select o from Person o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList();
}
}
+5 -3
View File
@@ -4,9 +4,11 @@ Bundle-Vendor: SpringSource
Bundle-ManifestVersion: 2
Import-Template:
org.apache.commons.logging.*;version="[1.1.1, 2.0.0)",
org.aspectj.*;version="[1.5.4, 2.0.0)";resolution:=optional,
org.springframework.beans.*;version="[3.0.0, 3.0.1)",
org.springframework.transaction.*;version="[3.0.0, 3.0.1)";resolution:=optional
org.aspectj.*;version=${aj.osgi.range};resolution:=optional,
org.springframework.beans.*;version=${spring.osgi.range},
org.springframework.transaction.*;version=${spring.osgi.range};resolution:=optional,
org.springframework.orm.jpa.*;version=${spring.osgi.range};resolution:=optional,
org.springframework.dao.*;version=${spring.osgi.range};resolution:=optional
Ignored-Existing-Headers:
Bnd-LastModified,
Import-Package,
+3 -2
View File
@@ -8,9 +8,10 @@
<classpathentry kind="var" path="IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar" sourcepath="/IVY_CACHE/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.springframework.core"/>
<classpathentry kind="var" path="IVY_CACHE/javax.el/com.springsource.javax.el/1.0.0/com.springsource.javax.el-1.0.0.jar" sourcepath="/IVY_CACHE/javax.el/com.springsource.javax.el/1.0.0/com.springsource.javax.el-sources-1.0.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-2.1.3.jar" sourcepath="/IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-sources-2.1.3.jar"/>
<classpathentry kind="var" path="IVY_CACHE/javax.inject/com.springsource.javax.inject/1.0.0/com.springsource.javax.inject-1.0.0.jar" sourcepath="/IVY_CACHE/javax.inject/com.springsource.javax.inject/1.0.0/com.springsource.javax.inject-sources-1.0.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.2.0/com.springsource.net.sf.cglib-2.2.0.jar" sourcepath="/IVY_CACHE/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-sources-2.1.3.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar" sourcepath="/IVY_CACHE/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-sources-1.2.15.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-4.6.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-sources-4.6.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.6.0.jar"/>
<classpathentry kind="var" path="IVY_CACHE/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-2.5.1.jar" sourcepath="/IVY_CACHE/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-sources-2.5.1.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
+29 -99
View File
@@ -1,99 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="inheritedJdk" />
<orderEntry type="module" module-name="core" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-1.1.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1/com.springsource.org.apache.commons.logging-sources-1.1.1.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/javax.el/com.springsource.javax.el/1.0.0/com.springsource.javax.el-1.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/javax.el/com.springsource.javax.el/1.0.0/com.springsource.javax.el-sources-1.0.0.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-2.1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/net.sourceforge.cglib/com.springsource.net.sf.cglib/2.1.3/com.springsource.net.sf.cglib-sources-2.1.3.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-1.2.15.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.apache.log4j/com.springsource.org.apache.log4j/1.2.15/com.springsource.org.apache.log4j-sources-1.2.15.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-4.6.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.junit/com.springsource.org.junit/4.6.0/com.springsource.org.junit-sources-4.6.0.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.hibernate/com.springsource.org.hibernate/3.2.6.ga/com.springsource.org.hibernate-3.2.6.ga.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.hibernate/com.springsource.org.hibernate/3.2.6.ga/com.springsource.org.hibernate-sources-3.2.6.ga.jar!/" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$IVY_CACHE$/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-2.5.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$IVY_CACHE$/org.easymock/com.springsource.org.easymock/2.5.1/com.springsource.org.easymock-sources-2.5.1.jar!/" />
</SOURCES>
</library>
</orderEntry>
</component>
<component name="copyright">
<Base>
<setting name="state" value="2" />
</Base>
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="inheritedJdk" />
<orderEntry type="module" module-name="core" />
<orderEntry type="library" name="CGLIB" level="project" />
<orderEntry type="library" name="Commons Logging" level="project" />
<orderEntry type="library" name="EasyMock" level="project" />
<orderEntry type="library" name="javax.el" level="project" />
<orderEntry type="library" name="javax.inject" level="project" />
<orderEntry type="library" name="JUnit" level="project" />
<orderEntry type="library" name="Log4j" level="project" />
</component>
<component name="copyright">
<Base>
<setting name="state" value="2" />
</Base>
</component>
</module>
+1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="org.springframework.beans">
<property file="${basedir}/../build.properties"/>
<property file="${basedir}/../build.versions"/>
<import file="${basedir}/../build-spring-framework/package-bundle.xml"/>
<import file="${basedir}/../spring-build/standard/default.xml"/>
</project>
+5 -3
View File
@@ -11,6 +11,7 @@
<configurations>
<include file="${spring.build.dir}/common/default-ivy-configurations.xml"/>
<conf name="commons-logging" extends="runtime" description="JARs needed to run with Commons Logging"/>
<conf name="bytecode-proxy" extends="runtime" description="JARs needed to run with CGLIB bytecode proxies"/>
</configurations>
@@ -21,12 +22,13 @@
<dependencies>
<dependency org="javax.el" name="com.springsource.javax.el" rev="1.0.0" conf="provided->compile"/>
<dependency org="net.sourceforge.cglib" name="com.springsource.net.sf.cglib" rev="2.1.3" conf="optional, bytecode-proxy->compile"/>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.logging" rev="1.1.1" conf="compile->compile"/>
<dependency org="javax.inject" name="com.springsource.javax.inject" rev="1.0.0" conf="provided->compile"/>
<dependency org="net.sourceforge.cglib" name="com.springsource.net.sf.cglib" rev="2.2.0" conf="optional, bytecode-proxy->compile"/>
<dependency org="org.apache.commons" name="com.springsource.org.apache.commons.logging" rev="1.1.1" conf="compile, commons-logging->compile"/>
<dependency org="org.springframework" name="org.springframework.core" rev="latest.integration" conf="compile->compile"/>
<!-- test dependencies -->
<dependency org="org.apache.log4j" name="com.springsource.org.apache.log4j" rev="1.2.15" conf="test->runtime"/>
<dependency org="org.junit" name="com.springsource.org.junit" rev="4.6.0" conf="test->runtime"/>
<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit.version}" conf="test->runtime"/>
<dependency org="org.easymock" name="com.springsource.org.easymock" rev="2.5.1" conf="test->compile"/>
<dependency org="org.springframework" name="org.springframework.asm" rev="latest.integration" conf="compile->compile"/>
</dependencies>
+11 -13
View File
@@ -4,12 +4,12 @@
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<packaging>jar</packaging>
<version>3.0.0.BUILD-SNAPSHOT</version>
<version>3.0.4.RELEASE</version>
<parent>
<groupId>org.springframework</groupId>
<artifactId>spring-parent</artifactId>
<relativePath>../org.springframework.spring-parent</relativePath>
<version>3.0.0.BUILD-SNAPSHOT</version>
<version>3.0.4.RELEASE</version>
</parent>
<dependencies>
@@ -17,20 +17,21 @@
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.1_3</version>
<version>2.2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>compile</scope>
</dependency>
<!-- common logging dependency is in spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
@@ -40,19 +41,16 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.3</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -21,8 +21,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.springframework.core.convert.ConversionService;
/**
* Abstract implementation of the {@link PropertyAccessor} interface.
* Provides base implementations of all convenience methods, with the
@@ -52,7 +50,7 @@ public abstract class AbstractPropertyAccessor extends PropertyEditorRegistrySup
setPropertyValue(pv.getName(), pv.getValue());
}
public void setPropertyValues(Map map) throws BeansException {
public void setPropertyValues(Map<?, ?> map) throws BeansException {
setPropertyValues(new MutablePropertyValues(map));
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -65,8 +65,6 @@ public abstract class BeanUtils {
* Convenience method to instantiate a class using its no-arg constructor.
* As this method doesn't try to load classes by name, it should avoid
* class-loading issues.
* <p>Note that this method tries to set the constructor accessible
* if given a non-accessible (that is, non-public) constructor.
* @param clazz class to instantiate
* @return the new instance
* @throws BeanInstantiationException if the bean cannot be instantiated
@@ -340,7 +338,7 @@ public abstract class BeanUtils {
*/
public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws BeansException {
CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);
return cr.getBeanInfo().getPropertyDescriptors();
return cr.getPropertyDescriptors();
}
/**
@@ -391,8 +389,17 @@ public abstract class BeanUtils {
}
ClassLoader cl = targetType.getClassLoader();
if (cl == null) {
cl = ClassLoader.getSystemClassLoader();
if (cl == null) {
try {
cl = ClassLoader.getSystemClassLoader();
if (cl == null) {
return null;
}
}
catch (Throwable ex) {
// e.g. AccessControlException on Google App Engine
if (logger.isDebugEnabled()) {
logger.debug("Could not access system ClassLoader: " + ex);
}
return null;
}
}
@@ -400,8 +407,10 @@ public abstract class BeanUtils {
try {
Class<?> editorClass = cl.loadClass(editorName);
if (!PropertyEditor.class.isAssignableFrom(editorClass)) {
logger.warn("Editor class [" + editorName +
"] does not implement [java.beans.PropertyEditor] interface");
if (logger.isWarnEnabled()) {
logger.warn("Editor class [" + editorName +
"] does not implement [java.beans.PropertyEditor] interface");
}
unknownEditorTypes.put(targetType, Boolean.TRUE);
return null;
}
@@ -475,8 +484,10 @@ public abstract class BeanUtils {
* @return whether the given type represents a "simple" value type
*/
public static boolean isSimpleValueType(Class<?> clazz) {
return ClassUtils.isPrimitiveOrWrapper(clazz) || CharSequence.class.isAssignableFrom(clazz) ||
Number.class.isAssignableFrom(clazz) || Date.class.isAssignableFrom(clazz) ||
return ClassUtils.isPrimitiveOrWrapper(clazz) || clazz.isEnum() ||
CharSequence.class.isAssignableFrom(clazz) ||
Number.class.isAssignableFrom(clazz) ||
Date.class.isAssignableFrom(clazz) ||
clazz.equals(URI.class) || clazz.equals(URL.class) ||
clazz.equals(Locale.class) || clazz.equals(Class.class);
}
@@ -78,4 +78,18 @@ public interface BeanWrapper extends ConfigurablePropertyAccessor {
*/
PropertyDescriptor getPropertyDescriptor(String propertyName) throws InvalidPropertyException;
/**
* Set whether this BeanWrapper should attempt to "auto-grow" a nested path that contains a null value.
* <p>If "true", a null path location will be populated with a default object value and traversed
* instead of resulting in a {@link NullValueInNestedPathException}. Turning this flag on also
* enables auto-growth of collection elements when accessing an out-of-bounds index.
* <p>Default is "false" on a plain BeanWrapper.
*/
void setAutoGrowNestedPaths(boolean autoGrowNestedPaths);
/**
* Return whether "auto-growing" of nested paths has been activated.
*/
boolean isAutoGrowNestedPaths();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -28,6 +28,7 @@ import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -36,9 +37,14 @@ import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.CollectionFactory;
import org.springframework.core.GenericCollectionTypeResolver;
import org.springframework.core.MethodParameter;
import org.springframework.core.convert.ConversionException;
import org.springframework.core.convert.ConverterNotFoundException;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.support.PropertyTypeDescriptor;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@@ -96,6 +102,11 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
private TypeConverterDelegate typeConverterDelegate;
/**
* The security context used for invoking the property methods
*/
private AccessControlContext acc;
/**
* Cached introspections results for this object, to prevent encountering
* the cost of JavaBeans introspection every time.
@@ -107,8 +118,7 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
*/
private Map<String, BeanWrapperImpl> nestedBeanWrappers;
/** The security context used for invoking the property methods */
private AccessControlContext acc;
private boolean autoGrowNestedPaths = false;
/**
@@ -173,6 +183,9 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
private BeanWrapperImpl(Object object, String nestedPath, BeanWrapperImpl superBw) {
setWrappedInstance(object, nestedPath, superBw.getWrappedInstance());
setExtractOldValueForEditor(superBw.isExtractOldValueForEditor());
setAutoGrowNestedPaths(superBw.isAutoGrowNestedPaths());
setConversionService(superBw.getConversionService());
setSecurityContext(superBw.acc);
}
@@ -206,16 +219,6 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
setIntrospectionClass(object.getClass());
}
/**
* Set the security context used during the invocation of the wrapped instance methods.
* Can be null.
*
* @param acc
*/
public void setSecurityContext(AccessControlContext acc) {
this.acc = acc;
}
public final Object getWrappedInstance() {
return this.object;
}
@@ -247,6 +250,39 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
return (this.rootObject != null ? this.rootObject.getClass() : null);
}
/**
* If this BeanWrapper should "auto grow" nested paths.
* When true, auto growth is triggered on nested paths when null values are encountered.
* When true, auto growth is triggered on collection properties when out of bounds indexes are accessed.
* Default is false.
*/
public void setAutoGrowNestedPaths(boolean autoGrowNestedPaths) {
this.autoGrowNestedPaths = autoGrowNestedPaths;
}
/**
* If this BeanWrapper should "auto grow" nested paths.
*/
public boolean isAutoGrowNestedPaths() {
return this.autoGrowNestedPaths;
}
/**
* Set the security context used during the invocation of the wrapped instance methods.
* Can be null.
*/
public void setSecurityContext(AccessControlContext acc) {
this.acc = acc;
}
/**
* Return the security context used during the invocation of the wrapped instance methods.
* Can be null.
*/
public AccessControlContext getSecurityContext() {
return this.acc;
}
/**
* Set the class to introspect.
* Needs to be called when the target object changes.
@@ -273,7 +309,7 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
public PropertyDescriptor[] getPropertyDescriptors() {
return getCachedIntrospectionResults().getBeanInfo().getPropertyDescriptors();
return getCachedIntrospectionResults().getPropertyDescriptors();
}
public PropertyDescriptor getPropertyDescriptor(String propertyName) throws BeansException {
@@ -326,6 +362,26 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
return null;
}
public TypeDescriptor getPropertyTypeDescriptor(String propertyName) throws BeansException {
try {
String actualPropertyName = PropertyAccessorUtils.getPropertyName(propertyName);
PropertyDescriptor pd = getPropertyDescriptorInternal(actualPropertyName);
if (pd != null) {
Class type = getPropertyType(propertyName);
if (pd.getReadMethod() != null) {
return new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), type);
}
else if (pd.getWriteMethod() != null) {
return new PropertyTypeDescriptor(pd, BeanUtils.getWriteMethodParameter(pd), type);
}
}
}
catch (InvalidPropertyException ex) {
// Consider as not determinable.
}
return null;
}
public boolean isReadableProperty(String propertyName) {
try {
PropertyDescriptor pd = getPropertyDescriptorInternal(propertyName);
@@ -366,16 +422,56 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
return false;
}
public <T> T convertIfNecessary(
Object value, Class<T> requiredType, MethodParameter methodParam) throws TypeMismatchException {
public <T> T convertIfNecessary(Object value, Class<T> requiredType, MethodParameter methodParam)
throws TypeMismatchException {
try {
return this.typeConverterDelegate.convertIfNecessary(value, requiredType, methodParam);
}
catch (IllegalArgumentException ex) {
throw new TypeMismatchException(value, requiredType, ex);
} catch (IllegalStateException ex) {
catch (ConverterNotFoundException ex) {
throw new ConversionNotSupportedException(value, requiredType, ex);
}
catch (ConversionException ex) {
throw new TypeMismatchException(value, requiredType, ex);
}
catch (IllegalStateException ex) {
throw new ConversionNotSupportedException(value, requiredType, ex);
}
catch (IllegalArgumentException ex) {
throw new TypeMismatchException(value, requiredType, ex);
}
}
private Object convertIfNecessary(String propertyName, Object oldValue, Object newValue, Class<?> requiredType,
TypeDescriptor td) throws TypeMismatchException {
try {
return this.typeConverterDelegate.convertIfNecessary(propertyName, oldValue, newValue, requiredType, td);
}
catch (ConverterNotFoundException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, newValue);
throw new ConversionNotSupportedException(pce, td.getType(), ex);
}
catch (ConversionException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, newValue);
throw new TypeMismatchException(pce, requiredType, ex);
}
catch (IllegalStateException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, newValue);
throw new ConversionNotSupportedException(pce, requiredType, ex);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, newValue);
throw new TypeMismatchException(pce, requiredType, ex);
}
}
private Object convertIfNecessary(String propertyName, Object oldValue, Object newValue, Class<?> requiredType)
throws TypeMismatchException {
return convertIfNecessary(propertyName, oldValue, newValue, requiredType, TypeDescriptor.valueOf(requiredType));
}
/**
@@ -394,19 +490,14 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"No property '" + propertyName + "' found");
}
try {
return this.typeConverterDelegate.convertIfNecessary(null, value, pd);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, null, value);
throw new TypeMismatchException(pce, pd.getPropertyType(), ex);
}
catch (IllegalStateException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, null, value);
throw new ConversionNotSupportedException(pce, pd.getPropertyType(), ex);
}
return convertForProperty(propertyName, null, value, pd);
}
private Object convertForProperty(String propertyName, Object oldValue, Object newValue, PropertyDescriptor pd)
throws TypeMismatchException {
return convertIfNecessary(propertyName, oldValue, newValue, pd.getPropertyType(),
new PropertyTypeDescriptor(pd, BeanUtils.getWriteMethodParameter(pd)));
}
@@ -463,7 +554,12 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
String canonicalName = tokens.canonicalName;
Object propertyValue = getPropertyValue(tokens);
if (propertyValue == null) {
throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + canonicalName);
if (this.autoGrowNestedPaths) {
propertyValue = setDefaultValue(tokens);
}
else {
throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + canonicalName);
}
}
// Lookup cached sub-BeanWrapper, create new one if not found.
@@ -486,6 +582,55 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
return nestedBw;
}
private Object setDefaultValue(String propertyName) {
PropertyTokenHolder tokens = new PropertyTokenHolder();
tokens.actualName = propertyName;
tokens.canonicalName = propertyName;
setPropertyValue(tokens, createDefaultPropertyValue(tokens));
return getPropertyValue(tokens);
}
private Object setDefaultValue(PropertyTokenHolder tokens) {
setPropertyValue(tokens, createDefaultPropertyValue(tokens));
return getPropertyValue(tokens);
}
private PropertyValue createDefaultPropertyValue(PropertyTokenHolder tokens) {
PropertyDescriptor pd = getCachedIntrospectionResults().getPropertyDescriptor(tokens.actualName);
Object defaultValue = newValue(pd.getPropertyType(), tokens.canonicalName);
return new PropertyValue(tokens.canonicalName, defaultValue);
}
private Object newValue(Class<?> type, String name) {
try {
if (type.isArray()) {
Class<?> componentType = type.getComponentType();
// TODO - only handles 2-dimensional arrays
if (componentType.isArray()) {
Object array = Array.newInstance(componentType, 1);
Array.set(array, 0, Array.newInstance(componentType.getComponentType(), 0));
return array;
}
else {
return Array.newInstance(componentType, 0);
}
}
else if (Collection.class.isAssignableFrom(type)) {
return CollectionFactory.createCollection(type, 16);
}
else if (Map.class.isAssignableFrom(type)) {
return CollectionFactory.createMap(type, 16);
}
else {
return type.newInstance();
}
}
catch (Exception ex) {
throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + name,
"Could not instantiate property type [" + type.getName() + "] to auto-grow nested property path: " + ex);
}
}
/**
* Create a new nested BeanWrapper instance.
* <p>Default implementation creates a BeanWrapperImpl instance.
@@ -574,7 +719,6 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
}
Object value;
if (System.getSecurityManager() != null) {
try {
value = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
@@ -588,24 +732,39 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
}
}
else {
value = readMethod.invoke(object, (Object[]) null);
value = readMethod.invoke(object, (Object[]) null);
}
if (tokens.keys != null) {
if (tokens.keys != null) {
if (value == null) {
if (this.autoGrowNestedPaths) {
value = setDefaultValue(tokens.actualName);
}
else {
throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + propertyName,
"Cannot access indexed value of property referenced in indexed " +
"property path '" + propertyName + "': returned null");
}
}
String indexedPropertyName = tokens.actualName;
// apply indexes and map keys
for (int i = 0; i < tokens.keys.length; i++) {
String key = tokens.keys[i];
if (value == null) {
throw new NullValueInNestedPathException(getRootClass(), this.nestedPath + propertyName,
"Cannot access indexed value of property referenced in indexed " +
"property path '" + propertyName + "': returned null");
"property path '" + propertyName + "': returned null");
}
else if (value.getClass().isArray()) {
value = Array.get(value, Integer.parseInt(key));
int index = Integer.parseInt(key);
value = growArrayIfNecessary(value, index, indexedPropertyName);
value = Array.get(value, index);
}
else if (value instanceof List) {
int index = Integer.parseInt(key);
List list = (List) value;
value = list.get(Integer.parseInt(key));
growCollectionIfNecessary(list, index, indexedPropertyName, pd, i + 1);
value = list.get(index);
}
else if (value instanceof Set) {
// Apply index to Iterator in case of a Set.
@@ -630,9 +789,11 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
Class<?> mapKeyType = GenericCollectionTypeResolver.getMapKeyReturnType(pd.getReadMethod(), i + 1);
// IMPORTANT: Do not pass full property name in here - property editors
// must not kick in for map keys but rather only for map values.
Object convertedMapKey = this.typeConverterDelegate.convertIfNecessary(key, mapKeyType);
Object convertedMapKey = convertIfNecessary(null, null, key, mapKeyType,
new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), mapKeyType));
// Pass full property name and old value in here, since we want full
// conversion ability for map values.
growMapIfNecessary(map, convertedMapKey, indexedPropertyName, pd, i + 1);
value = map.get(convertedMapKey);
}
else {
@@ -640,19 +801,11 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
"Property referenced in indexed property path '" + propertyName +
"' is neither an array nor a List nor a Set nor a Map; returned value was [" + value + "]");
}
indexedPropertyName += PROPERTY_KEY_PREFIX + key + PROPERTY_KEY_SUFFIX;
}
}
return value;
}
catch (InvocationTargetException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Getter for property '" + actualName + "' threw exception", ex);
}
catch(IllegalAccessException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Illegal attempt to get property '" + actualName + "' threw exception", ex);
}
catch (IndexOutOfBoundsException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Index of out of bounds in property path '" + propertyName + "'", ex);
@@ -661,10 +814,70 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Invalid index in property path '" + propertyName + "'", ex);
}
catch (Exception ex) {
catch (TypeMismatchException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Invalid index in property path '" + propertyName + "'", ex);
}
catch (InvocationTargetException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Getter for property '" + actualName + "' threw exception", ex);
}
catch (Exception ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Illegal attempt to get property '" + actualName + "' threw exception", ex);
}
}
private Object growArrayIfNecessary(Object array, int index, String name) {
if (!this.autoGrowNestedPaths) {
return array;
}
int length = Array.getLength(array);
if (index >= length) {
Class<?> componentType = array.getClass().getComponentType();
Object newArray = Array.newInstance(componentType, index + 1);
System.arraycopy(array, 0, newArray, 0, length);
for (int i = length; i < Array.getLength(newArray); i++) {
Array.set(newArray, i, newValue(componentType, name));
}
setPropertyValue(name, newArray);
return newArray;
}
else {
return array;
}
}
@SuppressWarnings("unchecked")
private void growCollectionIfNecessary(
Collection collection, int index, String name, PropertyDescriptor pd, int nestingLevel) {
if (!this.autoGrowNestedPaths) {
return;
}
if (index >= collection.size()) {
Class elementType = GenericCollectionTypeResolver.getCollectionReturnType(pd.getReadMethod(), nestingLevel);
if (elementType != null) {
for (int i = collection.size(); i < index + 1; i++) {
collection.add(newValue(elementType, name));
}
}
}
}
@SuppressWarnings("unchecked")
private void growMapIfNecessary(
Map map, Object key, String name, PropertyDescriptor pd, int nestingLevel) {
if (!this.autoGrowNestedPaths) {
return;
}
if (!map.containsKey(key)) {
Class valueType = GenericCollectionTypeResolver.getMapValueReturnType(pd.getReadMethod(), nestingLevel);
if (valueType != null) {
map.put(key, newValue(valueType, name));
}
}
}
@Override
@@ -734,6 +947,7 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
"in indexed property path '" + propertyName + "': returned null");
}
else if (propValue.getClass().isArray()) {
PropertyDescriptor pd = getCachedIntrospectionResults().getPropertyDescriptor(actualName);
Class requiredType = propValue.getClass().getComponentType();
int arrayIndex = Integer.parseInt(key);
Object oldValue = null;
@@ -741,19 +955,9 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
if (isExtractOldValueForEditor()) {
oldValue = Array.get(propValue, arrayIndex);
}
Object convertedValue = this.typeConverterDelegate.convertIfNecessary(
propertyName, oldValue, pv.getValue(), requiredType);
Array.set(propValue, Integer.parseInt(key), convertedValue);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new TypeMismatchException(pce, requiredType, ex);
}
catch (IllegalStateException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new ConversionNotSupportedException(pce, requiredType, ex);
Object convertedValue = convertIfNecessary(propertyName, oldValue, pv.getValue(), requiredType,
new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), requiredType));
Array.set(propValue, arrayIndex, convertedValue);
}
catch (IndexOutOfBoundsException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
@@ -770,31 +974,24 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
if (isExtractOldValueForEditor() && index < list.size()) {
oldValue = list.get(index);
}
try {
Object convertedValue = this.typeConverterDelegate.convertIfNecessary(
propertyName, oldValue, pv.getValue(), requiredType);
if (index < list.size()) {
list.set(index, convertedValue);
}
else if (index >= list.size()) {
for (int i = list.size(); i < index; i++) {
try {
list.add(null);
}
catch (NullPointerException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Cannot set element with index " + index + " in List of size " +
list.size() + ", accessed using property path '" + propertyName +
"': List does not support filling up gaps with null elements");
}
}
list.add(convertedValue);
}
Object convertedValue = convertIfNecessary(propertyName, oldValue, pv.getValue(), requiredType,
new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), requiredType));
if (index < list.size()) {
list.set(index, convertedValue);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new TypeMismatchException(pce, requiredType, ex);
else if (index >= list.size()) {
for (int i = list.size(); i < index; i++) {
try {
list.add(null);
}
catch (NullPointerException ex) {
throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName,
"Cannot set element with index " + index + " in List of size " +
list.size() + ", accessed using property path '" + propertyName +
"': List does not support filling up gaps with null elements");
}
}
list.add(convertedValue);
}
}
else if (propValue instanceof Map) {
@@ -804,34 +1001,19 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
Class mapValueType = GenericCollectionTypeResolver.getMapValueReturnType(
pd.getReadMethod(), tokens.keys.length);
Map map = (Map) propValue;
Object convertedMapKey;
Object convertedMapValue;
try {
// IMPORTANT: Do not pass full property name in here - property editors
// must not kick in for map keys but rather only for map values.
convertedMapKey = this.typeConverterDelegate.convertIfNecessary(key, mapKeyType);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, null, pv.getValue());
throw new TypeMismatchException(pce, mapKeyType, ex);
}
// IMPORTANT: Do not pass full property name in here - property editors
// must not kick in for map keys but rather only for map values.
Object convertedMapKey = convertIfNecessary(null, null, key, mapKeyType,
new PropertyTypeDescriptor(pd, new MethodParameter(pd.getReadMethod(), -1), mapKeyType));
Object oldValue = null;
if (isExtractOldValueForEditor()) {
oldValue = map.get(convertedMapKey);
}
try {
// Pass full property name and old value in here, since we want full
// conversion ability for map values.
convertedMapValue = this.typeConverterDelegate.convertIfNecessary(
propertyName, oldValue, pv.getValue(), mapValueType, null,
new MethodParameter(pd.getReadMethod(), -1, tokens.keys.length + 1));
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new TypeMismatchException(pce, mapValueType, ex);
}
// Pass full property name and old value in here, since we want full
// conversion ability for map values.
Object convertedMapValue = convertIfNecessary(
propertyName, oldValue, pv.getValue(), mapValueType,
new TypeDescriptor(new MethodParameter(pd.getReadMethod(), -1, tokens.keys.length + 1)));
map.put(convertedMapKey, convertedMapValue);
}
else {
@@ -846,10 +1028,17 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
if (pd == null || !pd.getWriteMethod().getDeclaringClass().isInstance(this.object)) {
pd = getCachedIntrospectionResults().getPropertyDescriptor(actualName);
if (pd == null || pd.getWriteMethod() == null) {
PropertyMatches matches = PropertyMatches.forProperty(propertyName, getRootClass());
throw new NotWritablePropertyException(
getRootClass(), this.nestedPath + propertyName,
matches.buildErrorMessage(), matches.getPossibleMatches());
if (pv.isOptional()) {
logger.debug("Ignoring optional value for property '" + actualName +
"' - property not found on bean class [" + getRootClass().getName() + "]");
return;
}
else {
PropertyMatches matches = PropertyMatches.forProperty(propertyName, getRootClass());
throw new NotWritablePropertyException(
getRootClass(), this.nestedPath + propertyName,
matches.buildErrorMessage(), matches.getPossibleMatches());
}
}
pv.getOriginalPropertyValue().resolvedDescriptor = pd;
}
@@ -865,7 +1054,8 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
else {
if (isExtractOldValueForEditor() && pd.getReadMethod() != null) {
final Method readMethod = pd.getReadMethod();
if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers()) && !readMethod.isAccessible()) {
if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers()) &&
!readMethod.isAccessible()) {
if (System.getSecurityManager()!= null) {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
@@ -884,7 +1074,7 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
public Object run() throws Exception {
return readMethod.invoke(object);
}
},acc);
}, acc);
}
else {
oldValue = readMethod.invoke(object);
@@ -900,11 +1090,13 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
}
}
}
valueToApply = this.typeConverterDelegate.convertIfNecessary(oldValue, originalValue, pd);
valueToApply = convertForProperty(propertyName, oldValue, originalValue, pd);
}
pv.getOriginalPropertyValue().conversionNecessary = (valueToApply != originalValue);
}
final Method writeMethod = pd.getWriteMethod();
final Method writeMethod = (pd instanceof GenericTypeAwarePropertyDescriptor ?
((GenericTypeAwarePropertyDescriptor) pd).getWriteMethodForActualAccess() :
pd.getWriteMethod());
if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers()) && !writeMethod.isAccessible()) {
if (System.getSecurityManager()!= null) {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
@@ -919,7 +1111,6 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
}
}
final Object value = valueToApply;
if (System.getSecurityManager() != null) {
try {
AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
@@ -927,15 +1118,18 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
writeMethod.invoke(object, value);
return null;
}
},acc);
} catch (PrivilegedActionException ex) {
}, acc);
}
catch (PrivilegedActionException ex) {
throw ex.getException();
}
}
else {
writeMethod.invoke(object, value);
writeMethod.invoke(this.object, value);
}
}
catch (TypeMismatchException ex) {
throw ex;
}
catch (InvocationTargetException ex) {
PropertyChangeEvent propertyChangeEvent =
@@ -947,29 +1141,9 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
throw new MethodInvocationException(propertyChangeEvent, ex.getTargetException());
}
}
catch (ConversionException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new TypeMismatchException(pce, pd.getPropertyType(), ex);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new TypeMismatchException(pce, pd.getPropertyType(), ex);
}
catch (IllegalStateException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new ConversionNotSupportedException(pce, pd.getPropertyType(), ex);
}
catch (IllegalAccessException ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new MethodInvocationException(pce, ex);
}
catch (Exception ex) {
PropertyChangeEvent pce =
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
new PropertyChangeEvent(this.rootObject, this.nestedPath + propertyName, oldValue, pv.getValue());
throw new MethodInvocationException(pce, ex);
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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,9 +23,9 @@ import java.beans.PropertyDescriptor;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
@@ -34,6 +34,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/**
* Internal class that caches JavaBeans {@link java.beans.PropertyDescriptor}
@@ -129,7 +130,7 @@ public class CachedIntrospectionResults {
* @throws BeansException in case of introspection failure
*/
static CachedIntrospectionResults forClass(Class beanClass) throws BeansException {
CachedIntrospectionResults results = null;
CachedIntrospectionResults results;
Object value = classCache.get(beanClass);
if (value instanceof Reference) {
Reference ref = (Reference) value;
@@ -139,19 +140,20 @@ public class CachedIntrospectionResults {
results = (CachedIntrospectionResults) value;
}
if (results == null) {
// can throw BeansException
results = new CachedIntrospectionResults(beanClass);
// On JDK 1.5 and higher, it is almost always safe to cache the bean class...
// The sole exception is a custom BeanInfo class being provided in a non-safe ClassLoader.
if (ClassUtils.isCacheSafe(beanClass, CachedIntrospectionResults.class.getClassLoader()) ||
isClassLoaderAccepted(beanClass.getClassLoader()) ||
!ClassUtils.isPresent(beanClass.getName() + "BeanInfo", beanClass.getClassLoader())) {
boolean fullyCacheable =
ClassUtils.isCacheSafe(beanClass, CachedIntrospectionResults.class.getClassLoader()) ||
isClassLoaderAccepted(beanClass.getClassLoader());
if (fullyCacheable || !ClassUtils.isPresent(beanClass.getName() + "BeanInfo", beanClass.getClassLoader())) {
results = new CachedIntrospectionResults(beanClass, fullyCacheable);
classCache.put(beanClass, results);
}
else {
if (logger.isDebugEnabled()) {
logger.debug("Not strongly caching class [" + beanClass.getName() + "] because it is not cache-safe");
}
results = new CachedIntrospectionResults(beanClass, true);
classCache.put(beanClass, new WeakReference<CachedIntrospectionResults>(results));
}
}
@@ -214,7 +216,7 @@ public class CachedIntrospectionResults {
* @param beanClass the bean class to analyze
* @throws BeansException in case of introspection failure
*/
private CachedIntrospectionResults(Class beanClass) throws BeansException {
private CachedIntrospectionResults(Class beanClass, boolean cacheFullMetadata) throws BeansException {
try {
if (logger.isTraceEnabled()) {
logger.trace("Getting BeanInfo for class [" + beanClass.getName() + "]");
@@ -235,24 +237,29 @@ public class CachedIntrospectionResults {
if (logger.isTraceEnabled()) {
logger.trace("Caching PropertyDescriptors for class [" + beanClass.getName() + "]");
}
this.propertyDescriptorCache = new HashMap<String, PropertyDescriptor>();
this.propertyDescriptorCache = new LinkedHashMap<String, PropertyDescriptor>();
// This call is slow so we do it once.
PropertyDescriptor[] pds = this.beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if (Class.class.equals(beanClass) && "classLoader".equals(pd.getName())) {
// Ignore Class.getClassLoader() method - nobody needs to bind to that
continue;
}
if (logger.isTraceEnabled()) {
logger.trace("Found bean property '" + pd.getName() + "'" +
(pd.getPropertyType() != null ? " of type [" + pd.getPropertyType().getName() + "]" : "") +
(pd.getPropertyEditorClass() != null ?
"; editor [" + pd.getPropertyEditorClass().getName() + "]" : ""));
}
pd = new GenericTypeAwarePropertyDescriptor(beanClass, pd.getName(), pd.getReadMethod(),
pd.getWriteMethod(), pd.getPropertyEditorClass());
if (cacheFullMetadata) {
pd = buildGenericTypeAwarePropertyDescriptor(beanClass, pd);
}
this.propertyDescriptorCache.put(pd.getName(), pd);
}
}
catch (IntrospectionException ex) {
throw new FatalBeanException("Cannot get BeanInfo for object of class [" + beanClass.getName() + "]", ex);
throw new FatalBeanException("Failed to obtain BeanInfo for class [" + beanClass.getName() + "]", ex);
}
}
@@ -264,8 +271,38 @@ public class CachedIntrospectionResults {
return this.beanInfo.getBeanDescriptor().getBeanClass();
}
PropertyDescriptor getPropertyDescriptor(String propertyName) {
return this.propertyDescriptorCache.get(propertyName);
PropertyDescriptor getPropertyDescriptor(String name) {
PropertyDescriptor pd = this.propertyDescriptorCache.get(name);
if (pd == null && StringUtils.hasLength(name)) {
// Same lenient fallback checking as in PropertyTypeDescriptor...
pd = this.propertyDescriptorCache.get(name.substring(0, 1).toLowerCase() + name.substring(1));
if (pd == null) {
pd = this.propertyDescriptorCache.get(name.substring(0, 1).toUpperCase() + name.substring(1));
}
}
return (pd == null || pd instanceof GenericTypeAwarePropertyDescriptor ? pd :
buildGenericTypeAwarePropertyDescriptor(getBeanClass(), pd));
}
PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] pds = new PropertyDescriptor[this.propertyDescriptorCache.size()];
int i = 0;
for (PropertyDescriptor pd : this.propertyDescriptorCache.values()) {
pds[i] = (pd instanceof GenericTypeAwarePropertyDescriptor ? pd :
buildGenericTypeAwarePropertyDescriptor(getBeanClass(), pd));
i++;
}
return pds;
}
private PropertyDescriptor buildGenericTypeAwarePropertyDescriptor(Class beanClass, PropertyDescriptor pd) {
try {
return new GenericTypeAwarePropertyDescriptor(beanClass, pd.getName(), pd.getReadMethod(),
pd.getWriteMethod(), pd.getPropertyEditorClass());
}
catch (IntrospectionException ex) {
throw new FatalBeanException("Failed to re-introspect class [" + beanClass.getName() + "]", ex);
}
}
}
@@ -19,26 +19,32 @@ package org.springframework.beans;
import java.beans.PropertyChangeEvent;
/**
* Exception thrown when no suitable editor can be found to set a bean property.
* Exception thrown when no suitable editor or converter can be found for a bean property.
*
* @author Arjen Poutsma
* @author Juergen Hoeller
* @since 3.0
*/
public class ConversionNotSupportedException extends TypeMismatchException {
public ConversionNotSupportedException(PropertyChangeEvent propertyChangeEvent, Class requiredType) {
super(propertyChangeEvent, requiredType);
}
/**
* Create a new ConversionNotSupportedException.
* @param propertyChangeEvent the PropertyChangeEvent that resulted in the problem
* @param requiredType the required target type (or <code>null</code> if not known)
* @param cause the root cause (may be <code>null</code>)
*/
public ConversionNotSupportedException(PropertyChangeEvent propertyChangeEvent, Class requiredType, Throwable cause) {
super(propertyChangeEvent, requiredType, cause);
}
public ConversionNotSupportedException(Object value, Class requiredType) {
super(value, requiredType);
}
/**
* Create a new ConversionNotSupportedException.
* @param value the offending value that couldn't be converted (may be <code>null</code>)
* @param requiredType the required target type (or <code>null</code> if not known)
* @param cause the root cause (may be <code>null</code>)
*/
public ConversionNotSupportedException(Object value, Class requiredType, Throwable cause) {
super(value, requiredType, cause);
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -22,6 +22,9 @@ import java.util.HashMap;
import java.util.Map;
import org.springframework.core.MethodParameter;
import org.springframework.core.convert.ConversionException;
import org.springframework.core.convert.ConverterNotFoundException;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;
@@ -86,6 +89,14 @@ public class DirectFieldAccessor extends AbstractPropertyAccessor {
return null;
}
public TypeDescriptor getPropertyTypeDescriptor(String propertyName) throws BeansException {
Field field = this.fieldMap.get(propertyName);
if (field != null) {
return new TypeDescriptor(field);
}
return null;
}
@Override
public Object getPropertyValue(String propertyName) throws BeansException {
Field field = this.fieldMap.get(propertyName);
@@ -113,14 +124,15 @@ public class DirectFieldAccessor extends AbstractPropertyAccessor {
try {
ReflectionUtils.makeAccessible(field);
oldValue = field.get(this.target);
Object convertedValue =
this.typeConverterDelegate.convertIfNecessary(propertyName, oldValue, newValue, field.getType());
Object convertedValue = this.typeConverterDelegate.convertIfNecessary(
field.getName(), oldValue, newValue, field.getType(), new TypeDescriptor(field));
field.set(this.target, convertedValue);
}
catch (IllegalAccessException ex) {
throw new InvalidPropertyException(this.target.getClass(), propertyName, "Field is not accessible", ex);
catch (ConverterNotFoundException ex) {
PropertyChangeEvent pce = new PropertyChangeEvent(this.target, propertyName, oldValue, newValue);
throw new ConversionNotSupportedException(pce, field.getType(), ex);
}
catch (IllegalArgumentException ex) {
catch (ConversionException ex) {
PropertyChangeEvent pce = new PropertyChangeEvent(this.target, propertyName, oldValue, newValue);
throw new TypeMismatchException(pce, field.getType(), ex);
}
@@ -128,10 +140,17 @@ public class DirectFieldAccessor extends AbstractPropertyAccessor {
PropertyChangeEvent pce = new PropertyChangeEvent(this.target, propertyName, oldValue, newValue);
throw new ConversionNotSupportedException(pce, field.getType(), ex);
}
catch (IllegalArgumentException ex) {
PropertyChangeEvent pce = new PropertyChangeEvent(this.target, propertyName, oldValue, newValue);
throw new TypeMismatchException(pce, field.getType(), ex);
}
catch (IllegalAccessException ex) {
throw new InvalidPropertyException(this.target.getClass(), propertyName, "Field is not accessible", ex);
}
}
public Object convertIfNecessary(
Object value, Class requiredType, MethodParameter methodParam) throws TypeMismatchException {
public <T> T convertIfNecessary(
Object value, Class<T> requiredType, MethodParameter methodParam) throws TypeMismatchException {
try {
return this.typeConverterDelegate.convertIfNecessary(value, requiredType, methodParam);
}
@@ -19,6 +19,10 @@ package org.springframework.beans;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.BridgeMethodResolver;
import org.springframework.core.GenericTypeResolver;
@@ -44,6 +48,8 @@ class GenericTypeAwarePropertyDescriptor extends PropertyDescriptor {
private final Class propertyEditorClass;
private volatile Set<Method> ambiguousWriteMethods;
private Class propertyType;
private MethodParameter writeMethodParameter;
@@ -55,6 +61,8 @@ class GenericTypeAwarePropertyDescriptor extends PropertyDescriptor {
super(propertyName, null, null);
this.beanClass = beanClass;
this.propertyEditorClass = propertyEditorClass;
Method readMethodToUse = BridgeMethodResolver.findBridgedMethod(readMethod);
Method writeMethodToUse = BridgeMethodResolver.findBridgedMethod(writeMethod);
if (writeMethodToUse == null && readMethodToUse != null) {
@@ -66,7 +74,22 @@ class GenericTypeAwarePropertyDescriptor extends PropertyDescriptor {
}
this.readMethod = readMethodToUse;
this.writeMethod = writeMethodToUse;
this.propertyEditorClass = propertyEditorClass;
if (this.writeMethod != null && this.readMethod == null) {
// Write method not matched against read method: potentially ambiguous through
// several overloaded variants, in which case an arbitrary winner has been chosen
// by the JDK's JavaBeans Introspector...
Set<Method> ambiguousCandidates = new HashSet<Method>();
for (Method method : beanClass.getMethods()) {
if (method.getName().equals(writeMethodToUse.getName()) &&
!method.equals(writeMethodToUse) && !method.isBridge()) {
ambiguousCandidates.add(method);
}
}
if (!ambiguousCandidates.isEmpty()) {
this.ambiguousWriteMethods = ambiguousCandidates;
}
}
}
@@ -80,6 +103,17 @@ class GenericTypeAwarePropertyDescriptor extends PropertyDescriptor {
return this.writeMethod;
}
public Method getWriteMethodForActualAccess() {
Set<Method> ambiguousCandidates = this.ambiguousWriteMethods;
if (ambiguousCandidates != null) {
this.ambiguousWriteMethods = null;
LogFactory.getLog(GenericTypeAwarePropertyDescriptor.class).warn("Invalid JavaBean property '" +
getName() + "' being accessed! Ambiguous write methods found next to actually used [" +
this.writeMethod + "]: " + ambiguousCandidates);
}
return this.writeMethod;
}
@Override
public Class getPropertyEditorClass() {
return this.propertyEditorClass;
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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,6 @@ import org.springframework.util.StringUtils;
*/
public class MutablePropertyValues implements PropertyValues, Serializable {
/** List of PropertyValue objects */
private final List<PropertyValue> propertyValueList;
private Set<String> processedProperties;
@@ -47,9 +46,8 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
/**
* Creates a new empty MutablePropertyValues object.
* Property values can be added with the <code>addPropertyValue</code> methods.
* @see #addPropertyValue(PropertyValue)
* @see #addPropertyValue(String, Object)
* <p>Property values can be added with the <code>add</code> method.
* @see #add(String, Object)
*/
public MutablePropertyValues() {
this.propertyValueList = new ArrayList<PropertyValue>();
@@ -119,13 +117,19 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
return this.propertyValueList;
}
/**
* Return the number of PropertyValue entries in the list.
*/
public int size() {
return this.propertyValueList.size();
}
/**
* Copy all given PropertyValues into this object. Guarantees PropertyValue
* references are independent, although it can't deep copy objects currently
* referenced by individual PropertyValue objects.
* @param other the PropertyValues to copy
* @return this object to allow creating objects, adding multiple PropertyValues
* in a single statement
* @return this in order to allow for adding multiple property values in a chain
*/
public MutablePropertyValues addPropertyValues(PropertyValues other) {
if (other != null) {
@@ -141,8 +145,7 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
* Add all property values from the given Map.
* @param other Map with property values keyed by property name,
* which must be a String
* @return this object to allow creating objects, adding multiple
* PropertyValues in a single statement
* @return this in order to allow for adding multiple property values in a chain
*/
public MutablePropertyValues addPropertyValues(Map<?, ?> other) {
if (other != null) {
@@ -154,11 +157,10 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
}
/**
* Add a PropertyValue object, replacing any existing one
* for the corresponding property.
* Add a PropertyValue object, replacing any existing one for the
* corresponding property or getting merged with it (if applicable).
* @param pv PropertyValue object to add
* @return this object to allow creating objects, adding multiple
* PropertyValues in a single statement
* @return this in order to allow for adding multiple property values in a chain
*/
public MutablePropertyValues addPropertyValue(PropertyValue pv) {
for (int i = 0; i < this.propertyValueList.size(); i++) {
@@ -176,6 +178,8 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
/**
* Overloaded version of <code>addPropertyValue</code> that takes
* a property name and a property value.
* <p>Note: As of Spring 3.0, we recommend using the more concise
* and chaining-capable variant {@link #add}.
* @param propertyName name of the property
* @param propertyValue value of the property
* @see #addPropertyValue(PropertyValue)
@@ -184,6 +188,18 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
addPropertyValue(new PropertyValue(propertyName, propertyValue));
}
/**
* Add a PropertyValue object, replacing any existing one for the
* corresponding property or getting merged with it (if applicable).
* @param propertyName name of the property
* @param propertyValue value of the property
* @return this in order to allow for adding multiple property values in a chain
*/
public MutablePropertyValues add(String propertyName, Object propertyValue) {
addPropertyValue(new PropertyValue(propertyName, propertyValue));
return this;
}
/**
* Modify a PropertyValue object held in this object.
* Indexed from 0.
@@ -209,15 +225,6 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
return newPv;
}
/**
* Overloaded version of <code>removePropertyValue</code> that takes a property name.
* @param propertyName name of the property
* @see #removePropertyValue(PropertyValue)
*/
public void removePropertyValue(String propertyName) {
removePropertyValue(getPropertyValue(propertyName));
}
/**
* Remove the given PropertyValue, if contained.
* @param pv the PropertyValue to remove
@@ -227,10 +234,12 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
}
/**
* Clear this holder, removing all PropertyValues.
* Overloaded version of <code>removePropertyValue</code> that takes a property name.
* @param propertyName name of the property
* @see #removePropertyValue(PropertyValue)
*/
public void clear() {
this.propertyValueList.clear();
public void removePropertyValue(String propertyName) {
this.propertyValueList.remove(getPropertyValue(propertyName));
}
@@ -247,34 +256,6 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
return null;
}
/**
* Register the specified property as "processed" in the sense
* of some processor calling the corresponding setter method
* outside of the PropertyValue(s) mechanism.
* <p>This will lead to <code>true</code> being returned from
* a {@link #contains} call for the specified property.
* @param propertyName the name of the property.
*/
public void registerProcessedProperty(String propertyName) {
if (this.processedProperties == null) {
this.processedProperties = new HashSet<String>();
}
this.processedProperties.add(propertyName);
}
public boolean contains(String propertyName) {
return (getPropertyValue(propertyName) != null ||
(this.processedProperties != null && this.processedProperties.contains(propertyName)));
}
public boolean isEmpty() {
return this.propertyValueList.isEmpty();
}
public int size() {
return this.propertyValueList.size();
}
public PropertyValues changesSince(PropertyValues old) {
MutablePropertyValues changes = new MutablePropertyValues();
if (old == this) {
@@ -296,6 +277,30 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
return changes;
}
public boolean contains(String propertyName) {
return (getPropertyValue(propertyName) != null ||
(this.processedProperties != null && this.processedProperties.contains(propertyName)));
}
public boolean isEmpty() {
return this.propertyValueList.isEmpty();
}
/**
* Register the specified property as "processed" in the sense
* of some processor calling the corresponding setter method
* outside of the PropertyValue(s) mechanism.
* <p>This will lead to <code>true</code> being returned from
* a {@link #contains} call for the specified property.
* @param propertyName the name of the property.
*/
public void registerProcessedProperty(String propertyName) {
if (this.processedProperties == null) {
this.processedProperties = new HashSet<String>();
}
this.processedProperties.add(propertyName);
}
/**
* Mark this holder as containing converted values only
@@ -334,8 +339,10 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
@Override
public String toString() {
PropertyValue[] pvs = getPropertyValues();
StringBuilder sb = new StringBuilder("PropertyValues: length=" + pvs.length + "; ");
sb.append(StringUtils.arrayToDelimitedString(pvs, "; "));
StringBuilder sb = new StringBuilder("PropertyValues: length=").append(pvs.length);
if (pvs.length > 0) {
sb.append("; ").append(StringUtils.arrayToDelimitedString(pvs, "; "));
}
return sb.toString();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2009 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.
@@ -55,11 +55,25 @@ public abstract class PropertyAccessException extends BeansException implements
/**
* Return the PropertyChangeEvent that resulted in the problem.
* May be <code>null</code>; only available if an actual bean property
* <p>May be <code>null</code>; only available if an actual bean property
* was affected.
*/
public PropertyChangeEvent getPropertyChangeEvent() {
return this.propertyChangeEvent;
}
/**
* Return the name of the affected property, if available.
*/
public String getPropertyName() {
return (this.propertyChangeEvent != null ? this.propertyChangeEvent.getPropertyName() : null);
}
/**
* Return the affected value that was about to be set, if any.
*/
public Object getValue() {
return (this.propertyChangeEvent != null ? this.propertyChangeEvent.getNewValue() : null);
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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.
@@ -18,6 +18,8 @@ package org.springframework.beans;
import java.util.Map;
import org.springframework.core.convert.TypeDescriptor;
/**
* Common interface for classes that can access named properties
* (such as bean properties of an object or fields in an object)
@@ -86,6 +88,18 @@ public interface PropertyAccessor {
*/
Class getPropertyType(String propertyName) throws BeansException;
/**
* Return a type descriptor for the specified property:
* preferably from the read method, falling back to the write method.
* @param propertyName the property to check
* (may be a nested path and/or an indexed/mapped property)
* @return the property type for the particular property,
* or <code>null</code> if not determinable
* @throws InvalidPropertyException if there is no such property or
* if the property isn't readable
*/
TypeDescriptor getPropertyTypeDescriptor(String propertyName) throws BeansException;
/**
* Get the current value of the specified property.
* @param propertyName the name of the property to get the value of
@@ -134,7 +148,7 @@ public interface PropertyAccessor {
* all individual PropertyAccessExceptions. All other properties will have been
* successfully updated.
*/
void setPropertyValues(Map map) throws BeansException;
void setPropertyValues(Map<?, ?> map) throws BeansException;
/**
* The preferred way to perform a batch update.
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -32,7 +32,8 @@ public abstract class PropertyAccessorUtils {
* @return the actual property name, without any key elements
*/
public static String getPropertyName(String propertyPath) {
int separatorIndex = propertyPath.indexOf(PropertyAccessor.PROPERTY_KEY_PREFIX_CHAR);
int separatorIndex = (propertyPath.endsWith(PropertyAccessor.PROPERTY_KEY_SUFFIX) ?
propertyPath.indexOf(PropertyAccessor.PROPERTY_KEY_PREFIX_CHAR) : -1);
return (separatorIndex != -1 ? propertyPath.substring(0, separatorIndex) : propertyPath);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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,6 +20,7 @@ import java.io.PrintStream;
import java.io.PrintWriter;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
/**
* Combined exception, composed of individual PropertyAccessException instances.
@@ -60,19 +61,18 @@ public class PropertyBatchUpdateException extends BeansException {
/**
* Return an array of the propertyAccessExceptions stored in this object.
* Will return the empty array (not null) if there were no errors.
* <p>Will return the empty array (not <code>null</code>) if there were no errors.
*/
public final PropertyAccessException[] getPropertyAccessExceptions() {
return this.propertyAccessExceptions;
}
/**
* Return the exception for this field, or <code>null</code> if there isn't one.
* Return the exception for this field, or <code>null</code> if there isn't any.
*/
public PropertyAccessException getPropertyAccessException(String propertyName) {
for (int i = 0; i < this.propertyAccessExceptions.length; i++) {
PropertyAccessException pae = this.propertyAccessExceptions[i];
if (propertyName.equals(pae.getPropertyChangeEvent().getPropertyName())) {
for (PropertyAccessException pae : this.propertyAccessExceptions) {
if (ObjectUtils.nullSafeEquals(propertyName, pae.getPropertyName())) {
return pae;
}
}
@@ -136,8 +136,7 @@ public class PropertyBatchUpdateException extends BeansException {
if (exType.isInstance(this)) {
return true;
}
for (int i = 0; i < this.propertyAccessExceptions.length; i++) {
PropertyAccessException pae = this.propertyAccessExceptions[i];
for (PropertyAccessException pae : this.propertyAccessExceptions) {
if (pae.contains(exType)) {
return true;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2010 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.
@@ -25,6 +25,7 @@ import java.net.URI;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.Currency;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -37,26 +38,34 @@ import java.util.Properties;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TimeZone;
import java.util.UUID;
import java.util.regex.Pattern;
import org.xml.sax.InputSource;
import org.springframework.beans.propertyeditors.ByteArrayPropertyEditor;
import org.springframework.beans.propertyeditors.CharArrayPropertyEditor;
import org.springframework.beans.propertyeditors.CharacterEditor;
import org.springframework.beans.propertyeditors.CharsetEditor;
import org.springframework.beans.propertyeditors.ClassArrayEditor;
import org.springframework.beans.propertyeditors.ClassEditor;
import org.springframework.beans.propertyeditors.CurrencyEditor;
import org.springframework.beans.propertyeditors.CustomBooleanEditor;
import org.springframework.beans.propertyeditors.CustomCollectionEditor;
import org.springframework.beans.propertyeditors.CustomMapEditor;
import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.beans.propertyeditors.FileEditor;
import org.springframework.beans.propertyeditors.InputSourceEditor;
import org.springframework.beans.propertyeditors.InputStreamEditor;
import org.springframework.beans.propertyeditors.LocaleEditor;
import org.springframework.beans.propertyeditors.PatternEditor;
import org.springframework.beans.propertyeditors.PropertiesEditor;
import org.springframework.beans.propertyeditors.StringArrayPropertyEditor;
import org.springframework.beans.propertyeditors.TimeZoneEditor;
import org.springframework.beans.propertyeditors.URIEditor;
import org.springframework.beans.propertyeditors.URLEditor;
import org.springframework.beans.propertyeditors.UUIDEditor;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourceArrayPropertyEditor;
@@ -84,6 +93,8 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
private Map<Class, PropertyEditor> defaultEditors;
private Map<Class, PropertyEditor> overriddenDefaultEditors;
private Map<Class, PropertyEditor> customEditors;
private Map<String, CustomEditorHolder> customEditorsForPath;
@@ -132,6 +143,22 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
this.configValueEditorsActive = true;
}
/**
* Override the default editor for the specified type with the given property editor.
* <p>Note that this is different from registering a custom editor in that the editor
* semantically still is a default editor. A ConversionService will override such a
* default editor, whereas custom editors usually override the ConversionService.
* @param requiredType the type of the property
* @param propertyEditor the editor to register
* @see #registerCustomEditor(Class, PropertyEditor)
*/
public void overrideDefaultEditor(Class requiredType, PropertyEditor propertyEditor) {
if (this.overriddenDefaultEditors == null) {
this.overriddenDefaultEditors = new HashMap<Class, PropertyEditor>();
}
this.overriddenDefaultEditors.put(requiredType, propertyEditor);
}
/**
* Retrieve the default editor for the given property type, if any.
* <p>Lazily registers the default editors, if they are active.
@@ -143,34 +170,22 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
if (!this.defaultEditorsActive) {
return null;
}
if (this.overriddenDefaultEditors != null) {
PropertyEditor editor = this.overriddenDefaultEditors.get(requiredType);
if (editor != null) {
return editor;
}
}
if (this.defaultEditors == null) {
doRegisterDefaultEditors();
createDefaultEditors();
}
return this.defaultEditors.get(requiredType);
}
/**
* Actually register the default editors for this registry instance.
* @see org.springframework.beans.propertyeditors.ByteArrayPropertyEditor
* @see org.springframework.beans.propertyeditors.ClassEditor
* @see org.springframework.beans.propertyeditors.CharacterEditor
* @see org.springframework.beans.propertyeditors.CustomBooleanEditor
* @see org.springframework.beans.propertyeditors.CustomNumberEditor
* @see org.springframework.beans.propertyeditors.CustomCollectionEditor
* @see org.springframework.beans.propertyeditors.CustomMapEditor
* @see org.springframework.beans.propertyeditors.FileEditor
* @see org.springframework.beans.propertyeditors.InputStreamEditor
* @see org.springframework.jndi.JndiTemplateEditor
* @see org.springframework.beans.propertyeditors.LocaleEditor
* @see org.springframework.beans.propertyeditors.PropertiesEditor
* @see org.springframework.beans.PropertyValuesEditor
* @see org.springframework.core.io.support.ResourceArrayPropertyEditor
* @see org.springframework.core.io.ResourceEditor
* @see org.springframework.transaction.interceptor.TransactionAttributeEditor
* @see org.springframework.transaction.interceptor.TransactionAttributeSourceEditor
* @see org.springframework.beans.propertyeditors.URLEditor
*/
private void doRegisterDefaultEditors() {
private void createDefaultEditors() {
this.defaultEditors = new HashMap<Class, PropertyEditor>(64);
// Simple editors, without parameterization capabilities.
@@ -178,14 +193,18 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
this.defaultEditors.put(Charset.class, new CharsetEditor());
this.defaultEditors.put(Class.class, new ClassEditor());
this.defaultEditors.put(Class[].class, new ClassArrayEditor());
this.defaultEditors.put(Currency.class, new CurrencyEditor());
this.defaultEditors.put(File.class, new FileEditor());
this.defaultEditors.put(InputStream.class, new InputStreamEditor());
this.defaultEditors.put(InputSource.class, new InputSourceEditor());
this.defaultEditors.put(Locale.class, new LocaleEditor());
this.defaultEditors.put(Pattern.class, new PatternEditor());
this.defaultEditors.put(Properties.class, new PropertiesEditor());
this.defaultEditors.put(Resource[].class, new ResourceArrayPropertyEditor());
this.defaultEditors.put(TimeZone.class, new TimeZoneEditor());
this.defaultEditors.put(URI.class, new URIEditor());
this.defaultEditors.put(URL.class, new URLEditor());
this.defaultEditors.put(UUID.class, new UUIDEditor());
// Default instances of collection editors.
// Can be overridden by registering custom instances of those as custom editors.
@@ -239,9 +258,10 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
* @param target the target registry to copy to
*/
protected void copyDefaultEditorsTo(PropertyEditorRegistrySupport target) {
target.defaultEditors = this.defaultEditors;
target.defaultEditorsActive = this.defaultEditorsActive;
target.configValueEditorsActive = this.configValueEditorsActive;
target.defaultEditors = this.defaultEditors;
target.overriddenDefaultEditors = this.overriddenDefaultEditors;
}
@@ -278,7 +298,9 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry {
* shared editor that might be used concurrently.
* @param requiredType the type of the property
* @param propertyEditor the shared editor to register
* @deprecated as of Spring 3.0, in favor of PropertyEditorRegistrars or ConversionService usage
*/
@Deprecated
public void registerSharedEditor(Class requiredType, PropertyEditor propertyEditor) {
registerCustomEditor(requiredType, null, propertyEditor);
if (this.sharedEditors == null) {
@@ -47,6 +47,8 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
private Object source;
private boolean optional = false;
private boolean converted = false;
private Object convertedValue;
@@ -80,6 +82,7 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
this.name = original.getName();
this.value = original.getValue();
this.source = original.getSource();
this.optional = original.isOptional();
this.converted = original.converted;
this.convertedValue = original.convertedValue;
this.conversionNecessary = original.conversionNecessary;
@@ -99,6 +102,7 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
this.name = original.getName();
this.value = newValue;
this.source = original;
this.optional = original.isOptional();
this.conversionNecessary = original.conversionNecessary;
this.resolvedTokens = original.resolvedTokens;
this.resolvedDescriptor = original.resolvedDescriptor;
@@ -136,6 +140,14 @@ public class PropertyValue extends BeanMetadataAttributeAccessor implements Seri
return original;
}
public void setOptional(boolean optional) {
this.optional = optional;
}
public boolean isOptional() {
return this.optional;
}
/**
* Return whether this holder contains a converted value already (<code>true</code>),
* or whether the value still needs to be converted (<code>false</code>).
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 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.
@@ -39,6 +39,16 @@ public interface PropertyValues {
*/
PropertyValue getPropertyValue(String propertyName);
/**
* Return the changes since the previous PropertyValues.
* Subclasses should also override <code>equals</code>.
* @param old old property values
* @return PropertyValues updated or new properties.
* Return empty PropertyValues if there are no changes.
* @see java.lang.Object#equals
*/
PropertyValues changesSince(PropertyValues old);
/**
* Is there a property value (or other processing entry) for this property?
* @param propertyName the name of the property we're interested in
@@ -51,14 +61,4 @@ public interface PropertyValues {
*/
boolean isEmpty();
/**
* Return the changes since the previous PropertyValues.
* Subclasses should also override <code>equals</code>.
* @param old old property values
* @return PropertyValues updated or new properties.
* Return empty PropertyValues if there are no changes.
* @see java.lang.Object#equals
*/
PropertyValues changesSince(PropertyValues old);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -17,6 +17,8 @@
package org.springframework.beans;
import org.springframework.core.MethodParameter;
import org.springframework.core.convert.ConversionException;
import org.springframework.core.convert.ConverterNotFoundException;
/**
* Simple implementation of the TypeConverter interface that does not operate
@@ -46,12 +48,18 @@ public class SimpleTypeConverter extends PropertyEditorRegistrySupport implement
try {
return this.typeConverterDelegate.convertIfNecessary(value, requiredType, methodParam);
}
catch (IllegalArgumentException ex) {
catch (ConverterNotFoundException ex) {
throw new ConversionNotSupportedException(value, requiredType, ex);
}
catch (ConversionException ex) {
throw new TypeMismatchException(value, requiredType, ex);
}
catch (IllegalStateException ex) {
throw new ConversionNotSupportedException(value, requiredType, ex);
}
catch (IllegalArgumentException ex) {
throw new TypeMismatchException(value, requiredType, ex);
}
}
}

Some files were not shown because too many files have changed in this diff Show More