blob: bb60b0951d39b4b47070fb06bc83bdf7c43fbf22 [file] [log] [blame]
/*
* Copyright 2004, 2009 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.maven2.server;
import java.io.File;
import java.net.MalformedURLException;
import org.apache.axis2.maven2.server.util.Axis2Server;
import org.apache.axis2.maven2.server.util.RepoHelper;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.codehaus.plexus.classworlds.ClassWorld;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
import static org.apache.axis2.maven2.server.util.Constants.DEFAULT_PORT;
import static org.apache.axis2.maven2.server.util.Constants.DEFAULT_CLASSES_DIRECTORY;
import static org.apache.axis2.maven2.server.util.Constants.DEFAULT_TEST_CLASSES_DIRECTORY;
import static org.apache.axis2.maven2.server.util.Constants.DEFAULT_REPO_LOCATION;
import static org.apache.axis2.maven2.server.util.Constants.DEFAULT_CONF_DIR;
import static org.apache.axis2.maven2.server.util.Constants.DEFAULT_CONF_FILE_NAME;
/**
* Run simple Axis 2Server.
*
* @since 1.7.0
* @goal run
* @execute phase="compile" // TODO - check this again.
* @requiresDependencyResolution runtime
* @threadSafe
*/
public class SimpleHttpServerMojo extends AbstractMojo {
// configuration parameters.
/**
* The repository path.
*
* @parameter
*/
private String repoPath;
/**
* Path to axis2.xml configuration file.
*
* @parameter
*/
private String confPath;
/**
* This parameter indicate service type whether it's JAX-WS or not.
*
* @parameter default-value="false"
*/
private boolean jaxwsService;
/**
* @parameter
*/
private String stdServiceSrcDir;
/**
* @parameter
*/
private String jaxwsServiceSrcDir;
/**
* @parameter
*/
private String moduleSrcDir;
/**
* @parameter
*/
private String port;
/**
* Indicates whether to fork the server.
*
* @parameter default-value="false"
*/
private boolean fork;
/**
* @parameter default-value="1024"
*/
private int dataBufferSize;
/*
* Maven project parameters
*/
/**
* The plugin descriptor
*
* @parameter default-value="${descriptor}"
* @required
*/
private PluginDescriptor descriptor;
/**
* Build directory of current project.
*
* @parameter default-value="${project.build.directory}"
* @required
* @readonly
*/
private String buildDir;
/**
* Project version
*
* @parameter default-value="${project.version}"
* @required
* @readonly
*/
private String projectVersion;
/**
* Project Id
*
* @parameter default-value="${project.artifactId}"
* @required
* @readonly
*/
private String projectId;
private Axis2Server server;
public RepoHelper getRepoHelper() {
RepoHelper repoHelper = new RepoHelper(repoPath, getLog());
if (stdServiceSrcDir != null) {
repoHelper.setStdServiceSrcDir(stdServiceSrcDir);
}
if (jaxwsServiceSrcDir != null) {
repoHelper.setJaxwsServiceSrcDir(jaxwsServiceSrcDir);
}
if (moduleSrcDir != null) {
repoHelper.setModuleSrcDir(moduleSrcDir);
}
if (jaxwsService) {
repoHelper.setJaxwsService(jaxwsService);
String serviceJarFile = buildDir + File.separator + projectId + "-" + projectVersion
+ ".jar";
repoHelper.setServiceJarLocation(serviceJarFile);
}
if(dataBufferSize > 0){
repoHelper.setDataBufferSize(dataBufferSize);
} else {
repoHelper.setDataBufferSize(org.apache.axis2.Constants.Configuration.DEFAULT_DATA_BUFFER_SIZE);
}
return repoHelper;
}
public void execute() throws MojoExecutionException {
try {
getLog().info("repo path : " + repoPath);
getLog().info("conf path : " + confPath);
getRepoHelper().prepareRepostory();
extendClassLoader();
String serverPort = port == null ? DEFAULT_PORT : port;
server = Axis2Server.newInstance(repoPath, checkFordefaultConfFile(confPath), serverPort, getLog());
if (fork) {
new Thread(new Runnable() {
public void run() {
getLog().info(" Starting Axis2 Simple HTTP Server in a foke mode................. ");
server.startServer();
getLog().info(" Axis2 Simple HTTP server satreted");
waitForShutdown();
}
}).start();
} else {
server.startServer();
waitForShutdown();
}
} catch (Exception e) {
throw new MojoExecutionException("Failed to start AXIS2 HTTP server", e);
}
}
private void extendClassLoader() throws DuplicateRealmException, MalformedURLException {
ClassRealm realm = descriptor.getClassRealm();
if (realm == null) {
ClassWorld world = new ClassWorld();
realm = world.newRealm("maven.plugin." + getClass().getSimpleName(), Thread
.currentThread().getContextClassLoader());
}
File cls = new File(buildDir + File.separator + DEFAULT_CLASSES_DIRECTORY);
File testCls = new File(buildDir + File.separator + DEFAULT_TEST_CLASSES_DIRECTORY);
realm.addURL(cls.toURI().toURL());
realm.addURL(testCls.toURI().toURL());
Thread.currentThread().setContextClassLoader(realm);
}
protected void waitForShutdown() {
final boolean[] shutdown = new boolean[] { false };
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
synchronized (shutdown) {
shutdown[0] = true;
shutdown.notify();
}
}
});
// Wait for any shutdown event
synchronized (shutdown) {
while (!shutdown[0]) {
try {
shutdown.wait();
} catch (InterruptedException e) {
}
}
}
server.stopServer();
getLog().info("Axis2 Simple HTTP server stoped ");
}
private String checkFordefaultConfFile(String inPath) {
if (inPath != null) {
return inPath;
} else {
String path = repoPath != null ? repoPath : DEFAULT_REPO_LOCATION;
path = path + File.separator + DEFAULT_CONF_DIR + File.separator
+ DEFAULT_CONF_FILE_NAME;
File confFile = new File(path);
if(confFile.exists()){
return path;
}
return null;
}
}
}