You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2017/05/04 16:12:58 UTC
tomee git commit: ensure we scan the classpath for tomee embedded
even if the app loader if not a URLClassLoader + few java 9 fallbacks
Repository: tomee
Updated Branches:
refs/heads/master 31e2251cc -> c26f5923d
ensure we scan the classpath for tomee embedded even if the app loader if not a URLClassLoader + few java 9 fallbacks
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c26f5923
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c26f5923
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c26f5923
Branch: refs/heads/master
Commit: c26f5923de4ccd719eccf9cc822acfd4b187b485
Parents: 31e2251
Author: rmannibucau <rm...@apache.org>
Authored: Thu May 4 18:12:51 2017 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Thu May 4 18:12:51 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/ziplock/JarLocation.java | 6 +-
.../src/main/resources/default.exclusions | 2 +
.../apache/openejb/loader/TomcatClassPath.java | 40 ++++++-----
.../openejb/itest/legacy/LegacyServerTest.java | 3 +
.../apache/openejb/maven/util/XmlFormatter.java | 2 +-
maven/pom.xml | 3 +-
server/openejb-hessian/pom.xml | 22 +++++-
.../tomee/catalina/TomEEWebappClassLoader.java | 14 ++--
tomee/tomee-embedded/pom.xml | 6 ++
.../org/apache/tomee/embedded/SslTomEETest.java | 73 +++++++++++++++-----
.../apache/tomee/jaxrs/ReloadingLoaderTest.java | 13 +++-
.../apache/tomee/loader/TomEEJarScanner.java | 72 +++++++++++++------
utils/openejb-mockito/pom.xml | 2 +-
.../openejb/mockito/MockitoExtension.java | 3 +-
14 files changed, 187 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/arquillian/ziplock/src/main/java/org/apache/ziplock/JarLocation.java
----------------------------------------------------------------------
diff --git a/arquillian/ziplock/src/main/java/org/apache/ziplock/JarLocation.java b/arquillian/ziplock/src/main/java/org/apache/ziplock/JarLocation.java
index d84f91d..244f0e2 100644
--- a/arquillian/ziplock/src/main/java/org/apache/ziplock/JarLocation.java
+++ b/arquillian/ziplock/src/main/java/org/apache/ziplock/JarLocation.java
@@ -41,7 +41,11 @@ public class JarLocation {
try {
final Set<URL> urls = ClassLoaders.findUrls(Thread.currentThread().getContextClassLoader());
for (final URL url : urls) {
- final File f = new File(decode(url.getFile()));
+ final String decode = decode(url.getFile());
+ File f = new File(decode.replaceFirst("file:", ""));
+ if (!f.exists() && f.getPath().endsWith("!")) {
+ f = new File(f.getPath().substring(0, f.getPath().length() - 1));
+ }
if (f.exists() && pattern.matcher(f.getName()).matches()) {
return f;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/container/openejb-core/src/main/resources/default.exclusions
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/resources/default.exclusions b/container/openejb-core/src/main/resources/default.exclusions
index 311eb97..f0e543b 100644
--- a/container/openejb-core/src/main/resources/default.exclusions
+++ b/container/openejb-core/src/main/resources/default.exclusions
@@ -35,6 +35,7 @@ bcprov-
bootstrap.jar
bval-core
bval-jsr
+byte-buddy
c3p0-
cassandra-driver-core
catalina-
@@ -157,6 +158,7 @@ mysql-connector-java-
neethi-
nekohtml-
netty-
+objenesis
openejb-api
openejb-client
openejb-core
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/container/openejb-loader/src/main/java/org/apache/openejb/loader/TomcatClassPath.java
----------------------------------------------------------------------
diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/loader/TomcatClassPath.java b/container/openejb-loader/src/main/java/org/apache/openejb/loader/TomcatClassPath.java
index 9bbd71c..a092485 100644
--- a/container/openejb-loader/src/main/java/org/apache/openejb/loader/TomcatClassPath.java
+++ b/container/openejb-loader/src/main/java/org/apache/openejb/loader/TomcatClassPath.java
@@ -42,7 +42,7 @@ public class TomcatClassPath extends BasicURLClassPath {
private final ClassLoader commonLoader;
private final ClassLoader serverLoader;
- private final Method addRepositoryMethod;
+ private Method addRepositoryMethod;
public TomcatClassPath() {
this(getCommonLoader(getContextClassLoader()));
@@ -50,11 +50,6 @@ public class TomcatClassPath extends BasicURLClassPath {
public TomcatClassPath(final ClassLoader classLoader) {
this.commonLoader = classLoader;
- try {
- addRepositoryMethod = getAddRepositoryMethod();
- } catch (final Exception e) {
- throw new IllegalStateException("Ensure you use the right tomcat version (" + e.getMessage() + ")");
- }
final ClassLoader serverLoader = getServerLoader(getContextClassLoader());
if (serverLoader != null && serverLoader != commonLoader) {
@@ -137,7 +132,7 @@ public class TomcatClassPath extends BasicURLClassPath {
classLoader = serverLoader;
}
- addRepositoryMethod.invoke(classLoader, jar);
+ getAddRepositoryMethod().invoke(classLoader, jar);
}
private boolean useServerClassLoader(final URL jar) {
@@ -211,20 +206,27 @@ public class TomcatClassPath extends BasicURLClassPath {
}
private Method getAddRepositoryMethod() throws Exception {
- return AccessController.doPrivileged(new PrivilegedAction<Method>() {
- @Override
- public Method run() {
- try {
- final Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
- if (!method.isAccessible()) {
- method.setAccessible(true);
+ if (addRepositoryMethod == null) {
+ try {
+ addRepositoryMethod = AccessController.doPrivileged(new PrivilegedAction<Method>() {
+ @Override
+ public Method run() {
+ try {
+ final Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
+ if (!method.isAccessible()) {
+ method.setAccessible(true);
+ }
+ return method;
+ } catch (final Exception e2) {
+ throw (IllegalStateException) new IllegalStateException("Unable to find or access the addRepository method in StandardClassLoader").initCause(e2);
+ }
}
- return method;
- } catch (final Exception e2) {
- throw (IllegalStateException) new IllegalStateException("Unable to find or access the addRepository method in StandardClassLoader").initCause(e2);
- }
+ });
+ } catch (final Exception e) {
+ throw new IllegalStateException("Ensure you use the right tomcat version (" + e.getMessage() + ")", e);
}
- });
+ }
+ return addRepositoryMethod;
}
private static boolean isDirectory(final URL url) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/itests/legacy-server/src/test/java/org/apache/openejb/itest/legacy/LegacyServerTest.java
----------------------------------------------------------------------
diff --git a/itests/legacy-server/src/test/java/org/apache/openejb/itest/legacy/LegacyServerTest.java b/itests/legacy-server/src/test/java/org/apache/openejb/itest/legacy/LegacyServerTest.java
index fd4d765..7a76d19 100644
--- a/itests/legacy-server/src/test/java/org/apache/openejb/itest/legacy/LegacyServerTest.java
+++ b/itests/legacy-server/src/test/java/org/apache/openejb/itest/legacy/LegacyServerTest.java
@@ -50,6 +50,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import static org.apache.openejb.util.NetworkUtil.getNextAvailablePort;
+import static org.junit.Assume.assumeTrue;
public class LegacyServerTest {
@@ -67,6 +68,8 @@ public class LegacyServerTest {
@Test
public void test() throws Exception {
+ final String jv = System.getProperty("java.version");
+ assumeTrue(jv.startsWith("1.7") || jv.startsWith("1.8"));
// To run in an IDE, uncomment and update this line
// System.setProperty("version", OpenEjbVersion.get().getVersion());
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/maven/maven-util/src/main/java/org/apache/openejb/maven/util/XmlFormatter.java
----------------------------------------------------------------------
diff --git a/maven/maven-util/src/main/java/org/apache/openejb/maven/util/XmlFormatter.java b/maven/maven-util/src/main/java/org/apache/openejb/maven/util/XmlFormatter.java
index 7d36f13..0508675 100644
--- a/maven/maven-util/src/main/java/org/apache/openejb/maven/util/XmlFormatter.java
+++ b/maven/maven-util/src/main/java/org/apache/openejb/maven/util/XmlFormatter.java
@@ -50,7 +50,7 @@ public final class XmlFormatter {
final StringWriter stringWriter = new StringWriter();
lsOutput.setCharacterStream(stringWriter);
serializer.write(document, lsOutput);
- return stringWriter.toString();
+ return stringWriter.toString().replace("\"UTF-8\"?><", "\"UTF-8\"?>\n<");
}
return in;
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/maven/pom.xml
----------------------------------------------------------------------
diff --git a/maven/pom.xml b/maven/pom.xml
index 8f5122e..1cc7373 100644
--- a/maven/pom.xml
+++ b/maven/pom.xml
@@ -101,6 +101,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
+ <version>3.5</version>
<executions>
<execution>
<id>mojo-descriptor</id>
@@ -123,7 +124,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
- <version>3.0</version>
+ <version>3.5</version>
</plugin>
</plugins>
</reporting>
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/server/openejb-hessian/pom.xml
----------------------------------------------------------------------
diff --git a/server/openejb-hessian/pom.xml b/server/openejb-hessian/pom.xml
index c73e585..7ca03e7 100644
--- a/server/openejb-hessian/pom.xml
+++ b/server/openejb-hessian/pom.xml
@@ -54,8 +54,28 @@ limitations under the License.
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
- <version>4.0.7</version>
+ <version>4.0.38</version>
<scope>provided</scope>
</dependency>
</dependencies>
+
+ <profiles>
+ <profile>
+ <id>java9</id>
+ <activation>
+ <jdk>9</jdk>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration> <!-- com.caucho.hessian.io.StackTraceElementDeserializer doesnt support java 9 without "opens" -->
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
</project>
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
index fd00a77..a83518d 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
@@ -98,7 +98,7 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
hashCode = construct();
setJavaseClassLoader(getSystemClassLoader());
containerClassLoader = ParentClassLoaderFinder.Helper.get();
- isEar = getParent() != null && !getParent().equals(containerClassLoader) && defaultEarBehavior();
+ isEar = getInternalParent() != null && !getInternalParent().equals(containerClassLoader) && defaultEarBehavior();
originalDelegate = getDelegate();
}
@@ -107,10 +107,14 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
hashCode = construct();
setJavaseClassLoader(getSystemClassLoader());
containerClassLoader = ParentClassLoaderFinder.Helper.get();
- isEar = getParent() != null && !getParent().equals(containerClassLoader) && defaultEarBehavior();
+ isEar = getInternalParent() != null && !getInternalParent().equals(containerClassLoader) && defaultEarBehavior();
originalDelegate = getDelegate();
}
+ public ClassLoader getInternalParent() {
+ return getParent();
+ }
+
private int construct() {
setDelegate(isDelegate());
configurer = INIT_CONFIGURER.get();
@@ -187,8 +191,8 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
final boolean filter = filter(name, true);
filterTempCache.put(name, filter); // will be called again by super.loadClass() so cache it
if (!filter) {
- if (URLClassLoaderFirst.class.isInstance(getParent())) { // true
- final URLClassLoaderFirst urlClassLoaderFirst = URLClassLoaderFirst.class.cast(getParent());
+ if (URLClassLoaderFirst.class.isInstance(getInternalParent())) { // true
+ final URLClassLoaderFirst urlClassLoaderFirst = URLClassLoaderFirst.class.cast(getInternalParent());
Class<?> c = urlClassLoaderFirst.findAlreadyLoadedClass(name);
if (c != null) {
return c;
@@ -499,7 +503,7 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
@Override
public TomEEWebappClassLoader copyWithoutTransformers() {
- final TomEEWebappClassLoader result = new TomEEWebappClassLoader(getParent());
+ final TomEEWebappClassLoader result = new TomEEWebappClassLoader(getInternalParent());
result.additionalRepos = additionalRepos;
result.configurer = configurer;
super.copyStateWithoutTransformers(result);
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/tomee/tomee-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/pom.xml b/tomee/tomee-embedded/pom.xml
index 7247a2a..ecb7ce5 100644
--- a/tomee/tomee-embedded/pom.xml
+++ b/tomee/tomee-embedded/pom.xml
@@ -470,6 +470,12 @@
<version>${version.shrinkwrap.shrinkwrap}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcmail-jdk15on</artifactId>
+ <version>1.54</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java
index b1c781a..3f5e711 100644
--- a/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java
+++ b/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/SslTomEETest.java
@@ -17,11 +17,29 @@
package org.apache.tomee.embedded;
import org.apache.openejb.loader.Files;
+import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.cert.X509CertificateHolder;
+import org.bouncycastle.cert.X509v1CertificateBuilder;
+import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
+import org.bouncycastle.cert.jcajce.JcaX509v1CertificateBuilder;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
+import org.junit.Assert;
import org.junit.Test;
import javax.management.ObjectName;
import java.io.File;
+import java.io.FileOutputStream;
import java.lang.management.ManagementFactory;
+import java.math.BigInteger;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.KeyStore;
+import java.security.Security;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -36,28 +54,45 @@ public class SslTomEETest {
Files.delete(keystore);
}
- Class<?> keyToolClass;
- try {
- keyToolClass = Class.forName("sun.security.tools.KeyTool");
- } catch (final ClassNotFoundException e) {
+ keystore.getParentFile().mkdirs();
+ try (final FileOutputStream fos = new FileOutputStream(keystore)) {
+ final KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");
+ keyGenerator.initialize(1024);
+
+ final KeyPair pair = keyGenerator.generateKeyPair();
+
+ final boolean addBc = Security.getProvider("BC") == null;
+ if (addBc) {
+ Security.addProvider(new BouncyCastleProvider());
+ }
try {
- // in jdk8, the tool changed ...
- keyToolClass = Class.forName("sun.security.tools.keytool.Main");
- } catch (final ClassNotFoundException cnfe) {
- keyToolClass = Class.forName("com.ibm.crypto.tools.KeyTool");
+
+ final X509v1CertificateBuilder x509v1CertificateBuilder = new JcaX509v1CertificateBuilder(
+ new X500Name("cn=serveralias"),
+ BigInteger.valueOf(1),
+ new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1)),
+ new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)),
+ new X500Name("cn=serveralias"),
+ pair.getPublic());
+
+ final X509CertificateHolder certHldr = x509v1CertificateBuilder
+ .build(new JcaContentSignerBuilder("SHA1WithRSA")
+ .setProvider("BC").build(pair.getPrivate()));
+
+ final X509Certificate cert = new JcaX509CertificateConverter().setProvider("BC").getCertificate(certHldr);
+
+ final KeyStore ks = KeyStore.getInstance("JKS");
+ ks.load(null, "changeit".toCharArray());
+ ks.setKeyEntry("serveralias", pair.getPrivate(), "changeit".toCharArray(), new Certificate[]{cert});
+ ks.store(fos, "changeit".toCharArray());
+ } finally {
+ if (addBc) {
+ Security.removeProvider("BC");
+ }
}
+ } catch (final Exception e) {
+ Assert.fail(e.getMessage());
}
-
- final String[] args = {
- "-genkey",
- "-alias", "serveralias",
- "-keypass", "changeit",
- "-keystore", keystore.getAbsolutePath(),
- "-storepass", "changeit",
- "-dname", "cn=serveralias",
- "-keyalg", "RSA"
- };
- keyToolClass.getMethod("main", String[].class).invoke(null, new Object[]{args});
}
final Configuration configuration = new Configuration();
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/tomee/tomee-jaxrs/src/test/java/org/apache/tomee/jaxrs/ReloadingLoaderTest.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-jaxrs/src/test/java/org/apache/tomee/jaxrs/ReloadingLoaderTest.java b/tomee/tomee-jaxrs/src/test/java/org/apache/tomee/jaxrs/ReloadingLoaderTest.java
index 56c4d22..575582a 100644
--- a/tomee/tomee-jaxrs/src/test/java/org/apache/tomee/jaxrs/ReloadingLoaderTest.java
+++ b/tomee/tomee-jaxrs/src/test/java/org/apache/tomee/jaxrs/ReloadingLoaderTest.java
@@ -49,6 +49,7 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collections;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicReference;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -58,6 +59,7 @@ public class ReloadingLoaderTest {
private AppInfo info;
private AppContext context;
private TomEEWebappClassLoader loader;
+ private AtomicReference<ClassLoader> parentInstance;
@BeforeClass
@AfterClass
@@ -81,7 +83,13 @@ public class ReloadingLoaderTest {
}
});
- loader = new TomEEWebappClassLoader(ParentClassLoaderFinder.Helper.get()) {
+ parentInstance = new AtomicReference<>(ParentClassLoaderFinder.Helper.get());
+ loader = new TomEEWebappClassLoader(parentInstance.get()) {
+ @Override
+ public ClassLoader getInternalParent() {
+ return parentInstance.get();
+ }
+
@Override
protected void clearReferences() {
// no-op: this test should be reworked to support it but in real life a loader is not stopped/started
@@ -168,7 +176,8 @@ public class ReloadingLoaderTest {
resources.start();
loader.start();
// TomcatWebAppBuilder ill catch start event from StandardContext and force a classloader
- Reflections.set(loader, "parent", ParentClassLoaderFinder.Helper.get());
+ // Reflections.set(loader, "parent", ParentClassLoaderFinder.Helper.get());
+ parentInstance.set(ParentClassLoaderFinder.Helper.get());
server.afterApplicationCreated(new AssemblerAfterApplicationCreated(info, context, Collections.<BeanContext>emptyList()));
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
index 9624c34..b76d91f 100644
--- a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
+++ b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
@@ -33,9 +33,17 @@ import javax.servlet.ServletContext;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
+import java.net.MalformedURLException;
import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Collection;
+import java.util.Deque;
+import java.util.HashSet;
+import java.util.LinkedList;
import java.util.Set;
+import static java.lang.ClassLoader.getSystemClassLoader;
+
// todo: share common tld parsing, tomcat has a built in method for it, ensure we reuse it
public class TomEEJarScanner extends StandardJarScanner {
private static final TomEEFilter DEFAULT_JAR_SCAN_FILTER = new TomEEFilter(null);
@@ -59,36 +67,56 @@ public class TomEEJarScanner extends StandardJarScanner {
@Override
public void scan(final JarScanType scanType, final ServletContext context, final JarScannerCallback callback) {
super.scan(scanType, context, callback);
- embeddedSurefireScanning(scanType, context, callback);
+ if (!embeddedSurefireScanning(scanType, context, callback) && isScanClassPath() && !URLClassLoader.class.isInstance(getSystemClassLoader())
+ && !Boolean.getBoolean("tomee.classpath.scanning.disabled")) {
+ // TODO: check on tomcat upgrade if it is fixed
+ final String cp = System.getProperty("java.class.path");
+ final Collection<URL> urls = new HashSet<>();
+ for (final String jar : cp.split(File.pathSeparator)) {
+ try {
+ urls.add(new File(jar).toURI().toURL());
+ } catch (MalformedURLException e) {
+ // no-op
+ }
+ }
+ doScan(scanType, callback, new LinkedList<>(urls));
+ }
}
- private void embeddedSurefireScanning(final JarScanType scanType, final ServletContext context, final JarScannerCallback callback) {
+ private boolean embeddedSurefireScanning(final JarScanType scanType, final ServletContext context, final JarScannerCallback callback) {
if (isScanClassPath() && System.getProperty("surefire.real.class.path") != null) {
- Method process = null;
try {
final Set<URL> urls = ClassLoaders.findUrls(context.getClassLoader().getParent());
- final boolean scanAllDirectories = isScanAllDirectories();
- for (final URL url : urls) {
- final File cpe = URLs.toFile(url);
- if ((cpe.getName().endsWith(".jar") ||
- scanType == JarScanType.PLUGGABILITY ||
- scanAllDirectories) &&
- getJarScanFilter().check(scanType, cpe.getName())) {
- try {
- if (process == null) {
- process = StandardJarScanner.class.getDeclaredMethod("process", JarScanType.class, JarScannerCallback.class, URL.class, String.class, boolean.class);
- if (!process.isAccessible()) {
- process.setAccessible(true);
- }
- }
- process.invoke(this, scanType, callback, url, null, true);
- } catch (final Exception ioe) {
- // no-op
+ doScan(scanType, callback, new LinkedList<>(urls));
+ return true;
+ } catch (final IOException e) {
+ // no-op
+ }
+ }
+ return false;
+ }
+
+ private void doScan(final JarScanType scanType, final JarScannerCallback callback, final Deque<URL> urls) {
+ Method process = null;
+ final boolean scanAllDirectories = isScanAllDirectories();
+ for (final URL url : urls) {
+ final File cpe = URLs.toFile(url);
+ if ((cpe.getName().endsWith(".jar") ||
+ scanType == JarScanType.PLUGGABILITY ||
+ scanAllDirectories) &&
+ getJarScanFilter().check(scanType, cpe.getName())) {
+ try {
+ if (process == null) {
+ process = StandardJarScanner.class.getDeclaredMethod("process",
+ JarScanType.class, JarScannerCallback.class, URL.class, String.class, boolean.class, Deque.class);
+ if (!process.isAccessible()) {
+ process.setAccessible(true);
}
}
+ process.invoke(this, scanType, callback, url, null, true, urls);
+ } catch (final Exception ioe) {
+ // no-op
}
- } catch (final IOException e) {
- // no-op
}
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/utils/openejb-mockito/pom.xml
----------------------------------------------------------------------
diff --git a/utils/openejb-mockito/pom.xml b/utils/openejb-mockito/pom.xml
index e154847..90c881a 100644
--- a/utils/openejb-mockito/pom.xml
+++ b/utils/openejb-mockito/pom.xml
@@ -38,7 +38,7 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
- <version>1.9.0</version>
+ <version>2.7.9</version>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
http://git-wip-us.apache.org/repos/asf/tomee/blob/c26f5923/utils/openejb-mockito/src/main/java/org/apache/openejb/mockito/MockitoExtension.java
----------------------------------------------------------------------
diff --git a/utils/openejb-mockito/src/main/java/org/apache/openejb/mockito/MockitoExtension.java b/utils/openejb-mockito/src/main/java/org/apache/openejb/mockito/MockitoExtension.java
index 854a536..359e85d 100644
--- a/utils/openejb-mockito/src/main/java/org/apache/openejb/mockito/MockitoExtension.java
+++ b/utils/openejb-mockito/src/main/java/org/apache/openejb/mockito/MockitoExtension.java
@@ -21,7 +21,6 @@ import org.apache.openejb.loader.SystemInstance;
import org.apache.webbeans.annotation.AnyLiteral;
import org.apache.webbeans.annotation.DefaultLiteral;
import org.apache.webbeans.annotation.NamedLiteral;
-import org.mockito.cglib.proxy.Factory;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
@@ -84,7 +83,7 @@ public class MockitoExtension implements Extension {
}
}
for (Class<?> itf : clazz.getInterfaces()) {
- if (Factory.class.isAssignableFrom(itf)) {
+ if (itf.getName().startsWith("org.mockito")) {
continue;
}