GraalVM native-image
Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com>
diff --git a/.gitignore b/.gitignore
index 9f7d5b9..9d011f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
# maven noise
target/
target-*/
+target*/
# gradle noise
.gradle
diff --git a/containers/grizzly2-http/src/main/resources/META-INF/native-image/org.glassfish.jersey.containers/jersey-container-grizzly2-http/reflect-config.json b/containers/grizzly2-http/src/main/resources/META-INF/native-image/org.glassfish.jersey.containers/jersey-container-grizzly2-http/reflect-config.json
new file mode 100644
index 0000000..6ababc4
--- /dev/null
+++ b/containers/grizzly2-http/src/main/resources/META-INF/native-image/org.glassfish.jersey.containers/jersey-container-grizzly2-http/reflect-config.json
@@ -0,0 +1,39 @@
+[
+{
+ "name":"org.glassfish.grizzly.Buffer[]"
+},
+{
+"name":"org.glassfish.grizzly.ConnectionProbe[]"
+},
+{
+"name":"org.glassfish.grizzly.IOEventLifeCycleListener[]"
+},
+{
+"name":"org.glassfish.grizzly.TransportProbe[]"
+},
+{
+"name":"org.glassfish.grizzly.http.HttpProbe[]"
+},
+{
+"name":"org.glassfish.grizzly.http.TransferEncoding[]"
+},
+{
+"name":"org.glassfish.grizzly.http.server.HttpServerProbe[]"
+},
+{
+"name":"org.glassfish.grizzly.http.server.TagLocaleParser",
+"methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+"name":"org.glassfish.grizzly.http.server.filecache.FileCacheProbe[]"
+},
+{
+"name":"org.glassfish.grizzly.memory.MemoryProbe[]"
+},
+{
+"name":"org.glassfish.grizzly.threadpool.ThreadPoolProbe[]"
+},
+{
+"name":"org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainerProvider"
+}
+]
\ No newline at end of file
diff --git a/core-common/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-common/reflect-config.json b/core-common/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-common/reflect-config.json
new file mode 100644
index 0000000..9ea23c8
--- /dev/null
+++ b/core-common/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-common/reflect-config.json
@@ -0,0 +1,153 @@
+[
+ {
+ "name":"org.glassfish.jersey.internal.config.ExternalPropertiesAutoDiscoverable",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.internal.inject.Custom",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.internal.ServiceFinder",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.logging.LoggingFeatureAutoDiscoverable",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.AbstractFormProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.AbstractMessageReaderWriterProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.BasicTypesMessageProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.ByteArrayProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.DataSourceProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.EnumMessageProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.FileProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.FormMultivaluedMapProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.FormProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.InputStreamProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.ReaderProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.RenderedImageProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.SourceProvider$DomSourceReader",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.SourceProvider$SaxSourceReader",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.SourceProvider$SourceWriter",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.SourceProvider$StreamSourceReader",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.StreamingOutputProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.message.internal.StringMessageProvider",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.process.Inflector",
+ "methods":[{"name":"apply","parameterTypes":["java.lang.Object"] }]
+ },
+ {
+ "name":"org.glassfish.jersey.process.internal.RequestScope",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.spi.AbstractThreadPoolProvider",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.spi.ScheduledThreadPoolExecutorProvider",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.spi.ThreadPoolExecutorProvider",
+ "allDeclaredMethods":true
+ }
+]
\ No newline at end of file
diff --git a/core-common/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-common/resource-config.json b/core-common/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-common/resource-config.json
new file mode 100644
index 0000000..462f993
--- /dev/null
+++ b/core-common/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-common/resource-config.json
@@ -0,0 +1,5 @@
+{
+ "bundles": [
+ {"name": "org.glassfish.jersey.internal.localization"}
+ ]
+}
\ No newline at end of file
diff --git a/core-server/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-server/reflect-config.json b/core-server/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-server/reflect-config.json
new file mode 100644
index 0000000..f013c36
--- /dev/null
+++ b/core-server/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-server/reflect-config.json
@@ -0,0 +1,91 @@
+[
+ {
+ "name":"org.glassfish.jersey.server.BackgroundScheduler",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.ChunkedResponseWriter",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.ManagedAsyncExecutor",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.ResourceConfig",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.ServerExecutorProvidersConfigurator$DefaultBackgroundSchedulerProvider",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.ServerExecutorProvidersConfigurator$DefaultManagedAsyncExecutorProvider",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.filter.internal.ServerFiltersAutoDiscoverable",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.internal.monitoring.MonitoringAutodiscoverable",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.internal.monitoring.MonitoringContainerListener",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.internal.process.RequestProcessingContextReference",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.model.Parameter$ServerParameterService",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+ },
+ {
+ "name":"org.glassfish.jersey.server.wadl.WadlFeature",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.wadl.internal.WadlAutoDiscoverable",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.wadl.processor.OptionsMethodProcessor$GenericOptionsInflector",
+ "allPublicMethods":true,
+ "allPublicConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.server.wadl.processor.OptionsMethodProcessor$PlainTextOptionsInflector",
+ "allPublicMethods":true,
+ "allPublicConstructors":true
+ }
+]
\ No newline at end of file
diff --git a/core-server/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-server/resource-config.json b/core-server/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-server/resource-config.json
new file mode 100644
index 0000000..6615ca3
--- /dev/null
+++ b/core-server/src/main/resources/META-INF/native-image/org.glassfish.jersey.core/jersey-server/resource-config.json
@@ -0,0 +1,5 @@
+{
+ "bundles": [
+ {"name":"org.glassfish.jersey.server.internal.localization"}
+ ]
+}
\ No newline at end of file
diff --git a/examples/helloworld-cdi2-se/src/main/java/org/glassfish/jersey/examples/helloworld/cdi2se/App.java b/examples/helloworld-cdi2-se/src/main/java/org/glassfish/jersey/examples/helloworld/cdi2se/App.java
index 5608a6d..3ad314e 100644
--- a/examples/helloworld-cdi2-se/src/main/java/org/glassfish/jersey/examples/helloworld/cdi2se/App.java
+++ b/examples/helloworld-cdi2-se/src/main/java/org/glassfish/jersey/examples/helloworld/cdi2se/App.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -40,7 +40,7 @@
server.start();
System.out.println("Application started.\nTry out");
- System.out.println(String.format("%s%s%s", BASE_URI, ROOT_HELLO_PATH, "/Some%Name"));
+ System.out.println(String.format("%s%s%s", BASE_URI, ROOT_HELLO_PATH, "/Some%20Name"));
System.out.println(String.format("%s%s%s", BASE_URI, ROOT_COUNTER_PATH, "/request"));
System.out.println(String.format("%s%s%s", BASE_URI, ROOT_COUNTER_PATH, "/application"));
System.out.println("Stop the application using CTRL+C");
diff --git a/examples/helloworld-programmatic/pom.xml b/examples/helloworld-programmatic/pom.xml
index 6e49ed3..91b03d2 100644
--- a/examples/helloworld-programmatic/pom.xml
+++ b/examples/helloworld-programmatic/pom.xml
@@ -67,6 +67,51 @@
</plugins>
</build>
</profile>
+ <profile>
+ <id>native-image</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.graalvm.nativeimage</groupId>
+ <artifactId>native-image-maven-plugin</artifactId>
+ <version>${graalvm.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>native-image</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ <configuration>
+ <imageName>${project.artifactId}-native</imageName>
+ <mainClass>org.glassfish.jersey.examples.helloworld.App</mainClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+
+ <dependency>
+ <groupId>jakarta.activation</groupId>
+ <artifactId>jakarta.activation-api</artifactId>
+ <version>${jakarta.activation.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.xml.bind</groupId>
+ <artifactId>jakarta.xml.bind-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>hk2-locator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.framework</artifactId>
+ <version>${osgi.framework.version}</version>
+ </dependency>
+ </dependencies>
+ </profile>
</profiles>
</project>
diff --git a/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/jni-config.json b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/jni-config.json
new file mode 100644
index 0000000..9127dd4
--- /dev/null
+++ b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/jni-config.json
@@ -0,0 +1,9 @@
+[
+ {
+ "name":"java.lang.ClassLoader",
+ "methods":[{"name":"getPlatformClassLoader","parameterTypes":[] }]
+ },
+ {
+ "name":"java.lang.NoSuchMethodError"
+ }
+]
diff --git a/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/native-image.properties b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/native-image.properties
new file mode 100644
index 0000000..6d2c053
--- /dev/null
+++ b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/native-image.properties
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Distribution License v. 1.0, which is available at
+# http://www.eclipse.org/org/documents/edl-v10.php.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+Args=-H:EnableURLProtocols=http,https \
+ --initialize-at-build-time=org.glassfish.jersey.client.internal.HttpUrlConnector \
+ -H:+ReportExceptionStackTraces \
+ --verbose \
+ --no-fallback \
+ --report-unsupported-elements-at-runtime
\ No newline at end of file
diff --git a/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/reflect-config.json b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/reflect-config.json
new file mode 100644
index 0000000..90f407d
--- /dev/null
+++ b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/reflect-config.json
@@ -0,0 +1,44 @@
+[
+ {
+ "name":"java.awt.image.RenderedImage"
+ },
+ {
+ "name":"javax.activation.DataSource"
+ },
+ {
+ "name":"javax.inject.Singleton",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"javax.ws.rs.core.Application",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"javax.ws.rs.core.Feature",
+ "methods":[{"name":"configure","parameterTypes":["javax.ws.rs.core.FeatureContext"] }]
+ },
+ {
+ "name":"javax.xml.transform.Source"
+ },
+ {
+ "name":"javax.xml.transform.dom.DOMSource"
+ },
+ {
+ "name":"javax.xml.transform.sax.SAXSource"
+ },
+ {
+ "name":"javax.xml.transform.stream.StreamSource"
+ },
+ {
+ "name":"org.glassfish.jersey.examples.helloworld.App$2",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true
+ },
+ {
+ "name":"org.glassfish.jersey.examples.helloworld.App$3",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true
+ }
+]
\ No newline at end of file
diff --git a/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/resource-config.json b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/resource-config.json
new file mode 100644
index 0000000..b247af1
--- /dev/null
+++ b/examples/helloworld-programmatic/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-programmatic/resource-config.json
@@ -0,0 +1,8 @@
+{
+ "resources": [
+ {"pattern": "org/glassfish/grizzly/version.properties"}
+ ],
+ "bundles": [
+ {"name":"javax.xml.bind.Messages"}
+ ]
+}
\ No newline at end of file
diff --git a/examples/helloworld-pure-jax-rs/pom.xml b/examples/helloworld-pure-jax-rs/pom.xml
index c83d3ce..cc10ce5 100644
--- a/examples/helloworld-pure-jax-rs/pom.xml
+++ b/examples/helloworld-pure-jax-rs/pom.xml
@@ -70,6 +70,51 @@
</plugins>
</build>
</profile>
+ <profile>
+ <id>native-image</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.graalvm.nativeimage</groupId>
+ <artifactId>native-image-maven-plugin</artifactId>
+ <version>${graalvm.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>native-image</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ <configuration>
+ <imageName>${project.artifactId}-native</imageName>
+ <mainClass>org.glassfish.jersey.examples.helloworld.jaxrs.App</mainClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+
+ <dependency>
+ <groupId>jakarta.activation</groupId>
+ <artifactId>jakarta.activation-api</artifactId>
+ <version>${jakarta.activation.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.xml.bind</groupId>
+ <artifactId>jakarta.xml.bind-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>hk2-locator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.framework</artifactId>
+ <version>${osgi.framework.version}</version>
+ </dependency>
+ </dependencies>
+ </profile>
</profiles>
</project>
diff --git a/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/jni-config.json b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/jni-config.json
new file mode 100644
index 0000000..9127dd4
--- /dev/null
+++ b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/jni-config.json
@@ -0,0 +1,9 @@
+[
+ {
+ "name":"java.lang.ClassLoader",
+ "methods":[{"name":"getPlatformClassLoader","parameterTypes":[] }]
+ },
+ {
+ "name":"java.lang.NoSuchMethodError"
+ }
+]
diff --git a/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/native-image.properties b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/native-image.properties
new file mode 100644
index 0000000..6d2c053
--- /dev/null
+++ b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/native-image.properties
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Distribution License v. 1.0, which is available at
+# http://www.eclipse.org/org/documents/edl-v10.php.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+Args=-H:EnableURLProtocols=http,https \
+ --initialize-at-build-time=org.glassfish.jersey.client.internal.HttpUrlConnector \
+ -H:+ReportExceptionStackTraces \
+ --verbose \
+ --no-fallback \
+ --report-unsupported-elements-at-runtime
\ No newline at end of file
diff --git a/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/reflect-config.json b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/reflect-config.json
new file mode 100644
index 0000000..ccde28c
--- /dev/null
+++ b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/reflect-config.json
@@ -0,0 +1,40 @@
+[
+ {
+ "name":"java.awt.image.RenderedImage"
+ },
+ {
+ "name":"javax.activation.DataSource"
+ },
+ {
+ "name":"javax.inject.Singleton",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"javax.ws.rs.core.Application",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"javax.ws.rs.core.Feature",
+ "methods":[{"name":"configure","parameterTypes":["javax.ws.rs.core.FeatureContext"] }]
+ },
+ {
+ "name":"javax.xml.transform.Source"
+ },
+ {
+ "name":"javax.xml.transform.dom.DOMSource"
+ },
+ {
+ "name":"javax.xml.transform.sax.SAXSource"
+ },
+ {
+ "name":"javax.xml.transform.stream.StreamSource"
+ },
+ {
+ "name":"org.glassfish.jersey.examples.helloworld.jaxrs.HelloWorldResource",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+ }
+]
\ No newline at end of file
diff --git a/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/resource-config.json b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/resource-config.json
new file mode 100644
index 0000000..b247af1
--- /dev/null
+++ b/examples/helloworld-pure-jax-rs/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld-pure-jax-rs/resource-config.json
@@ -0,0 +1,8 @@
+{
+ "resources": [
+ {"pattern": "org/glassfish/grizzly/version.properties"}
+ ],
+ "bundles": [
+ {"name":"javax.xml.bind.Messages"}
+ ]
+}
\ No newline at end of file
diff --git a/examples/helloworld/pom.xml b/examples/helloworld/pom.xml
index d3e729b..a75a07d 100644
--- a/examples/helloworld/pom.xml
+++ b/examples/helloworld/pom.xml
@@ -26,6 +26,10 @@
<description>Jersey annotated resource class "Hello world" example.</description>
+ <properties>
+<!-- <graalvm.version>21.1.0</graalvm.version>-->
+ </properties>
+
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
@@ -76,6 +80,49 @@
</plugins>
</build>
</profile>
+ <profile>
+ <id>native-image</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.graalvm.nativeimage</groupId>
+ <artifactId>native-image-maven-plugin</artifactId>
+ <version>${graalvm.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>native-image</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ <configuration>
+ <imageName>${project.artifactId}-native</imageName>
+ <mainClass>org.glassfish.jersey.examples.helloworld.App</mainClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>jakarta.activation</groupId>
+ <artifactId>jakarta.activation-api</artifactId>
+ <version>${jakarta.activation.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.xml.bind</groupId>
+ <artifactId>jakarta.xml.bind-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.framework</artifactId>
+ <version>${osgi.framework.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.hk2</groupId>
+ <artifactId>hk2-locator</artifactId>
+ </dependency>
+ </dependencies>
+ </profile>
</profiles>
-
</project>
diff --git a/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/jni-config.json b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/jni-config.json
new file mode 100644
index 0000000..9127dd4
--- /dev/null
+++ b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/jni-config.json
@@ -0,0 +1,9 @@
+[
+ {
+ "name":"java.lang.ClassLoader",
+ "methods":[{"name":"getPlatformClassLoader","parameterTypes":[] }]
+ },
+ {
+ "name":"java.lang.NoSuchMethodError"
+ }
+]
diff --git a/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/native-image.properties b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/native-image.properties
new file mode 100644
index 0000000..6d2c053
--- /dev/null
+++ b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/native-image.properties
@@ -0,0 +1,16 @@
+#
+# Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Distribution License v. 1.0, which is available at
+# http://www.eclipse.org/org/documents/edl-v10.php.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+Args=-H:EnableURLProtocols=http,https \
+ --initialize-at-build-time=org.glassfish.jersey.client.internal.HttpUrlConnector \
+ -H:+ReportExceptionStackTraces \
+ --verbose \
+ --no-fallback \
+ --report-unsupported-elements-at-runtime
\ No newline at end of file
diff --git a/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/reflect-config.json b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/reflect-config.json
new file mode 100644
index 0000000..ce14b8e
--- /dev/null
+++ b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/reflect-config.json
@@ -0,0 +1,40 @@
+[
+ {
+ "name":"java.awt.image.RenderedImage"
+ },
+ {
+ "name":"javax.activation.DataSource"
+ },
+ {
+ "name":"javax.inject.Singleton",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"javax.ws.rs.core.Application",
+ "allDeclaredMethods":true
+ },
+ {
+ "name":"javax.ws.rs.core.Feature",
+ "methods":[{"name":"configure","parameterTypes":["javax.ws.rs.core.FeatureContext"] }]
+ },
+ {
+ "name":"javax.xml.transform.Source"
+ },
+ {
+ "name":"javax.xml.transform.dom.DOMSource"
+ },
+ {
+ "name":"javax.xml.transform.sax.SAXSource"
+ },
+ {
+ "name":"javax.xml.transform.stream.StreamSource"
+ },
+ {
+ "name":"org.glassfish.jersey.examples.helloworld.HelloWorldResource",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+ }
+]
\ No newline at end of file
diff --git a/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/resource-config.json b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/resource-config.json
new file mode 100644
index 0000000..b247af1
--- /dev/null
+++ b/examples/helloworld/src/main/resources/META-INF/native-image/org.glassfish.jersey.examples/helloworld/resource-config.json
@@ -0,0 +1,8 @@
+{
+ "resources": [
+ {"pattern": "org/glassfish/grizzly/version.properties"}
+ ],
+ "bundles": [
+ {"name":"javax.xml.bind.Messages"}
+ ]
+}
\ No newline at end of file
diff --git a/inject/hk2/src/main/resources/META-INF/native-image/org.glassfish.jersey.inject/jersey-hk2/reflect-config.json b/inject/hk2/src/main/resources/META-INF/native-image/org.glassfish.jersey.inject/jersey-hk2/reflect-config.json
new file mode 100644
index 0000000..cb8c35b
--- /dev/null
+++ b/inject/hk2/src/main/resources/META-INF/native-image/org.glassfish.jersey.inject/jersey-hk2/reflect-config.json
@@ -0,0 +1,68 @@
+[
+ {
+ "name": "org.glassfish.hk2.internal.PerThreadContext",
+ "allDeclaredFields": true,
+ "allDeclaredMethods": true,
+ "allDeclaredConstructors": true
+ },
+ {
+ "name": "org.glassfish.hk2.osgiresourcelocator.ServiceLoader",
+ "methods": [{ "name":"lookupProviderClasses", "parameterTypes":["java.lang.Class"] }]
+ },
+ {
+ "name":"org.glassfish.jersey.inject.hk2.ContextInjectionResolverImpl",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+ },
+ {
+ "name":"org.glassfish.jersey.inject.hk2.Hk2RequestScope",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.inject.hk2.InstanceSupplierFactoryBridge",
+ "methods":[{"name":"provide","parameterTypes":[] }]
+ },
+ {
+ "name":"org.glassfish.jersey.inject.hk2.JerseyErrorService",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.glassfish.jersey.inject.hk2.RequestContext",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.jvnet.hk2.internal.ProxyUtilities$4",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.jvnet.hk2.internal.ProxyUtilities",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.jvnet.hk2.internal.DynamicConfigurationServiceImpl",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ },
+ {
+ "name":"org.jvnet.hk2.internal.ServiceLocatorRuntimeImpl",
+ "allDeclaredFields":true,
+ "allDeclaredMethods":true,
+ "allDeclaredConstructors":true
+ }
+]
\ No newline at end of file
diff --git a/inject/hk2/src/main/resources/META-INF/native-image/org.glassfish.jersey.inject/jersey-hk2/resource-config.json b/inject/hk2/src/main/resources/META-INF/native-image/org.glassfish.jersey.inject/jersey-hk2/resource-config.json
new file mode 100644
index 0000000..1845c39
--- /dev/null
+++ b/inject/hk2/src/main/resources/META-INF/native-image/org.glassfish.jersey.inject/jersey-hk2/resource-config.json
@@ -0,0 +1,5 @@
+{
+ "bundles": [
+ {"name":"org.glassfish.jersey.inject.hk2.localization"}
+ ]
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 5973e47..156cf98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -329,7 +329,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version>
+ <version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -446,7 +446,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
- <version>2.8</version>
+ <version>3.1.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -2132,6 +2132,7 @@
<nexus-staging.mvn.plugin.version>1.6.7</nexus-staging.mvn.plugin.version>
<opentracing.version>0.30.0</opentracing.version>
<osgi.version>6.0.0</osgi.version>
+ <osgi.framework.version>1.10.0</osgi.framework.version>
<osgi.compendium.version>5.0.0</osgi.compendium.version>
<pax.exam.version>4.13.1</pax.exam.version>
<pax.web.version>0.7.4</pax.web.version><!-- TODO: UPGRADE! -->
@@ -2152,6 +2153,9 @@
<weld3.version>3.1.7.SP1</weld3.version>
<xerces.version>2.11.0</xerces.version>
+ <!-- Graal VM -->
+ <graalvm.version>20.3.2</graalvm.version>
+
<!-- do not need CQs -->
<gf.impl.version>5.1.0</gf.impl.version>
<istack.commons.runtime.version>3.0.8</istack.commons.runtime.version>