From 12dde2b69361f79eaa3ea53193d2014f31fd730a Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Wed, 23 Sep 2015 12:06:11 -0700 Subject: [PATCH] load keytool utility main class dynamically, trying both the old and new (java 8) class names --- .../main/java/org/archive/util/KeyTool.java | 32 +++++++++++++++++++ .../java/org/archive/crawler/Heritrix.java | 3 +- .../CookieFetchHTTPIntegrationTest.java | 12 +++---- .../modules/fetcher/FetchHTTPTest.java | 9 +++--- 4 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 commons/src/main/java/org/archive/util/KeyTool.java diff --git a/commons/src/main/java/org/archive/util/KeyTool.java b/commons/src/main/java/org/archive/util/KeyTool.java new file mode 100644 index 000000000..4315a8e08 --- /dev/null +++ b/commons/src/main/java/org/archive/util/KeyTool.java @@ -0,0 +1,32 @@ +package org.archive.util; + +import java.lang.reflect.Method; + +/** + * Wrapper for "keytool" utility main class. Loads class dynamically, trying + * both the old java and new class names. + * @see http://kris-sigur.blogspot.com/2014/10/heritrix-java-8-and-sunsecuritytoolskey.html + */ +public class KeyTool { + public static void main(String[] args) { + try { + Class cl; + try { + // java 6 and 7 + cl = ClassLoader.getSystemClassLoader().loadClass("sun.security.tools.Keytool"); + } catch (ClassNotFoundException e) { + // java 8 + cl = ClassLoader.getSystemClassLoader().loadClass("sun.security.tools.keytool.Main"); + } + Method main = cl.getMethod("main", new String[0].getClass()); + main.invoke(null, (Object) args); + } catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } else { + throw new RuntimeException(e); + } + } + } + +} diff --git a/engine/src/main/java/org/archive/crawler/Heritrix.java b/engine/src/main/java/org/archive/crawler/Heritrix.java index 741a562d8..b6dd39a75 100644 --- a/engine/src/main/java/org/archive/crawler/Heritrix.java +++ b/engine/src/main/java/org/archive/crawler/Heritrix.java @@ -55,14 +55,13 @@ import org.archive.crawler.restlet.EngineApplication; import org.archive.crawler.restlet.RateLimitGuard; import org.archive.util.ArchiveUtils; +import org.archive.util.KeyTool; import org.restlet.Component; import org.restlet.Guard; import org.restlet.Server; import org.restlet.data.ChallengeScheme; import org.restlet.data.Protocol; -import sun.security.tools.KeyTool; - /** * Main class for Heritrix crawler. diff --git a/modules/src/test/java/org/archive/modules/fetcher/CookieFetchHTTPIntegrationTest.java b/modules/src/test/java/org/archive/modules/fetcher/CookieFetchHTTPIntegrationTest.java index f2853e5d4..4ea94d22c 100644 --- a/modules/src/test/java/org/archive/modules/fetcher/CookieFetchHTTPIntegrationTest.java +++ b/modules/src/test/java/org/archive/modules/fetcher/CookieFetchHTTPIntegrationTest.java @@ -29,10 +29,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import junit.extensions.TestSetup; -import junit.framework.Test; -import junit.framework.TestSuite; - import org.apache.commons.collections.Closure; import org.apache.commons.httpclient.URIException; import org.apache.commons.io.FileUtils; @@ -45,6 +41,7 @@ import org.archive.modules.net.ServerCache; import org.archive.spring.ConfigFile; import org.archive.spring.ConfigPath; +import org.archive.util.KeyTool; import org.archive.util.TmpDirTestCase; import org.mortbay.jetty.Request; import org.mortbay.jetty.Server; @@ -53,11 +50,12 @@ import org.mortbay.jetty.servlet.SessionHandler; import org.mortbay.log.Log; -import sun.security.tools.KeyTool; - import com.google.common.io.Files; -@SuppressWarnings("restriction") +import junit.extensions.TestSetup; +import junit.framework.Test; +import junit.framework.TestSuite; + public class CookieFetchHTTPIntegrationTest extends ProcessorTestBase { protected static class TestHandler extends SessionHandler { diff --git a/modules/src/test/java/org/archive/modules/fetcher/FetchHTTPTest.java b/modules/src/test/java/org/archive/modules/fetcher/FetchHTTPTest.java index 887f02e6e..0b159abec 100644 --- a/modules/src/test/java/org/archive/modules/fetcher/FetchHTTPTest.java +++ b/modules/src/test/java/org/archive/modules/fetcher/FetchHTTPTest.java @@ -27,11 +27,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import junit.extensions.TestSetup; -import junit.framework.Test; -import junit.framework.TestSuite; - import org.archive.modules.ProcessorTestBase; +import org.archive.util.KeyTool; import org.archive.util.TmpDirTestCase; import org.mortbay.jetty.NCSARequestLog; import org.mortbay.jetty.Request; @@ -51,7 +48,9 @@ import org.mortbay.jetty.servlet.SessionHandler; import org.mortbay.log.Log; -import sun.security.tools.KeyTool; +import junit.extensions.TestSetup; +import junit.framework.Test; +import junit.framework.TestSuite; public class FetchHTTPTest extends ProcessorTestBase {