Move JettyServer to Axis2's testutils.
diff --git a/modules/rampart-integration/pom.xml b/modules/rampart-integration/pom.xml
index 1894caf..8be65a1 100644
--- a/modules/rampart-integration/pom.xml
+++ b/modules/rampart-integration/pom.xml
@@ -496,24 +496,9 @@
<artifactId>log4j</artifactId>
</dependency>
<dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-webapp</artifactId>
- <version>${jetty.version}</version>
- </dependency>
- <dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-testutils</artifactId>
<version>${axis2.version}</version>
</dependency>
- <dependency>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcpkix-jdk15on</artifactId>
- <version>${bcprov.jdk15.version}</version>
- </dependency>
</dependencies>
</project>
diff --git a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/JettyServer.java b/modules/rampart-integration/src/main/java/org/apache/axis2/integration/JettyServer.java
deleted file mode 100644
index 6742b6e..0000000
--- a/modules/rampart-integration/src/main/java/org/apache/axis2/integration/JettyServer.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright 2004 - 2014 The Apache Software Foundation.
- *
- * Licensed 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.apache.axis2.integration;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.KeyStore;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.SecureRandom;
-import java.security.cert.X509Certificate;
-import java.util.Date;
-import java.util.Random;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.junit.rules.ExternalResource;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.transport.http.AxisServlet;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.bouncycastle.asn1.x500.X500Name;
-import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
-import org.bouncycastle.cert.X509CertificateHolder;
-import org.bouncycastle.cert.X509v3CertificateBuilder;
-import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
-import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
-
-/**
- * Support for running an embedded Jetty server
- */
-public class JettyServer extends ExternalResource {
- /**
- * The alias of the certificate to configure for Jetty's ssl context factory: {@value}
- */
- private static final String CERT_ALIAS = "server";
-
- /**
- * Webapp resource base directory to use: {@value}
- */
- private static final String WEBAPP_DIR = "target" + File.separator + "webapp";
-
- private static final Log log = LogFactory.getLog(JettyServer.class);
-
- private final String repository;
- private final boolean secure;
- private File keyStoreFile;
- private File trustStoreFile;
- private Server server;
- private boolean systemPropertiesSet;
- private String savedTrustStore;
- private String savedTrustStorePassword;
- private String savedTrustStoreType;
-
- /**
- * Constructor.
- *
- * @param repository
- * The path to the Axis2 repository to use. Must not be null or empty.
- * @param secure
- * Whether to enable HTTPS.
- */
- public JettyServer(String repository, boolean secure) {
- if (repository == null || repository.trim().length() == 0) {
- throw new IllegalArgumentException("Axis2 repository must not be null or empty");
- }
- this.repository = repository;
- this.secure = secure;
- }
-
- private String generatePassword(Random random) {
- char[] password = new char[8];
- for (int i=0; i<password.length; i++) {
- password[i] = (char)('0' + random.nextInt(10));
- }
- return new String(password);
- }
-
- private void writeKeyStore(KeyStore keyStore, File file, String password) throws Exception {
- FileOutputStream out = new FileOutputStream(file);
- try {
- keyStore.store(out, password.toCharArray());
- } finally {
- out.close();
- }
- }
-
- @Override
- protected void before() throws Throwable {
- server = new Server();
-
- if (!secure) {
- SelectChannelConnector connector = new SelectChannelConnector();
- server.addConnector(connector);
- } else {
- SecureRandom random = new SecureRandom();
-
- // Generate key pair
- KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
- keyPairGenerator.initialize(1024, random);
- KeyPair keyPair = keyPairGenerator.generateKeyPair();
- PrivateKey privateKey = keyPair.getPrivate();
- PublicKey publicKey = keyPair.getPublic();
-
- // Generate certificate
- X500Name dn = new X500Name("cn=localhost,o=Apache");
- BigInteger serial = BigInteger.valueOf(random.nextInt());
- Date notBefore = new Date();
- Date notAfter = new Date(notBefore.getTime() + 3600000L);
- SubjectPublicKeyInfo subPubKeyInfo = SubjectPublicKeyInfo.getInstance(publicKey.getEncoded());
- X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(dn, serial, notBefore, notAfter, dn, subPubKeyInfo);
- X509CertificateHolder certHolder = certBuilder.build(new JcaContentSignerBuilder("SHA1WithRSA").build(privateKey));
- X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certHolder);
-
- // Build key store
- keyStoreFile = File.createTempFile("keystore", "jks", null);
- String keyStorePassword = generatePassword(random);
- String keyPassword = generatePassword(random);
- KeyStore keyStore = KeyStore.getInstance("JKS");
- keyStore.load(null, null);
- keyStore.setKeyEntry(CERT_ALIAS, privateKey, keyPassword.toCharArray(), new X509Certificate[] { cert });
- writeKeyStore(keyStore, keyStoreFile, keyStorePassword);
-
- // Build trust store
- trustStoreFile = File.createTempFile("truststore", "jks", null);
- String trustStorePassword = generatePassword(random);
- KeyStore trustStore = KeyStore.getInstance("JKS");
- trustStore.load(null, null);
- trustStore.setCertificateEntry(CERT_ALIAS, cert);
- writeKeyStore(trustStore, trustStoreFile, trustStorePassword);
-
- SslContextFactory sslContextFactory = new SslContextFactory();
- sslContextFactory.setKeyStorePath(keyStoreFile.getAbsolutePath());
- sslContextFactory.setKeyStorePassword(keyStorePassword);
- sslContextFactory.setKeyManagerPassword(keyPassword);
- sslContextFactory.setCertAlias(CERT_ALIAS);
- SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(sslContextFactory);
-
- server.addConnector(sslConnector);
-
- savedTrustStore = System.getProperty("javax.net.ssl.trustStore");
- System.setProperty("javax.net.ssl.trustStore", trustStoreFile.getAbsolutePath());
- savedTrustStorePassword = System.getProperty("javax.net.ssl.trustStorePassword");
- System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
- savedTrustStoreType = System.getProperty("javax.net.ssl.trustStoreType");
- System.setProperty("javax.net.ssl.trustStoreType", "JKS");
- systemPropertiesSet = true;
- }
-
- WebAppContext context = new WebAppContext();
- File webappDir = new File(WEBAPP_DIR);
- if (!webappDir.exists() && !webappDir.mkdirs()) {
- log.error("Failed to create Axis2 webapp directory: " + webappDir.getAbsolutePath());
- }
-
- context.setResourceBase(webappDir.getAbsolutePath());
- context.setContextPath("/axis2");
- context.setParentLoaderPriority(true);
- context.setThrowUnavailableOnStartupException(true);
-
- final ConfigurationContext configurationContext =
- ConfigurationContextFactory.createConfigurationContextFromFileSystem(repository);
- @SuppressWarnings("serial")
- ServletHolder servlet = new ServletHolder(new AxisServlet() {
- @Override
- protected ConfigurationContext initConfigContext(ServletConfig config)
- throws ServletException {
- return configurationContext;
- }
- });
-
- //load on startup to trigger Axis2 initialization and service deployment
- //this is for backward compatibility with the SimpleHttpServer which initializes Axis2 on startup
- servlet.setInitOrder(0);
-
- context.addServlet(servlet, "/services/*");
-
- server.setHandler(context);
-
- try {
- server.start();
- }
- catch (SecurityException e) {
- if (e.getMessage().equals("class \"javax.servlet.ServletRequestListener\"'s signer information does not match signer information of other classes in the same package")) {
- log.error(
- "It is likely your test classpath contains multiple different versions of servlet api.\n" +
- "If you are running this test in an IDE, please configure it to exclude Rampart's core module servlet api dependency.");
- throw e;
- }
- }
-
- log.info("Server started on port " + getPort());
- }
-
- @Override
- protected void after() {
- if (server != null) {
- log.info("Stop called");
- try {
- server.stop();
- } catch (Exception ex) {
- log.error("Failed to stop Jetty server", ex);
- }
- server = null;
- }
- if (systemPropertiesSet) {
- if (savedTrustStore != null) {
- System.setProperty("javax.net.ssl.trustStore", savedTrustStore);
- } else {
- System.clearProperty("javax.net.ssl.trustStore");
- }
- if (savedTrustStorePassword != null) {
- System.setProperty("javax.net.ssl.trustStorePassword", savedTrustStorePassword);
- } else {
- System.clearProperty("javax.net.ssl.trustStorePassword");
- }
- if (savedTrustStoreType != null) {
- System.setProperty("javax.net.ssl.trustStoreType", savedTrustStoreType);
- } else {
- System.clearProperty("javax.net.ssl.trustStoreType");
- }
- savedTrustStore = null;
- savedTrustStorePassword = null;
- savedTrustStoreType = null;
- systemPropertiesSet = false;
- }
- if (keyStoreFile != null) {
- keyStoreFile.delete();
- keyStoreFile = null;
- }
- if (trustStoreFile != null) {
- trustStoreFile.delete();
- trustStoreFile = null;
- }
- }
-
- /**
- * @return Jetty's http connector port.
- * @throws IllegalStateException If Jetty is not running or the http connector cannot be found.
- */
- public int getPort() throws IllegalStateException {
- if (server == null) {
- throw new IllegalStateException("Jetty server is not initialized");
- }
- if (!server.isStarted()) {
- throw new IllegalStateException("Jetty server is not started");
- }
-
- Connector[] connectors = server.getConnectors();
- if (connectors.length == 0) {
- throw new IllegalStateException("Jetty server is not configured with any connectors");
- }
-
- for (Connector connector : connectors) {
- if (connector instanceof SelectChannelConnector) {
- //must be the http connector
- return connector.getLocalPort();
- }
- }
-
- throw new IllegalStateException("Could not find Jetty http connector");
- }
-
- public String getEndpoint(String serviceName) {
- return String.format("%s://localhost:%s/axis2/services/%s", secure ? "https" : "http", getPort(), serviceName);
- }
-
- public EndpointReference getEndpointReference(String serviceName) {
- return new EndpointReference(getEndpoint(serviceName));
- }
-}
diff --git a/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java b/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java
index 80fc3e1..9165390 100644
--- a/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java
+++ b/modules/rampart-integration/src/main/java/org/apache/rahas/TestClient.java
@@ -31,7 +31,7 @@
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.ServiceContext;
-import org.apache.axis2.integration.JettyServer;
+import org.apache.axis2.testutils.JettyServer;
import org.apache.neethi.Policy;
import org.apache.neethi.PolicyEngine;
import org.apache.rampart.RampartMessageData;
diff --git a/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java b/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
index 064d197..e0cd362 100644
--- a/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
+++ b/modules/rampart-integration/src/test/java/org/apache/rampart/RampartTest.java
@@ -33,7 +33,7 @@
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.ServiceContext;
-import org.apache.axis2.integration.JettyServer;
+import org.apache.axis2.testutils.JettyServer;
import org.apache.neethi.Policy;
import org.apache.neethi.PolicyEngine;
import org.junit.Rule;
diff --git a/pom.xml b/pom.xml
index 89efc4d..b7bc0d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -615,8 +615,6 @@
<failIfNoTests>false</failIfNoTests>
<jacoco.version>0.7.5.201505241946</jacoco.version>
-
- <jetty.version>7.6.15.v20140411</jetty.version>
</properties>
<pluginRepositories>