From 12dde2b69361f79eaa3ea53193d2014f31fd730a Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Wed, 23 Sep 2015 12:06:11 -0700 Subject: [PATCH 1/3] 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 00000000..4315a8e0 --- /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 741a562d..b6dd39a7 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.framework.Engine; 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 f2853e5d..4ea94d22 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.Cookie; 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.CrawlServer; 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.security.SslSocketConnector; 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 887f02e6..0b159abe 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.ServletException; 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.security.SslSocketConnector; 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 { From 9aabcb3272ec7d408f4c58f8272bba965906eaa6 Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Wed, 23 Sep 2015 12:07:38 -0700 Subject: [PATCH 2/3] add license header to new class --- .../main/java/org/archive/util/KeyTool.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/commons/src/main/java/org/archive/util/KeyTool.java b/commons/src/main/java/org/archive/util/KeyTool.java index 4315a8e0..8298f047 100644 --- a/commons/src/main/java/org/archive/util/KeyTool.java +++ b/commons/src/main/java/org/archive/util/KeyTool.java @@ -1,3 +1,21 @@ +/* + * This file is part of the Heritrix web crawler (crawler.archive.org). + * + * Licensed to the Internet Archive (IA) by one or more individual + * contributors. + * + * The IA licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.archive.util; import java.lang.reflect.Method; From b7afc627edfd92013bbe9808504c8f7f786b2660 Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Thu, 24 Sep 2015 15:31:12 -0700 Subject: [PATCH 3/3] fix typo --- commons/src/main/java/org/archive/util/KeyTool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/src/main/java/org/archive/util/KeyTool.java b/commons/src/main/java/org/archive/util/KeyTool.java index 8298f047..ce5d6127 100644 --- a/commons/src/main/java/org/archive/util/KeyTool.java +++ b/commons/src/main/java/org/archive/util/KeyTool.java @@ -31,7 +31,7 @@ public class KeyTool { Class cl; try { // java 6 and 7 - cl = ClassLoader.getSystemClassLoader().loadClass("sun.security.tools.Keytool"); + cl = ClassLoader.getSystemClassLoader().loadClass("sun.security.tools.KeyTool"); } catch (ClassNotFoundException e) { // java 8 cl = ClassLoader.getSystemClassLoader().loadClass("sun.security.tools.keytool.Main");