Commit Graph

747 Commits

Author SHA1 Message Date
Oliver Drotbohm
753d8bbb33 DATACMNS-1497 - Configuration infrastructure now considers scanning BeanNameGenerator.
We now implement the newly introduced ImportBeanDefinitionRegistrar overload additional provided with a BeanNameGenerator configured for the import scanning. We forward this into our bean name generation infrastructure as fallback.

Related tickets: spring-projects/spring-framework#22591
2019-04-03 10:20:47 +02:00
Spring Operator
48c9297118 DATACMNS-1500 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
  https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 701 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).

Original Pull Request: #387
2019-03-22 11:00:44 +01:00
Spring Operator
38c2ec0ae3 DATACMNS-1500 - URL Cleanup.
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://help.eclipse.org/oxygen/index.jsp?topic=/org.eclipse.jdt.doc.user/tasks/task-using_external_null_annotations.htm (200) with 1 occurrences could not be migrated:
   ([https](https://help.eclipse.org/oxygen/index.jsp?topic=/org.eclipse.jdt.doc.user/tasks/task-using_external_null_annotations.htm) result SSLException).
* [ ] http://www.querydsl.com (200) with 2 occurrences could not be migrated:
   ([https](https://www.querydsl.com) result AnnotatedConnectException).
* [ ] http://www.querydsl.com/ (200) with 2 occurrences could not be migrated:
   ([https](https://www.querydsl.com/) result AnnotatedConnectException).
* [ ] http://xml.org/sax/features/external-general-entities (301) with 1 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/external-general-entities) result SSLHandshakeException).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://www.w3.org/2001/03/xml.xsd (ReadTimeoutException) with 1 occurrences migrated to:
  https://www.w3.org/2001/03/xml.xsd ([https](https://www.w3.org/2001/03/xml.xsd) result SSLException).
* [ ] http://www.w3.org/XML/1998/namespace (ReadTimeoutException) with 1 occurrences migrated to:
  https://www.w3.org/XML/1998/namespace ([https](https://www.w3.org/XML/1998/namespace) result SSLException).
* [ ] http://foo:9090 (UnknownHostException) with 2 occurrences migrated to:
  https://foo:9090 ([https](https://foo:9090) result UnknownHostException).
* [ ] http://http://www.querydsl.com (UnknownHostException) with 1 occurrences migrated to:
  https://http://www.querydsl.com ([https](https://https://www.querydsl.com) result UnknownHostException).
* [ ] http://apache.org/xml/features/disallow-doctype-decl (404) with 1 occurrences migrated to:
  https://apache.org/xml/features/disallow-doctype-decl ([https](https://apache.org/xml/features/disallow-doctype-decl) result 404).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html ([https](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) result 200).
* [ ] http://docs.spring.io/spring/docs/ with 1 occurrences migrated to:
  https://docs.spring.io/spring/docs/ ([https](https://docs.spring.io/spring/docs/) result 200).
* [ ] http://github.com/spring-projects/spring-data-commons with 1 occurrences migrated to:
  https://github.com/spring-projects/spring-data-commons ([https](https://github.com/spring-projects/spring-data-commons) result 200).
* [ ] http://goessner.net/articles/JsonPath/ with 1 occurrences migrated to:
  https://goessner.net/articles/JsonPath/ ([https](https://goessner.net/articles/JsonPath/) result 200).
* [ ] http://projects.spring.io/spring-data/ with 2 occurrences migrated to:
  https://projects.spring.io/spring-data/ ([https](https://projects.spring.io/spring-data/) result 200).
* [ ] http://stackoverflow.com/questions/tagged/spring-data with 2 occurrences migrated to:
  https://stackoverflow.com/questions/tagged/spring-data ([https](https://stackoverflow.com/questions/tagged/spring-data) result 200).
* [ ] http://www.regular-expressions.info/unicode.html with 2 occurrences migrated to:
  https://www.regular-expressions.info/unicode.html ([https](https://www.regular-expressions.info/unicode.html) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context.xsd with 8 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context.xsd ([https](https://www.springframework.org/schema/context/spring-context.xsd) result 200).
* [ ] http://www.springframework.org/schema/data/repository/spring-repository.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/data/repository/spring-repository.xsd ([https](https://www.springframework.org/schema/data/repository/spring-repository.xsd) result 200).
* [ ] http://www.vavr.io/ with 2 occurrences migrated to:
  https://www.vavr.io/ ([https](https://www.vavr.io/) result 200).
* [ ] http://contributor-covenant.org with 1 occurrences migrated to:
  https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301).
* [ ] http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to:
  https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301).
* [ ] http://docs.spring.io/spring-data/data-commons/docs/current/reference/html/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-data/data-commons/docs/current/reference/html/ ([https](https://docs.spring.io/spring-data/data-commons/docs/current/reference/html/) result 301).
* [ ] http://help.github.com/forking/ with 1 occurrences migrated to:
  https://help.github.com/forking/ ([https](https://help.github.com/forking/) result 301).
* [ ] http://projects.spring.io/spring-data with 1 occurrences migrated to:
  https://projects.spring.io/spring-data ([https](https://projects.spring.io/spring-data) result 301).
* [ ] http://www.atomenabled.org/developers/syndication/atom-format-spec.php with 1 occurrences migrated to:
  https://www.atomenabled.org/developers/syndication/atom-format-spec.php ([https](https://www.atomenabled.org/developers/syndication/atom-format-spec.php) result 301).
* [ ] http://www.springframework.org/schema/data/jpa/spring-jpa.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/data/jpa/spring-jpa.xsd ([https](https://www.springframework.org/schema/data/jpa/spring-jpa.xsd) result 301).
* [ ] http://www.springframework.org/schema/oxm/spring-oxm.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/oxm/spring-oxm.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm.xsd) result 301).
* [ ] http://www.threeten.org/threetenbp with 2 occurrences migrated to:
  https://www.threeten.org/threetenbp ([https](https://www.threeten.org/threetenbp) result 301).
* [ ] http://www.xmlbeam.org with 2 occurrences migrated to:
  https://www.xmlbeam.org ([https](https://www.xmlbeam.org) result 301).
* [ ] http://www.springsource.org/download with 1 occurrences migrated to:
  https://www.springsource.org/download ([https](https://www.springsource.org/download) result 302).

# Ignored
These URLs were intentionally ignored.

* http://localhost:8080/persons with 1 occurrences
* http://localhost:8080/persons?page=1&size=20 with 1 occurrences
* http://localhost:8080?page=0&size=10 with 1 occurrences
* http://www.springframework.org/schema/beans with 8 occurrences
* http://www.springframework.org/schema/context with 16 occurrences
* http://www.springframework.org/schema/data/jaxb with 3 occurrences
* http://www.springframework.org/schema/data/jpa with 4 occurrences
* http://www.springframework.org/schema/data/repository with 20 occurrences
* http://www.springframework.org/schema/oxm with 2 occurrences
* http://www.springframework.org/schema/tool with 16 occurrences
* http://www.w3.org/1999/xhtml with 1 occurrences
* http://www.w3.org/2001/XMLSchema with 10 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 4 occurrences
* http://www.w3.org/2005/Atom with 4 occurrences

Original Pull Request: #367
2019-03-21 08:26:30 +01:00
Oliver Drotbohm
e9f77d6046 DATACMNS-1499 - Added new convenience factory methods on Range. 2019-03-14 13:25:49 +01:00
Oliver Drotbohm
4e6b12fc8a DATACMNS-1498 - Improved attribute lookup on RepositoryConfigurationSource. 2019-03-14 12:48:35 +01:00
Oliver Drotbohm
0bf160eb97 DATACMNS-1496 - Removed deprecations at least introduced in Lovelace. 2019-03-13 18:29:08 +01:00
Oliver Drotbohm
ea3af3dbbb DATACMNS-1449 - MethodInvocationRecorder now rejects final types. 2019-03-05 14:37:59 +01:00
Oliver Drotbohm
34507ec000 DATACMNS-1450 - Introduced type-safe Sort API.
We now expose a TypedSort that can use method handles to define properties to sort by.

Sort.sort(Person.class).by(Person::getName).ascending();

Related tickets: DATACMNS-1449.
2019-03-05 13:50:49 +01:00
Oliver Gierke
34d95fb7e4 DAATCMNS-1449 - Added API to record method invocations.
Introduced MethodInvocationRecorder to record method invocations on types to obtain the property traversal those invocations represent.

Recorded<ZipCode> recorded = MethodInvocationRecorder.forProxyOf(Person.class)
  .record(Person::getAddress)
  .record(Address::getZipCode);

assertThat(recorded.getPropertyPath)).hasValue("address.zipCode");
2019-03-05 13:50:49 +01:00
Oliver Drotbohm
435aaaaa35 DATACMNS-1470 - Adapt to package refactorings in Spring HATEOAS. 2019-02-28 08:00:11 +01:00
Oliver Drotbohm
dd0848b186 DATACMNS-1484 - Fixed too aggressive conversion to Streamable in IterableToStreamableConverter.
We now explicitly check for the target type to be assignable to Streamable to opt into conversion. Without that check, every collection returned from a method declaring Iterable as return type would've been converted into a Streamable by accident.

Related ticket: DATACMNS-1430.
2019-02-21 00:26:44 +01:00
Oliver Drotbohm
d12801a7b0 DATACMNS-1482 - Polishing.
Slightly improved test case.
2019-02-20 14:11:41 +01:00
Jens Schauder
6dc0ced366 DATACMNS-1482 - Properly convert collections when collection type matches but element type doesn't.
Various fast returns and the use of Class instead of TypeDescriptor led to e.g. List<BigDecimal> not getting properly converted to List<Integer> leading to unexpected ClassCastExceptions when the collection elements where accessed.
2019-02-20 13:55:09 +01:00
Oliver Drotbohm
092e23b08c DATACMNS-1470 - Further adaption of Spring HATEOAS 1.0 API changes. 2019-02-15 11:07:10 +01:00
Mark Paluch
aa39b9ba3a DATACMNS-1451 - Consider more than 16 immutable Kotlin properties in generated PropertyAccessor.
We now consider more than 16 immutable and nullable Kotlin properties per bucket in generated PropertyAccessors.

Previously only the first 16 properties were considered due to truncation of the defaulting bitmap. We used SIPUSH to render the defaulting mask in bytecode which is intended for 16 bit integers (short). Migrating to LDC (runtime constants) preserves the actual constant value of 32 bits and so we're considering now full buckets.
2019-02-13 12:01:22 +01:00
Greg Turnquist
8c076f921d DATACMNS-1470 - Upgrade to Spring HATEOAS 1.0 API 2019-02-02 00:09:48 +01:00
Oliver Drotbohm
e3d80aa69a DATACMNS-1476 - Polishing. 2019-01-28 11:05:29 +01:00
Oliver Drotbohm
8c75a92b24 DATACMNS-1476 - Added Slice.nextOrLastPageable() and ….previousOrFirstPageable().
We now expose methods that allow to traverse the Pageables but make sure we stay within the result bounds.

Related ticket: DATACMNS-1475.
2019-01-28 11:05:29 +01:00
Oliver Drotbohm
1b0f9b8c62 DATACMNS-1439 - Polishing.
Extended copyright years. More reasonable defaults in the mock implementation of ImplementationDetectionConfiguration in case someone might want to reuse it in other test cases.

Original pull request: #325.
2019-01-15 12:57:18 +01:00
Mark Paluch
9fe35a24c9 DATACMNS-1439 - Use Java Beans decapitalization for default repository implementation bean names.
We now use Java Beans Introspector during default bean name derivation from class names. Previously, we used String.decapitalize(…) which decapitalizes always the first character. Java Beans do not decapitalize upper case sequences so a class name com.acme.UDPRepository translates to a bean name with UDPRepository instead of uDPRepository.

Original pull request: #325.
2019-01-15 12:57:18 +01:00
Oliver Drotbohm
e0c08e64e8 DATACMNS-1466 - Fixed potential ArrayIndexOutOfBoundsException in DefaultPersistentPropertyPath.
Introduced explicit content checks in ….getLeafProperty() and ….getBaseProperty().
2019-01-11 11:48:23 +01:00
Mark Paluch
1969f4bcdc DATACMNS-1459 - Update copyright years to 2019. 2019-01-02 12:12:19 +01:00
Oliver Drotbohm
566e6a3258 DATACMNS-1455 - HateoasPageableHandlerMethodArgumentResolver handles Pageable.unpaged() coprrectly.
Pageable.unpaged() is now effectively handled like a null value given in the 1.x branch.
2018-12-21 09:55:11 +01:00
Oliver Drotbohm
bb44322b3a DATACMNS-1453 - Polishing.
Renamed test methods and made use of AssertJ assertions to verify exceptions being thrown.

Original pull request: #328.
2018-12-20 15:53:20 +01:00
Francisco Soler
789099f6b9 DATACMNS-1453 - Fixed wrong assertion in AuditingBeanDefinitionRegistrarSupport.
Original pull request: #328.
2018-12-20 15:52:06 +01:00
Oliver Drotbohm
d8705c1cca DATACMNS-1448 - Repositories now favors primary repositories.
If multiple repositories pointing to a single domain type are found we now favor the one registered as primary bean definition. This allows allows reliable disambiguation on which repository is supposed to be used for generic repository interactions.

Related tickets: DATAREST-923.
2018-12-12 22:33:02 +01:00
Oliver Drotbohm
97390a1eef DATACMNS-1447 - Streamable now exposes Collectors.
Added Streamable.toStreamable() and ….toStreamable(Collector) to allow the creation of a Streamable from streams wither using a default List-based intermediate collector (former) or providing an explicit one (latter).
2018-12-12 11:26:15 +01:00
Oliver Drotbohm
f2967a919e DATACMNS-1443 - Fixed Querydsl web data binding for blank strings.
We now use StringUtils.hasLength(…) in the check whether to drop request elements from binding instead of ….hasText(…) as the latter drops blank strings so that's impossible to search for properties that contain a blank.
2018-12-10 16:55:26 +01:00
Oliver Drotbohm
4537c11eba DATACMNS-1440 - Added converters to parse LocalDate(Time) and Instant from their toString() representation. 2018-12-08 12:28:00 +01:00
Oliver Drotbohm
e6213135e2 DATACMNS-1438 - Integration test showing that auditing is working in general. 2018-12-06 10:35:49 +01:00
Oliver Drotbohm
75c9ab0a63 DATACMNS-1430 - Tweaked TypeDiscoverer to consider subtypes of Streamable collection like. 2018-12-04 15:43:54 +01:00
Oliver Drotbohm
db6e4cc024 DATACMNS-1434 - Removed Javaslang support. 2018-12-04 14:05:24 +01:00
Oliver Drotbohm
a3a5c8e484 DATACMNS-1433 - Added additional Streamable.and(…) flavors for convenience.
Removed superfluous Streamable creation from DefaultImplementationlookupConfiguration.
2018-12-04 12:46:06 +01:00
Oliver Drotbohm
9b39f51635 DATACMNS-1432 - Added Streamable.toList() and ….toSet() for convenience. 2018-12-04 12:40:14 +01:00
Oliver Drotbohm
cf1eaff784 DATACMNS-1430 - Support for returning wrapper types of Streamable.
Extended IterableToStreamableConverter in use in QueryExecutionConverters so that it can not only return Streamable instances but also instances of types that have a factory method or constructor taking a Streamable (by making use of the ObjectToObjectConverter in a default ConversionService).
2018-12-04 11:47:56 +01:00
Oliver Drotbohm
840addcdbe DATACMNS-993 - Polishing.
Removed System.out in ShadowingClassLoader.
2018-12-04 11:43:38 +01:00
Mark Paluch
596b0d8177 DATACMNS-1422 - Fall back to reflection-based PropertyAccessor/EntityInstantiator on inaccessible framework types.
We now fall back to reflection-based PropertyAccessor/EntityInstantiator strategies when framework types are not visible by the entity's ClassLoader.

Typically, we use class generation to create and load PropertyAccessor and EntityInstantiator classes to bypass reflection. Generated types are injected into the ClassLoader that has loaded the actual entity. Generated classes implement framework types such as ObjectInstantiator and these interfaces must be visible to the ClassLoader that hosts the generated class. Some arrangements, such as OSGi isolate class repositories so the OSGi class loader cannot load our own types which prevents loading the generated class.

Original pull request: #324.
2018-11-23 15:19:54 +01:00
Mark Paluch
5bbb458dc5 DATACMNS-1421 - Lookup most specific wither method for a property.
We now inspect all methods that match the wither method pattern (name, accepting a single argument) to find the most specific method returning the actual entity type.

Previously, we attempted to find a method only considering name and argument properties and not the return type. This lookup strategy could find a method returning the entity super type that isn't assignable to the entity type.

Original pull request: #323.
2018-11-19 19:46:03 +01:00
Oliver Drotbohm
9d16739943 DATACMNS-1419 - Added TypeInformation.isSubtypeOf(…). 2018-11-19 19:21:33 +01:00
Mark Paluch
fc4b2d1deb DATACMNS-1402 - Fix invocation of default Kotlin constructor.
We now correctly calculate the number of defaulting masks used to represent constructor arguments. Previously, we've been one off which caused that Kotlin classes with 32/33 parameters weren't able to be instantiated.

We also now reuse KotlinDefaultMask to apply defaulting calculation and removed code duplicates.
2018-10-04 14:38:28 +02:00
Oliver Gierke
3d6e3dbcc0 DATACMNS-1399 - Fixed unit tests after change in exception message.
Original pull request: #313.
2018-10-01 10:29:49 +02:00
Mark Paluch
7eacab6a34 DATACMNS-1391 - Use prefered constructors to discover Kotlin's copy method.
We now use the primary constructor of Kotlin classes to discover the copy method. We use the primary constructor args to compare signatures and only use the copy method that takes all parameters in the constructor args order. This allows to find the appropriate copy method in case the class declares multiple copy methods.

We now also cache the copy method (KCallable) to reduce lookups in BeanWrapper.

Original pull request: #312.
2018-09-18 18:34:57 +02:00
Oliver Gierke
8b6cc3af11 DATACMNS-1386 - Avoid strong type dependency to Jackson in SpringDataWebConfiguration.
We now avoid using a Lambda to provide a default ObjectMapper instance in the code that's reflectively guarded against Jackson not being present. The lambda causes a method to be generated for the class that will require ObjectMapper to be present on reflection inspection of that method. Switching to a method reference to ObjectMapper's constructor resolves that problem as the indirection via the additional, offending method is not needed.

Further reading: https://www.javabullets.com/how-lambdas-and-anonymous-inner-classesaic-work/
2018-09-07 12:09:29 +02:00
Oliver Gierke
3dacaf64d8 DATACMNS-1384 - Support for j.u.Date and j.s.Timestamp in AnnotationRevisionMetadata.
We now properly convert legacy Date instances into Instants to expose the revision date. Support for Timestamp is transparent as it extends Date.
2018-09-01 18:34:56 +02:00
Oliver Gierke
1d4a53dc28 DATACMNS-1383 - Parameters now properly detects Pageable and Sort extensions.
One of the constructors of Pageable wasn't properly checking for assignability of Pageable parameters to detect them but was expecting Pageable itself being used under all circumstances. This has now been opened up by an assignability check.
2018-08-30 16:04:02 +02:00
Mark Paluch
ee64225be0 DATACMNS-1174 - Reject reactive repository implementation by default.
We now reject reactive repository metadata by RepositoryConfigurationExtensionSupport.useRepositoryConfiguration(…) assuming that Spring Data modules provide only imperative repository support by default. Reactive store modules are required to override useRepositoryConfiguration(…) anyway to not accidentally implement imperative repositories with a reactive Repository extension.
2018-08-29 12:01:31 +02:00
Oliver Gierke
f00d5b9ac6 DATACMNS-1376 - Polishing.
Moved JVM version lookup into Version.

Original pull request: #307.
2018-08-17 13:09:04 +02:00
Mark Paluch
0d39693c94 DATACMNS-1376 - Fix illegal access warning in DefaultMethodInvokingMethodInterceptor on Java 9 and higher.
We now attempt to use private MethodHandles lookup as the first mechanism to resolve a MethodHandle for default interface methods and fall back to reflection-based Lookup construction if private lookup is not available. Reflective availability is checked lazily to prevent illegal access on enum constant construction. This approach prevents an illegal access which was logged by attempting a reflection-based lookup first.

We also introduced a FALLBACK mechanism to split encapsulated access from a fallback mechanism.

Original pull request: #307.
2018-08-17 13:08:30 +02:00
Mark Paluch
9478441dbd DATACMNS-1373 - Use ReflectUtils.defineClass(…) to load generated EntityInstantiators.
We now use Spring's ReflectUtils.defineClass(…) to load generated EntityInstantiators which uses internally either MethodHandles.Lookup.defineClass(…) (on Java 9 and higher) or reflective defineClass invocation on the originating ClassLoader. Class injection into the originating ClassLoader assigns the ClassLoader of the entity to the generated class which allows optimized instantiation of package-protected classes and constructors.

Original pull request: #308.
2018-08-17 12:56:08 +02:00
Oliver Gierke
b0eb0c47d2 DATACMNS-1377 - ConvertingPropertyAccessor now properly coverts values for property paths.
Previously, ConvertingPropertyAccessor did not override PersistentPropertyAccessor.setProperty(PersistentPropertyPath, Object), so that the target value had to be of the leaf property's type. We now implement that method and convert it into that type before invoking the super method.
2018-08-17 11:47:31 +02:00