>>>>> Steinar Bang <
sb-1rLz...@public.gmane.org>:
>>>>> Freeman Fang <
freeman.fang-Re5JQEeQqe8Avxti...@public.gmane.org>:
I've added the VMOptions to the startup but I still get the same stack
trace, ie. a NullPointerException thrown from here:
public class FrameworkExtensionInstaller {
...
void addExtensionContent0(Collection<ModuleRevision> revisions, Module systemModule) throws BundleException {
if (CL == null || ADD_FWK_URL_METHOD == null) {
// use the first revision as the blame
ModuleRevision revision = revisions.isEmpty() ? null : revisions.iterator().next();
==> throw new BundleException("Cannot support framework extension bundles without a public addURL(URL) method on the framework class loader: " + revision.getBundle()); //$NON-NLS-1$
}
The exception happens in the throw, and the only thing I can see causing
the NPE, is that revisions isn't empty, but contains at least one null
element.
The stack trace, is:
[shaded.org.apache.http.impl.conn.PoolingHttpClientConnectionManager] : Connection manager shut down Ignored FQCN: shaded.org.apache.commons.logging.impl.SLF4JLocationAwareLog
Exception in thread "KarafEmbeddedRunner" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.ops4j.pax.exam.karaf.container.internal.runner.KarafEmbeddedRunner$1.run(KarafEmbeddedRunner.java:96)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.ops4j.pax.exam.karaf.container.internal.runner.KarafEmbeddedRunner$1.run(KarafEmbeddedRunner.java:86)
Caused by: java.lang.NullPointerException
at org.eclipse.osgi.storage.FrameworkExtensionInstaller.addExtensionContent0(FrameworkExtensionInstaller.java:99)
at org.eclipse.osgi.storage.FrameworkExtensionInstaller.addExtensionContent(FrameworkExtensionInstaller.java:79)
at org.eclipse.osgi.storage.Storage.installExtensions(Storage.java:194)
at org.eclipse.osgi.storage.Storage.createStorage(Storage.java:92)
at org.eclipse.osgi.internal.framework.EquinoxContainer.<init>(EquinoxContainer.java:66)
at org.eclipse.osgi.launch.Equinox.<init>(Equinox.java:31)
at org.eclipse.osgi.launch.EquinoxFactory.newFramework(EquinoxFactory.java:24)
at org.apache.karaf.main.Main.launch(Main.java:256)
... 5 more
My current options setup code looks like this (and I've debugged and
verified that I'm adding the vmoptions when running under openjdk-11):
@Configuration
public Option[] config() {
final String jmxPort = freePortAsString();
final String httpPort = freePortAsString();
final String httpsPort = freePortAsString();
final MavenArtifactUrlReference karafUrl = maven().groupId("org.apache.karaf").artifactId("apache-karaf-minimal").type("zip").versionAsInProject();
final MavenArtifactUrlReference paxJdbcRepo = maven().groupId("org.ops4j.pax.jdbc").artifactId("pax-jdbc-features").versionAsInProject().type("xml").classifier("features");
final MavenArtifactUrlReference authserviceFeatureRepo = maven().groupId("no.priv.bang.authservice").artifactId("authservice").version("LATEST").type("xml").classifier("features");
Option[] commonOptions = options(
karafDistributionConfiguration().frameworkUrl(karafUrl).unpackDirectory(new File("target/exam")).useDeployFolder(false).runEmbedded(true),
configureConsole().ignoreLocalConsole().ignoreRemoteShell(),
systemTimeout(720000),
keepRuntimeFolder(),
logLevel(LogLevel.DEBUG),
editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiRegistryPort", RMI_REG_PORT),
editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiServerPort", RMI_SERVER_PORT),
editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", httpPort),
editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port.secure", httpsPort),
replaceConfigurationFile("etc/org.ops4j.pax.logging.cfg", getConfigFile("/etc/org.ops4j.pax.logging.cfg")),
systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
vmOptions("-Dtest-jmx-port=" + jmxPort),
junitBundles(),
features(paxJdbcRepo),
features(authserviceFeatureRepo, "user-admin-with-derby"));
if (JavaVersionUtil.getMajorVersion() < 9) {
return commonOptions;
}
Option[] java11VmOptions = createJava11VmOptions();
return combine(commonOptions, java11VmOptions);
}
private Option[] createJava11VmOptions() {
return options(
vmOption("--add-reads=java.xml=java.logging"),
vmOption("--add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED"),
vmOption("--patch-module"), vmOption("java.base=lib/endorsed/org.apache.karaf.specs.locator-" + System.getProperty("karaf.version") + ".jar"),
vmOption("--patch-module"), vmOption("java.xml=lib/endorsed/org.apache.karaf.specs.java.xml" + System.getProperty("karaf.version") + ".jar"),
vmOption("--add-opens"), vmOption("java.base/java.security=ALL-UNNAMED"),
vmOption("--add-opens"), vmOption("java.base/
java.net=ALL-UNNAMED"),
vmOption("--add-opens"), vmOption("java.base/java.lang=ALL-UNNAMED"),
vmOption("--add-opens"), vmOption("java.base/java.util=ALL-UNNAMED"),
vmOption("--add-opens"), vmOption("java.naming/javax.naming.spi=ALL-UNNAMED"),
vmOption("--add-opens"), vmOption("java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED"),
vmOption("--add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED"),
vmOption("--add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED"),
vmOption("--add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED"),
vmOption("--add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED"),
vmOption("-classpath"), vmOption("lib/jdk9plus/*" + File.pathSeparator + "lib/boot/*"));
}