diff --git a/core/runtime/src/main/java/io/quarkus/runtime/graal/InetSubstitutions.java b/core/runtime/src/main/java/io/quarkus/runtime/graal/InetSubstitutions.java new file mode 100644 index 00000000000000..49f89b7fd86ae5 --- /dev/null +++ b/core/runtime/src/main/java/io/quarkus/runtime/graal/InetSubstitutions.java @@ -0,0 +1,30 @@ +package io.quarkus.runtime.graal; + +import java.net.Inet4Address; + +import org.wildfly.common.net.Inet; + +import com.oracle.svm.core.annotate.Alias; +import com.oracle.svm.core.annotate.RecomputeFieldValue; +import com.oracle.svm.core.annotate.TargetClass; + +@TargetClass(Inet.class) +final class Target_org_wildfly_common_net_Inet { + + /* + * The following fields recomputations are required because of a new restriction in GraalVM 19.3.0 that prohibits the + * presence of java.net.Inet4Address in the image heap. + */ + + @Alias + @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.FromAlias) + public static Inet4Address INET4_ANY = Inet.getInet4Address(0, 0, 0, 0); + + @Alias + @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.FromAlias) + public static Inet4Address INET4_LOOPBACK = Inet.getInet4Address(127, 0, 0, 1); + + @Alias + @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.FromAlias) + public static Inet4Address INET4_BROADCAST = Inet.getInet4Address(255, 255, 255, 255); +} diff --git a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java index 14afde0c96753d..612ecaa9965a3e 100644 --- a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java +++ b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java @@ -8,8 +8,9 @@ import com.oracle.svm.core.annotate.Alias; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; +import com.oracle.svm.core.jdk.JDK8OrEarlier; -@TargetClass(className = "sun.misc.URLClassPath$Loader") +@TargetClass(className = "sun.misc.URLClassPath$Loader", onlyWith = JDK8OrEarlier.class) final class Target_sun_misc_URLClassPath$Loader { @Alias @@ -17,7 +18,7 @@ final class Target_sun_misc_URLClassPath$Loader { } } -@TargetClass(className = "sun.misc.URLClassPath$FileLoader") +@TargetClass(className = "sun.misc.URLClassPath$FileLoader", onlyWith = JDK8OrEarlier.class) final class Target_sun_misc_URLClassPath$FileLoader { @Alias @@ -25,7 +26,7 @@ final class Target_sun_misc_URLClassPath$FileLoader { } } -@TargetClass(className = "sun.misc.URLClassPath") +@TargetClass(className = "sun.misc.URLClassPath", onlyWith = JDK8OrEarlier.class) final class Target_sun_misc_URLClassPath { @Substitute diff --git a/integration-tests/main/src/main/java/io/quarkus/it/config/MicroProfileConfigResource.java b/integration-tests/main/src/main/java/io/quarkus/it/config/MicroProfileConfigResource.java index 09f2080536b50f..02c0359d6dfa9d 100644 --- a/integration-tests/main/src/main/java/io/quarkus/it/config/MicroProfileConfigResource.java +++ b/integration-tests/main/src/main/java/io/quarkus/it/config/MicroProfileConfigResource.java @@ -6,6 +6,7 @@ import org.eclipse.microprofile.config.Config; import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.wildfly.common.net.CidrAddress; /** * Test some MicroProfile config primitives. @@ -19,6 +20,9 @@ public class MicroProfileConfigResource { @ConfigProperty(name = "microprofile.custom.value") MicroProfileCustomValue value; + @ConfigProperty(name = "microprofile.cidr-address") + CidrAddress cidrAddress; + @Inject Config config; @@ -36,4 +40,10 @@ public String getPropertyNames() throws Exception { public String getCustomValue() { return Integer.toString(value.getNumber()); } + + @GET + @Path("/get-cidr-address") + public String getCidrAddress() { + return cidrAddress.getNetworkAddress().getHostAddress(); + } } diff --git a/integration-tests/main/src/main/resources/application.properties b/integration-tests/main/src/main/resources/application.properties index ea85d072165071..48c7545ce81e9f 100644 --- a/integration-tests/main/src/main/resources/application.properties +++ b/integration-tests/main/src/main/resources/application.properties @@ -25,6 +25,7 @@ web-message=A message schedulerservice.cron.expr=0/10 * * * * ? microprofile.custom.value = 456 +microprofile.cidr-address=10.0.0.20/24 configproperties.message=Hello configproperties.other=1 diff --git a/integration-tests/main/src/test/java/io/quarkus/it/main/MicroProfileConfigTestCase.java b/integration-tests/main/src/test/java/io/quarkus/it/main/MicroProfileConfigTestCase.java index 4c181d8ba3154e..94ef2e6c059058 100644 --- a/integration-tests/main/src/test/java/io/quarkus/it/main/MicroProfileConfigTestCase.java +++ b/integration-tests/main/src/test/java/io/quarkus/it/main/MicroProfileConfigTestCase.java @@ -25,4 +25,11 @@ public void testMicroprofileConfigGetCustomValue() { .when().get("/microprofile-config/get-custom-value") .then().body(is("456")); } + + @Test + public void testCidrAddress() { + RestAssured + .when().get("/microprofile-config/get-cidr-address") + .then().body(is("10.0.0.0")); + } }