Repository: tomee Updated Branches: refs/heads/master 93e0ea3fd -> 09ace0868
http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessSetterInjectionTests.java ---------------------------------------------------------------------- diff --git a/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessSetterInjectionTests.java b/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessSetterInjectionTests.java index c9c9b44..a3dec87 100644 --- a/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessSetterInjectionTests.java +++ b/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessSetterInjectionTests.java @@ -16,9 +16,9 @@ */ package org.apache.openejb.test.stateless; -import org.apache.openejb.test.stateful.StatefulTestClient; -import org.apache.openejb.test.TestManager; import org.apache.openejb.test.TestFailureException; +import org.apache.openejb.test.TestManager; +import org.apache.openejb.test.stateful.StatefulTestClient; /** * [4] Should be run as the fourth test suite of the StatefulTestClients @@ -35,7 +35,7 @@ public class StatelessSetterInjectionTests extends StatefulTestClient { protected void setUp() throws Exception { super.setUp(); final Object obj = initialContext.lookup("client/tests/stateless/SetterInjectionStatelessBean"); - ejbHome = (EncStatelessHome) javax.rmi.PortableRemoteObject.narrow(obj, EncStatelessHome.class); + ejbHome = (EncStatelessHome) obj; ejbObject = ejbHome.create(); /*[2] Create database table */ http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 3467084..e29831c 100644 --- a/pom.xml +++ b/pom.xml @@ -98,7 +98,7 @@ <version.javaee-api>7.0-1</version.javaee-api> <openjpa.version>2.4.2</openjpa.version> - <org.apache.openwebbeans.version>1.7.3</org.apache.openwebbeans.version> + <org.apache.openwebbeans.version>1.7.4-SNAPSHOT</org.apache.openwebbeans.version> <jcs.version>2.1</jcs.version> <johnzon.version>1.0.0</johnzon.version> @@ -1675,6 +1675,21 @@ <artifactId>geronimo-jaxb_2.2_spec</artifactId> <version>1.0.1</version> </dependency> + <dependency> + <groupId>javax.xml.bind</groupId> + <artifactId>jaxb-api</artifactId> + <version>2.2.11</version> + </dependency> + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-impl</artifactId> + <version>2.2.11</version> + </dependency> + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-core</artifactId> + <version>2.2.11</version> + </dependency> </dependencies> </dependencyManagement> http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/server/openejb-client/pom.xml ---------------------------------------------------------------------- diff --git a/server/openejb-client/pom.xml b/server/openejb-client/pom.xml index 733e366..1ebba95 100644 --- a/server/openejb-client/pom.xml +++ b/server/openejb-client/pom.xml @@ -141,6 +141,18 @@ <optional>true</optional> </dependency> <dependency> + <groupId>javax.xml.bind</groupId> + <artifactId>jaxb-api</artifactId> + </dependency> + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-impl</artifactId> + </dependency> + <dependency> + <groupId>com.sun.xml.bind</groupId> + <artifactId>jaxb-core</artifactId> + </dependency> + <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging-api</artifactId> <scope>test</scope> @@ -155,6 +167,12 @@ <artifactId>rmock</artifactId> <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/09ace086/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java b/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java index efc0723..548aa58 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java @@ -21,12 +21,10 @@ import org.apache.openejb.client.corba.InstanceOf; import org.apache.openejb.client.serializer.EJBDSerializer; import org.apache.openejb.client.serializer.SerializationWrapper; -import javax.rmi.PortableRemoteObject; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.lang.reflect.Method; -import java.rmi.Remote; import java.util.Arrays; public class EJBRequest implements ClusterableRequest { @@ -553,7 +551,7 @@ public class EJBRequest implements ClusterableRequest { throw new IOException("Unkown primitive type: " + clazz); } } else { - if (PortableRemoteObject.class.isInstance(obj) && Remote.class.isInstance(obj)) { + if (InstanceOf.isRemote(obj)) { obj = Corbas.toStub(obj); } out.write(OBJECT); http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/server/openejb-client/src/main/java/org/apache/openejb/client/MulticastPulseClient.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/MulticastPulseClient.java b/server/openejb-client/src/main/java/org/apache/openejb/client/MulticastPulseClient.java index 736c284..c4c1d72 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/MulticastPulseClient.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/MulticastPulseClient.java @@ -1,9 +1,8 @@ package org.apache.openejb.client; -import sun.net.util.IPAddressUtil; - import java.io.IOException; import java.net.DatagramPacket; +import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -247,12 +246,21 @@ public class MulticastPulseClient extends MulticastConnectionFactory { //Sort by hostname, IPv4, IPv6 try { - if (IPAddressUtil.isIPv4LiteralAddress(h1)) { - if (IPAddressUtil.isIPv6LiteralAddress(h2.replace("[", "").replace("]", ""))) { + InetAddress address1 = null; + InetAddress address2 = null; + try { + address1 = InetAddress.getByName(h1); + address2 = InetAddress.getByName(h2); + } catch(final UnknownHostException e) { + // no-op + } + + if (isIPv4LiteralAddress(address1)) { + if (isIPv6LiteralAddress(address2)) { return -1; } - } else if (IPAddressUtil.isIPv6LiteralAddress(h1.replace("[", "").replace("]", ""))) { - if (IPAddressUtil.isIPv4LiteralAddress(h2)) { + } else if (isIPv6LiteralAddress(address1)) { + if (isIPv4LiteralAddress(address2)) { return 1; } } else if (0 != h1.compareTo(h2)) { @@ -264,6 +272,14 @@ public class MulticastPulseClient extends MulticastConnectionFactory { return h1.compareTo(h2); } + + private boolean isIPv4LiteralAddress(final InetAddress val) { + return Inet4Address.class.isInstance(val); + } + + private boolean isIPv6LiteralAddress(final InetAddress val) { + return Inet6Address.class.isInstance(val); + } }); final ReentrantLock setLock = new ReentrantLock(); http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/server/openejb-client/src/main/java/org/apache/openejb/client/corba/InstanceOf.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/corba/InstanceOf.java b/server/openejb-client/src/main/java/org/apache/openejb/client/corba/InstanceOf.java index 80c76c2..a14f99a 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/corba/InstanceOf.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/corba/InstanceOf.java @@ -18,15 +18,24 @@ package org.apache.openejb.client.corba; public final class InstanceOf { private static final Class<?> STUB; + private static final Class<?> PORTABLE_REMOTE_OBJECT; + private static final Class<?> REMOTE; static { Class<?> stub = null; + Class<?> pro = null; + Class<?> remote = null; try { - stub = Thread.currentThread().getContextClassLoader().loadClass("javax.rmi.CORBA.Stub"); - } catch (ClassNotFoundException e) { + final ClassLoader loader = Thread.currentThread().getContextClassLoader(); + stub = loader.loadClass("javax.rmi.CORBA.Stub"); + pro = loader.loadClass("javax.rmi.PortableRemoteObject"); + remote = loader.loadClass("java.rmi.Remote"); + } catch (final ClassNotFoundException e) { // no-op } STUB = stub; + PORTABLE_REMOTE_OBJECT = pro; + REMOTE = remote; } private InstanceOf() { @@ -36,4 +45,8 @@ public final class InstanceOf { public static boolean isStub(final Object instance) { return STUB != null && STUB.isInstance(instance); } + + public static boolean isRemote(final Object obj) { + return REMOTE != null && PORTABLE_REMOTE_OBJECT != null && REMOTE.isInstance(obj) && PORTABLE_REMOTE_OBJECT.isInstance(obj); + } } http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/server/openejb-client/src/test/java/org/apache/openejb/client/EJBRequestTest.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/test/java/org/apache/openejb/client/EJBRequestTest.java b/server/openejb-client/src/test/java/org/apache/openejb/client/EJBRequestTest.java index f33d175..c1a807f 100644 --- a/server/openejb-client/src/test/java/org/apache/openejb/client/EJBRequestTest.java +++ b/server/openejb-client/src/test/java/org/apache/openejb/client/EJBRequestTest.java @@ -17,7 +17,6 @@ package org.apache.openejb.client; import junit.framework.TestCase; -import org.omg.CORBA.UserException; import javax.ejb.EJBHome; import javax.ejb.EJBObject; @@ -42,7 +41,7 @@ public class EJBRequestTest extends TestCase { static interface FooObject extends EJBObject { - String businessMethod(String param) throws UserException; + String businessMethod(String param); } @Override @@ -52,7 +51,7 @@ public class EJBRequestTest extends TestCase { public void testEJBHomeCreate() throws Exception { final RequestMethodCode requestMethod = RequestMethodCode.EJB_HOME_CREATE; - final Method method = FooHome.class.getMethod("create", new Class[]{}); + final Method method = FooHome.class.getMethod("create", new Class[0]); final Object[] args = new Object[]{}; invoke(requestMethod, method, args); http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsConnectionTest.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsConnectionTest.java b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsConnectionTest.java index 934a0d9..46a7d67 100644 --- a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsConnectionTest.java +++ b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsConnectionTest.java @@ -5,9 +5,9 @@ * The ASF 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 - * + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> * 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. @@ -16,6 +16,13 @@ */ package org.apache.openejb.client; +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.After; import org.junit.Assert; import org.junit.Before; @@ -23,13 +30,23 @@ import org.junit.Test; import java.io.BufferedReader; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; +import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; import java.security.KeyManagementException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.KeyStore; import java.security.NoSuchAlgorithmException; +import java.security.Security; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.Date; +import java.util.concurrent.TimeUnit; /** */ @@ -51,6 +68,7 @@ public class HttpsConnectionTest { @After public void close() { + httpsSimpleServer.close(); httpsSimpleServer = null; dropKeyStore(); } @@ -59,9 +77,9 @@ public class HttpsConnectionTest { public void testHttps() throws URISyntaxException, IOException { final HttpConnectionFactory factory = new HttpConnectionFactory(); final String url = "https://" + SERVER + ":" + SERVER_PORT + "/secure" + - "?sslKeyStore=" + STORE_PATH + "&sslKeyStorePassword=" + STORE_PWD + "&sslKeyStoreProvider=SunX509&sslKeyStoreType=jks" + - "&sslTrustStore=" + STORE_PATH + "&sslTrustStorePassword=" + STORE_PWD + "&readTimeout=500"; - Connection connection = factory.getConnection(new URI(url)); + "?sslKeyStore=" + STORE_PATH + "&sslKeyStorePassword=" + STORE_PWD + "&sslKeyStoreProvider=SunX509&sslKeyStoreType=jks" + + "&sslTrustStore=" + STORE_PATH + "&sslTrustStorePassword=" + STORE_PWD + "&readTimeout=500"; + Connection connection = factory.getConnection(new URI(url)); BufferedReader br = null; StringBuilder sb = new StringBuilder(); @@ -91,29 +109,45 @@ public class HttpsConnectionTest { dropKeyStore(); File keyStore = new File(STORE_PATH); - 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=" + SERVER), + BigInteger.valueOf(1), + new Date(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1)), + new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1)), + new X500Name("cn=" + SERVER), + 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, STORE_PWD.toCharArray()); + ks.setKeyEntry(SERVER, pair.getPrivate(), STORE_PWD.toCharArray(), new Certificate[]{cert}); + ks.store(fos, STORE_PWD.toCharArray()); + } finally { + if (addBc) { + Security.removeProvider("BC"); + } } + } catch (final Exception e) { + Assert.fail(e.getMessage()); } - - final String[] args = { - "-genkey", - "-alias", SERVER, - "-keypass", STORE_PWD, - "-keystore", keyStore.getAbsolutePath(), - "-storepass", STORE_PWD, - "-dname", "cn=" + SERVER, - "-keyalg", "RSA" - }; - keyToolClass.getMethod("main", String[].class).invoke(null, new Object[]{args}); - return keyStore; } http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsSimpleServer.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsSimpleServer.java b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsSimpleServer.java index 5ad744d..35d2cb3 100644 --- a/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsSimpleServer.java +++ b/server/openejb-client/src/test/java/org/apache/openejb/client/HttpsSimpleServer.java @@ -16,7 +16,12 @@ */ package org.apache.openejb.client; -import com.sun.net.httpserver.*; +import com.sun.net.httpserver.Headers; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpsConfigurator; +import com.sun.net.httpserver.HttpsParameters; +import com.sun.net.httpserver.HttpsServer; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; @@ -29,7 +34,9 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executors; -public class HttpsSimpleServer { +public class HttpsSimpleServer implements AutoCloseable { + + private final HttpsServer server; public HttpsSimpleServer(int serverPort, final String storePath, final String storePassword) throws IOException, KeyManagementException, NoSuchAlgorithmException { final Map<String, String> params = new HashMap<String, String>() { @@ -41,7 +48,7 @@ public class HttpsSimpleServer { } }; - HttpsServer server = HttpsServer.create(new InetSocketAddress(serverPort), 5); + server = HttpsServer.create(new InetSocketAddress(serverPort), 5); SSLContext sslContext = new SSLContextBuilder(params).build(); final SSLEngine m_engine = sslContext.createSSLEngine(); @@ -58,6 +65,11 @@ public class HttpsSimpleServer { server.start(); } + @Override + public void close() { + server.stop(0); + } + class MyHandler implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy ---------------------------------------------------------------------- diff --git a/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy b/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy index 8cb1ca1..681936f 100644 --- a/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy +++ b/tomee/apache-tomee/src/main/groovy/commands/SetupCommand.groovy @@ -100,9 +100,7 @@ class SetupCommand { // clean up duplicate jars since in TomEE it is useless // = gain of space ;) - deleteWithRetry(file: paths.getJAXBImpl()) deleteWithRetry(file: paths.getOpenEJBTomcatLoaderJar()) - deleteWithRetry(file: paths.findTomEELibJar('jaxb-impl')) deleteWithRetry(file: paths.findTomEELibJar("openejb-javaagent-${tomeeVersion}.jar" as String)) // we need the one without version http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java ---------------------------------------------------------------------- diff --git a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java index 38eee47..83d694e 100644 --- a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java +++ b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java @@ -258,11 +258,6 @@ public class Paths implements PathsInterface { return findOpenEJBJar("javaee-api"); } - @Override - public File getJAXBImpl() { - return findOpenEJBJar("jaxb-impl"); - } - /** * Returns the openejb-javaagent.jar file * @return the openejb-javaagent.jar file http://git-wip-us.apache.org/repos/asf/tomee/blob/09ace086/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java ---------------------------------------------------------------------- diff --git a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java index f9a204d..390a9c9 100644 --- a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java +++ b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java @@ -58,8 +58,6 @@ public interface PathsInterface { File getJavaEEAPIJar(); - File getJAXBImpl(); - File getOpenEJBJavaagentJar(); File getOpenEJBCoreJar();
