This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 74884907f2 CAUSEWAY-2297: backport from spring6 branch:
74884907f2 is described below
commit 74884907f2bf169d9689d994a46c479370955a99
Author: andi-huber <[email protected]>
AuthorDate: Sat Feb 10 10:24:26 2024 +0100
CAUSEWAY-2297: backport from spring6 branch:
- deal with deprecations (JDK and other)
- some methods had been deprecated between java 11 and 21 (Thread, URL,
Locale, ...)
---
.../causeway/applib/value/LocalResourcePath.java | 10 ++++-----
.../applib/services/user/UserMemento_Test.java | 24 +++++++++++----------
.../commons/internal/hardening/_Hardening.java | 25 ----------------------
.../causeway/commons/internal/os/_OsUtil.java | 2 +-
.../commons/internal/resources/_Resources.java | 22 ++++++++++++++++---
.../metamodel/objectmanager/ObjectCreator.java | 3 +--
.../core/metamodel/spec/feature/ObjectMember.java | 3 +--
.../causeway/core/metamodel/util/Facets.java | 3 +--
.../valuesemantics/URLValueSemantics.java | 20 ++++++-----------
.../services/AbstractRandomValueGenerator.java | 6 ++++++
.../fakedata/applib/services/Collections.java | 2 +-
.../testing/fakedata/applib/services/Doubles.java | 9 ++++----
.../testing/fakedata/applib/services/Floats.java | 8 +++----
.../testing/fakedata/applib/services/Integers.java | 6 ++----
.../testing/fakedata/applib/services/Longs.java | 6 ++----
.../testing/fakedata/applib/services/Urls.java | 14 +++++-------
.../applib/jmocking/CausewayActions.java | 10 +++++----
.../applib/soap/SoapEndpointSpec.java | 10 ++++-----
...ockery2Test_mockAnnotatedWithNever_sadCase.java | 1 -
.../projectmodel/maven/SimpleModelResolver.java | 19 ++++++++--------
.../viewer/restfulobjects/applib/util/Parser.java | 9 ++++++--
21 files changed, 98 insertions(+), 114 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
b/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
index ac3b5f538b..05976c74cb 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
@@ -29,8 +29,7 @@ import org.springframework.lang.Nullable;
import org.apache.causeway.applib.CausewayModuleApplib;
import org.apache.causeway.applib.annotation.Value;
-import org.apache.causeway.commons.internal.base._Blackhole;
-import org.apache.causeway.commons.internal.hardening._Hardening;
+import org.apache.causeway.commons.internal.resources._Resources;
import lombok.Getter;
import lombok.NonNull;
@@ -124,9 +123,10 @@ public final class LocalResourcePath implements
Serializable {
}
try {
// path syntax check
-
_Blackhole.consume(_Hardening.toUrlWithXssGuard("http://localhost/"+path));
- } catch (IllegalArgumentException e) {
- throw new IllegalArgumentException(String.format("the given local
path has an invalid syntax: '%s'", path), e);
+ _Resources.url("http://localhost/"+path);
+ } catch (Exception e) {
+ throw new IllegalArgumentException(
+ String.format("the given local path has an invalid syntax:
'%s'", path), e);
}
}
diff --git
a/api/applib/src/test/java/org/apache/causeway/applib/services/user/UserMemento_Test.java
b/api/applib/src/test/java/org/apache/causeway/applib/services/user/UserMemento_Test.java
index 35ebf8531c..df2b251a65 100644
---
a/api/applib/src/test/java/org/apache/causeway/applib/services/user/UserMemento_Test.java
+++
b/api/applib/src/test/java/org/apache/causeway/applib/services/user/UserMemento_Test.java
@@ -24,6 +24,8 @@ import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
+import static org.apache.causeway.commons.internal.resources._Resources.url;
+
import lombok.val;
class UserMemento_Test {
@@ -93,7 +95,7 @@ class UserMemento_Test {
void user_and_roles_and_avatarUrl_preserved_and_real_name_set() throws
MalformedURLException {
// copy
val userMemento = UserMemento.ofNameAndRoleNames("fredflintstone",
"CAVEMAN", "HUSBAND")
- .withAvatarUrl(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
.withAvatarUrl(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
// when
val userMemento2 = userMemento.withRealName("Fred Flintstone");
@@ -106,7 +108,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento2.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("CAVEMAN"));
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("HUSBAND"));
- Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
Assertions.assertThat(userMemento2.getRealName()).isEqualTo("Fred
Flintstone");
// then original unchanged
@@ -114,7 +116,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento.streamRoleNames()).anyMatch(x ->
x.equals("CAVEMAN"));
Assertions.assertThat(userMemento.streamRoleNames()).anyMatch(x ->
x.equals("HUSBAND"));
- Assertions.assertThat(userMemento.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
Assertions.assertThat(userMemento.getRealName()).isNull();
}
}
@@ -129,7 +131,7 @@ class UserMemento_Test {
val userMemento = UserMemento.ofNameAndRoleNames("fredflintstone",
"CAVEMAN", "HUSBAND");
// when
- val userMemento2 = userMemento.withAvatarUrl(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+ val userMemento2 =
userMemento.withAvatarUrl(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
// then copy created
Assertions.assertThat(userMemento2).isNotSameAs(userMemento);
@@ -139,7 +141,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento2.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("CAVEMAN"));
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("HUSBAND"));
- Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
// then original unchanged
Assertions.assertThat(userMemento.getName()).isEqualTo("fredflintstone");
@@ -156,7 +158,7 @@ class UserMemento_Test {
val userMemento = UserMemento.ofNameAndRoleNames("fredflintstone",
"CAVEMAN", "HUSBAND").withRealName("Fred Flintstone");
// when
- val userMemento2 = userMemento.withAvatarUrl(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+ val userMemento2 =
userMemento.withAvatarUrl(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
// then copy created
Assertions.assertThat(userMemento2).isNotSameAs(userMemento);
@@ -166,7 +168,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento2.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("CAVEMAN"));
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("HUSBAND"));
- Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
Assertions.assertThat(userMemento2.getRealName()).isEqualTo("Fred
Flintstone");
// then original unchanged
@@ -265,7 +267,7 @@ class UserMemento_Test {
val userMemento = UserMemento.ofName("fredflintstone")
.withRoleAdded("CAVEMAN")
.withRoleAdded("HUSBAND")
- .withAvatarUrl(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"))
+
.withAvatarUrl(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"))
.withRealName("Fred Flintstone")
.withMultiTenancyToken("/USA/Bedrock")
;
@@ -275,7 +277,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento.streamRoleNames()).anyMatch(x ->
x.equals("CAVEMAN"));
Assertions.assertThat(userMemento.streamRoleNames()).anyMatch(x ->
x.equals("HUSBAND"));
- Assertions.assertThat(userMemento.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
Assertions.assertThat(userMemento.getRealName()).isEqualTo("Fred
Flintstone");
Assertions.assertThat(userMemento.isImpersonating()).isFalse();
@@ -290,7 +292,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento2.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("CAVEMAN"));
Assertions.assertThat(userMemento2.streamRoleNames()).anyMatch(x
-> x.equals("HUSBAND"));
- Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento2.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
Assertions.assertThat(userMemento2.getRealName()).isEqualTo("Fred
Flintstone");
Assertions.assertThat(userMemento2.isImpersonating()).isTrue();
Assertions.assertThat(userMemento2.getMultiTenancyToken()).isEqualTo("/USA/Bedrock");
@@ -300,7 +302,7 @@ class UserMemento_Test {
Assertions.assertThat(userMemento.getRoles().size()).isEqualTo(2);
Assertions.assertThat(userMemento.streamRoleNames()).anyMatch(x ->
x.equals("CAVEMAN"));
Assertions.assertThat(userMemento.streamRoleNames()).anyMatch(x ->
x.equals("HUSBAND"));
- Assertions.assertThat(userMemento.getAvatarUrl()).isEqualTo(new
java.net.URL("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
+
Assertions.assertThat(userMemento.getAvatarUrl()).isEqualTo(url("https://upload.wikimedia.org/wikipedia/en/a/ad/Fred_Flintstone.png"));
Assertions.assertThat(userMemento.getRealName()).isEqualTo("Fred
Flintstone");
Assertions.assertThat(userMemento.isImpersonating()).isFalse();
Assertions.assertThat(userMemento.getMultiTenancyToken()).isEqualTo("/USA/Bedrock");
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/hardening/_Hardening.java
b/commons/src/main/java/org/apache/causeway/commons/internal/hardening/_Hardening.java
index 23ad2c5e01..984bf6f129 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/hardening/_Hardening.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/hardening/_Hardening.java
@@ -18,10 +18,6 @@
*/
package org.apache.causeway.commons.internal.hardening;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Optional;
-
import org.jsoup.Jsoup;
import org.jsoup.safety.Safelist;
import org.springframework.lang.Nullable;
@@ -35,27 +31,6 @@ import org.apache.causeway.commons.internal.base._Strings;
*/
public class _Hardening {
- // -- XSS GUARDS
-
- /**
- * @throws IllegalArgumentException - when an XSS attack is encountered,
or the URL is not parseable
- * @implNote unfortunately has potential for false positives; but shall do
for now
- */
- public static Optional<URL> toUrlWithXssGuard(final @Nullable String
untrustedUrl) {
- if(_Strings.isEmpty(untrustedUrl)) {
- return Optional.empty();
- }
- if(_Strings.condenseWhitespaces(untrustedUrl.toLowerCase(),
"").contains("javascript:")) {
- // simple guard against XSS attacks like javascript:alert(document)
- throw new IllegalArgumentException("Not parseable as an URL ('" +
untrustedUrl + "').");
- }
- try {
- return Optional.of(new java.net.URL(untrustedUrl));
- } catch (final MalformedURLException ex) {
- throw new IllegalArgumentException("Not parseable as an URL ('" +
untrustedUrl + "').", ex);
- }
- }
-
/**
* @see "https://jsoup.org/cookbook/cleaning-html/safelist-sanitizer"
*/
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
b/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
index 2c28ec3fde..243b64b4f6 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/os/_OsUtil.java
@@ -139,7 +139,7 @@ public class _OsUtil {
default:
throw _Exceptions.unsupportedOperation("OS " + os + " not (yet)
supported");
}
- rt.exec(cmd);
+ rt.exec(new String[]{cmd});
}
/**
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/resources/_Resources.java
b/commons/src/main/java/org/apache/causeway/commons/internal/resources/_Resources.java
index 5294c55962..3dc065dca9 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/resources/_Resources.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/resources/_Resources.java
@@ -20,6 +20,7 @@ package org.apache.causeway.commons.internal.resources;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
@@ -50,6 +51,24 @@ import lombok.val;
*/
public final class _Resources {
+ // -- URL UTILITY
+
+ /**
+ * Returns {@code null} for {@code null}. Throws on invalid input.
+ * @implNote XSS detection has potential for false positives
+ */
+ @SneakyThrows
+ public static URL url(final @Nullable String url) {
+ if(url == null) {
+ return null;
+ }
+ // simple guard against XSS attacks like javascript:alert(document)
+ if(_Strings.condenseWhitespaces(url.toLowerCase(),
"").contains("javascript:")) {
+ throw new IllegalArgumentException("Not parseable as an URL ('" +
url + "').");
+ }
+ return new URI(url).toURL();
+ }
+
// -- CLASS PATH RESOURCE LOADING
/**
@@ -166,7 +185,4 @@ public final class _Resources {
return name;
}
-
-
-
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
index 3186cdde8f..1d1e05961c 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
@@ -21,7 +21,6 @@ package org.apache.causeway.core.metamodel.objectmanager;
import java.lang.reflect.Array;
import java.lang.reflect.Modifier;
-import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.commons.internal.factory._InstanceUtil;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -101,7 +100,7 @@ interface ObjectCreator {
try {
- val newInstance = _InstanceUtil.createInstance(type,
_Constants.emptyObjects);
+ val newInstance = _InstanceUtil.createInstance(type);
return newInstance;
} catch (Exception e) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
index e7f6cd3f19..151ec4fa72 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectMember.java
@@ -28,7 +28,6 @@ import java.util.stream.Stream;
import org.apache.causeway.applib.annotation.CollectionLayout;
import org.apache.causeway.applib.annotation.TableDecorator;
import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._Casts;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.base._Strings;
@@ -293,7 +292,7 @@ public interface ObjectMember extends ObjectFeature {
}
val pojoComparator = _Casts.<Comparator<Object>>uncheckedCast(
- _InstanceUtil.createInstance(sortedBy,
_Constants.emptyObjects));
+ _InstanceUtil.createInstance(sortedBy));
getMetaModelContext().getServiceInjector().injectServicesInto(pojoComparator);
return Optional.of((a, b) -> pojoComparator.compare(a.getPojo(),
b.getPojo()));
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
index 5a92042cd2..35f3a29586 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
@@ -36,7 +36,6 @@ import org.apache.causeway.applib.id.LogicalType;
import org.apache.causeway.applib.layout.grid.bootstrap.BSGrid;
import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._Casts;
import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
@@ -365,7 +364,7 @@ public final class Facets {
.stream()
.map(TableDecoratorFacet::value)
.map(decoratorClass -> {
- val decorator =
_InstanceUtil.createInstance(decoratorClass, decoratorClass,
_Constants.emptyObjects);
+ val decorator =
_InstanceUtil.createInstance(decoratorClass, decoratorClass);
return facetHolders[0].injectServicesInto(decorator);
})
.findFirst();
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
index e458ea5801..ac3e2f2965 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
@@ -18,7 +18,6 @@
*/
package org.apache.causeway.core.metamodel.valuesemantics;
-import java.net.MalformedURLException;
import java.net.URL;
import javax.annotation.Priority;
@@ -34,11 +33,10 @@ import
org.apache.causeway.applib.value.semantics.ValueSemanticsAbstract;
import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.hardening._Hardening;
+import org.apache.causeway.commons.internal.resources._Resources;
import org.apache.causeway.schema.common.v2.ValueType;
import lombok.SneakyThrows;
-import lombok.val;
@Component
@Named("causeway.metamodel.value.URLValueSemantics")
@@ -73,8 +71,8 @@ implements
private java.net.URL parseUrlElseNull(final String url) {
try {
- return new java.net.URL(url);
- } catch (MalformedURLException e) {
+ return _Resources.url(url);
+ } catch (Exception e) {
return null; // ignore
}
}
@@ -107,11 +105,7 @@ implements
@Override
public java.net.URL parseTextRepresentation(final
ValueSemanticsProvider.Context context, final String text) {
- val input = _Strings.blankToNullOrTrim(text);
- if(input==null) {
- return null;
- }
- return _Hardening.toUrlWithXssGuard(input).orElse(null);
+ return _Resources.url(_Strings.blankToNullOrTrim(text));
}
@Override
@@ -128,9 +122,9 @@ implements
@Override
public Can<URL> getExamples() {
return Can.of(
- new URL("https://maps.google.com"),
- new URL("https://en.wikipedia.org/wiki/Domain-driven_design")
- );
+ "https://maps.google.com",
+ "https://en.wikipedia.org/wiki/Domain-driven_design")
+ .map(_Resources::url);
}
}
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/AbstractRandomValueGenerator.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/AbstractRandomValueGenerator.java
index 66f6a39380..eff0323278 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/AbstractRandomValueGenerator.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/AbstractRandomValueGenerator.java
@@ -18,6 +18,8 @@
*/
package org.apache.causeway.testing.fakedata.applib.services;
+import java.util.concurrent.ThreadLocalRandom;
+
/**
* @since 2.0 {@index}
*/
@@ -29,4 +31,8 @@ abstract class AbstractRandomValueGenerator {
this.fake = fake;
}
+ protected static ThreadLocalRandom random() {
+ return ThreadLocalRandom.current();
+ }
+
}
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Collections.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Collections.java
index c2d3524af9..066f66a79b 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Collections.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Collections.java
@@ -154,7 +154,7 @@ public class Collections extends
AbstractRandomValueGenerator {
return find(() -> anyOf(elements), except);
}
- public <T> T anyOf(final T... elements) {
+ public <T> T anyOf(@SuppressWarnings("unchecked") final T... elements) {
final int randomIdx = fake.ints().upTo(elements.length);
return elements[randomIdx];
}
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Doubles.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Doubles.java
index 1aa23d85d8..1f529dcbb3 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Doubles.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Doubles.java
@@ -18,8 +18,6 @@
*/
package org.apache.causeway.testing.fakedata.applib.services;
-import org.apache.commons.lang3.RandomUtils;
-
/**
* Returns random <code>double</code> values, optionally constrained within a
range,
*
@@ -33,11 +31,12 @@ public class Doubles extends AbstractRandomValueGenerator {
public double any() {
return fake.booleans().coinFlip()
- ? RandomUtils.nextDouble() * Double.MAX_VALUE
- : -RandomUtils.nextDouble() * Double.MAX_VALUE;
+ ? random().nextDouble() * Double.MAX_VALUE
+ : -random().nextDouble() * Double.MAX_VALUE;
}
public double upTo(final double max) {
- return RandomUtils.nextDouble() * max;
+ return random().nextDouble() * max;
}
+
}
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Floats.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Floats.java
index 63107c2c2b..9028138987 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Floats.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Floats.java
@@ -18,8 +18,6 @@
*/
package org.apache.causeway.testing.fakedata.applib.services;
-import org.apache.commons.lang3.RandomUtils;
-
/**
* Returns random <code>float</code> values, optionally constrained within a
range,
*
@@ -33,11 +31,11 @@ public class Floats extends AbstractRandomValueGenerator {
public float any() {
return fake.booleans().coinFlip()
- ? RandomUtils.nextFloat() * Float.MAX_VALUE
- : -RandomUtils.nextFloat() * Float.MAX_VALUE;
+ ? random().nextFloat() * Float.MAX_VALUE
+ : -random().nextFloat() * Float.MAX_VALUE;
}
public float upTo(final float max) {
- return RandomUtils.nextFloat() * max;
+ return random().nextFloat() * max;
}
}
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Integers.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Integers.java
index ae365c9a0e..1dc4e98e0c 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Integers.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Integers.java
@@ -18,8 +18,6 @@
*/
package org.apache.causeway.testing.fakedata.applib.services;
-import org.apache.commons.lang3.RandomUtils;
-
/**
* Returns random <code>int</code>eger values, optionally constrained within a
range,
*
@@ -33,8 +31,8 @@ public class Integers extends AbstractRandomValueGenerator {
public int any() {
return fake.booleans().coinFlip()
- ? RandomUtils.nextInt()
- : - RandomUtils.nextInt();
+ ? random().nextInt()
+ : - random().nextInt();
}
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Longs.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Longs.java
index db12aa1360..0e484bcc99 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Longs.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Longs.java
@@ -18,8 +18,6 @@
*/
package org.apache.causeway.testing.fakedata.applib.services;
-import org.apache.commons.lang3.RandomUtils;
-
/**
* Returns random <code>long</code> values, optionally constrained within a
range,
*
@@ -33,8 +31,8 @@ public class Longs extends AbstractRandomValueGenerator {
public long any() {
return fake.booleans().coinFlip()
- ? RandomUtils.nextLong()
- : - RandomUtils.nextLong();
+ ? random().nextLong()
+ : - random().nextLong();
}
public long upTo(final long upTo) {
diff --git
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Urls.java
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Urls.java
index 2836fae604..ffe8cbb903 100644
---
a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Urls.java
+++
b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/Urls.java
@@ -18,9 +18,10 @@
*/
package org.apache.causeway.testing.fakedata.applib.services;
-import java.net.MalformedURLException;
import java.net.URL;
+import org.apache.causeway.commons.internal.resources._Resources;
+
/**
* Returns random but well-formed {@link URL}s.
*
@@ -33,13 +34,8 @@ public class Urls extends AbstractRandomValueGenerator {
}
public URL any() {
- try {
- final String protocol = fake.booleans().coinFlip() ? "http" :
"https:";
- final String url = fake.comms().url();
- return new URL(String.format("%s://%s", protocol, url));
- } catch (MalformedURLException e) {
- // not expected
- throw new RuntimeException(e);
- }
+ final String protocol = fake.booleans().coinFlip() ? "http" : "https:";
+ final String url = fake.comms().url();
+ return _Resources.url(String.format("%s://%s", protocol, url));
}
}
diff --git
a/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/CausewayActions.java
b/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/CausewayActions.java
index 1541f2cfa1..4d2e775a1a 100644
---
a/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/CausewayActions.java
+++
b/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/CausewayActions.java
@@ -22,6 +22,8 @@ import org.hamcrest.Description;
import org.jmock.api.Action;
import org.jmock.api.Invocation;
+import org.apache.causeway.commons.internal.factory._InstanceUtil;
+
/**
* @since 2.0 {@index}
*/
@@ -47,14 +49,14 @@ public final class CausewayActions {
return new Action(){
@Override
- public void describeTo(Description description) {
+ public void describeTo(final Description description) {
description.appendText("new transient instance");
}
@Override
- public Object invoke(Invocation invocation) throws Throwable {
- Class<?> cls = (Class<?>) invocation.getParameter(0);
- return cls.newInstance();
+ public Object invoke(final Invocation invocation) throws Throwable
{
+ var cls = (Class<?>) invocation.getParameter(0);
+ return _InstanceUtil.createInstance(cls);
}
};
}
diff --git
a/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/soap/SoapEndpointSpec.java
b/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/soap/SoapEndpointSpec.java
index e97f60ba8e..f0fc2bb65e 100644
---
a/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/soap/SoapEndpointSpec.java
+++
b/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/soap/SoapEndpointSpec.java
@@ -20,6 +20,8 @@ package
org.apache.causeway.testing.unittestsupport.applib.soap;
import java.util.function.Supplier;
+import org.apache.causeway.commons.internal.factory._InstanceUtil;
+
public class SoapEndpointSpec {
static SoapEndpointSpec asSoapEndpointSpec(final Class<?> input) {
@@ -61,7 +63,7 @@ public class SoapEndpointSpec {
/**
* Populated when published if not otherwise.
*/
- void setEndpointAddress(String endpointAddress) {
+ void setEndpointAddress(final String endpointAddress) {
this.endpointAddress = endpointAddress;
}
@@ -74,11 +76,7 @@ public class SoapEndpointSpec {
@Override
public Object get() {
- try {
- return endpointClass.newInstance();
- } catch (InstantiationException | IllegalAccessException e) {
- throw new RuntimeException(e);
- }
+ return _InstanceUtil.createInstance(endpointClass);
}
}
diff --git
a/testing/unittestsupport/applib/src/test/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/JUnitRuleMockery2Test_mockAnnotatedWithNever_sadCase.java
b/testing/unittestsupport/applib/src/test/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/JUnitRuleMockery2Test_mockAnnotatedWithNever_sadCase.java
index 9593638dfc..78870d16c4 100644
---
a/testing/unittestsupport/applib/src/test/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/JUnitRuleMockery2Test_mockAnnotatedWithNever_sadCase.java
+++
b/testing/unittestsupport/applib/src/test/java/org/apache/causeway/testing/unittestsupport/applib/jmocking/JUnitRuleMockery2Test_mockAnnotatedWithNever_sadCase.java
@@ -35,7 +35,6 @@ public class
JUnitRuleMockery2Test_mockAnnotatedWithNever_sadCase {
@Rule
public JUnitRuleMockery2 context =
JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
- @SuppressWarnings("unused")
@Never
@Mock
private Collaborator collaborator;
diff --git
a/tooling/projectmodel/src/main/java/org/apache/causeway/tooling/projectmodel/maven/SimpleModelResolver.java
b/tooling/projectmodel/src/main/java/org/apache/causeway/tooling/projectmodel/maven/SimpleModelResolver.java
index ab0ab71987..f990d6465c 100644
---
a/tooling/projectmodel/src/main/java/org/apache/causeway/tooling/projectmodel/maven/SimpleModelResolver.java
+++
b/tooling/projectmodel/src/main/java/org/apache/causeway/tooling/projectmodel/maven/SimpleModelResolver.java
@@ -19,7 +19,7 @@
package org.apache.causeway.tooling.projectmodel.maven;
import java.io.File;
-import java.net.URL;
+import java.net.URI;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -62,7 +62,7 @@ public class SimpleModelResolver implements ModelResolver {
}
@Override
- public ModelSource resolveModel(String groupId, String artifactId, String
version)
+ public ModelSource resolveModel(final String groupId, final String
artifactId, final String version)
throws UnresolvableModelException {
val key = String.format("%s:%s:%s", groupId, artifactId, version);
@@ -83,13 +83,14 @@ public class SimpleModelResolver implements ModelResolver {
for(val entry : repositories.entrySet()) {
val repo = entry.getValue();
- val pomUrl = new URL(String.format("%s/%s/%s/%s/%s-%s.pom",
+ val pomUrl = new URI(String.format("%s/%s/%s/%s/%s-%s.pom",
repo.getUrl(),
groupId.replace('.', '/'),
artifactId,
version,
artifactId,
- version));
+ version))
+ .toURL();
try {
val urlConn = pomUrl.openConnection();
@@ -111,13 +112,13 @@ public class SimpleModelResolver implements ModelResolver
{
}
@Override
- public ModelSource resolveModel(Parent parent) throws
UnresolvableModelException {
+ public ModelSource resolveModel(final Parent parent) throws
UnresolvableModelException {
log.info("resolveModel-parent");
return resolveModel(parent.getGroupId(), parent.getArtifactId(),
parent.getVersion());
}
@Override
- public ModelSource resolveModel(Dependency dependency) throws
UnresolvableModelException {
+ public ModelSource resolveModel(final Dependency dependency) throws
UnresolvableModelException {
log.info("resolveModel-dependency");
return resolveModel(
dependency.getGroupId(),
@@ -126,13 +127,13 @@ public class SimpleModelResolver implements ModelResolver
{
}
@Override
- public void addRepository(Repository repository) throws
InvalidRepositoryException {
+ public void addRepository(final Repository repository) throws
InvalidRepositoryException {
log.info("adding repository {}", repository.getUrl());
repositories.put(repository.getId(), repository);
}
@Override
- public void addRepository(Repository repository, boolean replace) throws
InvalidRepositoryException {
+ public void addRepository(final Repository repository, final boolean
replace) throws InvalidRepositoryException {
addRepository(repository);
}
@@ -142,7 +143,7 @@ public class SimpleModelResolver implements ModelResolver {
}
- public Model lookupCatalogForSubmoduleOf(Model mavenProj, String
realtivePath) {
+ public Model lookupCatalogForSubmoduleOf(final Model mavenProj, final
String realtivePath) {
final String localPath;
try {
diff --git
a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/Parser.java
b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/Parser.java
index 90e59ccd47..1f3f20b7d2 100644
---
a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/Parser.java
+++
b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/Parser.java
@@ -28,6 +28,7 @@ import java.util.stream.Collectors;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.RuntimeDelegate;
import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._NullSafe;
@@ -115,12 +116,15 @@ public abstract class Parser<T> {
public static Parser<CacheControl> forCacheControl() {
return new Parser<CacheControl>() {
+
@Override
public CacheControl valueOf(final String str) {
if (str == null) {
return null;
}
- final CacheControl cacheControl = CacheControl.valueOf(str);
+ CacheControl cacheControl =
+
RuntimeDelegate.getInstance().createHeaderDelegate(CacheControl.class)
+ .fromString(str);
// workaround for bug in CacheControl's equals() method
cacheControl.getCacheExtension();
cacheControl.getNoCacheFields();
@@ -129,7 +133,8 @@ public abstract class Parser<T> {
@Override
public String asString(final CacheControl cacheControl) {
- return cacheControl.toString();
+ return
RuntimeDelegate.getInstance().createHeaderDelegate(CacheControl.class)
+ .toString(cacheControl);
}
};
}