blob: 8074fd5eae6b1803468e15a25ba80be83689a280 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. 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
*
* 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.aar;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
* Deploys an AAR to the Axis2 server.
*/
@Mojo(name = "deployaar", defaultPhase = LifecyclePhase.INSTALL, threadSafe = true)
public class DeployAarMojo extends AbstractAarMojo {
private final static String LOGIN_FAILED_ERROR_MESSAGE = "Invalid auth credentials!";
/**
* The URL of the Axis2 administration console.
*/
@Parameter(defaultValue = "http://localhost:8080/axis2/axis2-admin", property = "axis2.aar.axis2AdminConsoleURL")
private URL axis2AdminConsoleURL;
/**
* The administrator user name for the Axis2 administration console.
*/
@Parameter(property = "axis2.aar.axis2AdminUser")
private String axis2AdminUser;
/**
* The administrator password for the Axis2 administration console.
*/
@Parameter(property = "axis2.aar.axis2AdminPassword")
private String axis2AdminPassword;
/**
* Executes the DeployAarMojo on the current project.
*
* @throws MojoExecutionException if an error occurred while building the webapp
*/
public void execute() throws MojoExecutionException {
getLog().info("Deploying AAR artifact "+project.getArtifact().getFile()+" to Axis2 Web Console "+axis2AdminConsoleURL);
try {
deploy(project.getArtifact().getFile());
} catch(MojoExecutionException e) {
throw e;
} catch (Exception e) {
throw new MojoExecutionException("Error deploying aar", e);
}
}
/**
* Deploys the AAR.
*
* @param aarFile the target AAR file
* @throws MojoExecutionException
* @throws HttpException
* @throws IOException
*/
private void deploy(File aarFile) throws MojoExecutionException, IOException {
if(axis2AdminConsoleURL == null) {
throw new MojoExecutionException("No Axis2 administrative console URL provided.");
}
// log into Axis2 administration console
URL axis2AdminConsoleLoginURL = new URL(axis2AdminConsoleURL.toString()+"/login");
// TODO get name of web service mount point
HttpPost httpPost = new HttpPost(axis2AdminConsoleLoginURL.toString());
List<NameValuePair> nvps = new ArrayList<>();
nvps.add(new BasicNameValuePair("userName", axis2AdminUser));
nvps.add(new BasicNameValuePair("password", axis2AdminPassword));
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
CloseableHttpClient httpclient = HttpClients.createDefault();
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
try {
CloseableHttpResponse hcResponse = httpclient.execute(httpPost);
int status = hcResponse.getStatusLine().getStatusCode();
if(status != 200) {
throw new MojoExecutionException("Failed to log in");
}
HttpEntity responseEntity = hcResponse.getEntity();
if(responseEntity==null) {
throw new MojoExecutionException("url request returned null entity: " + hcResponse.getStatusLine());
}
String responseStr = EntityUtils.toString(responseEntity);
if(responseStr.indexOf(LOGIN_FAILED_ERROR_MESSAGE)!=-1) {
throw new MojoExecutionException("Failed to log into Axis2 administration web console using credentials");
}
}finally {
httpclient.close();
}
// deploy AAR web service
URL axis2AdminConsoleUploadURL = new URL(axis2AdminConsoleURL.toString()+"/upload");
getLog().debug("Uploading AAR to Axis2 Admin Web Console "+axis2AdminConsoleUploadURL);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
File file = project.getArtifact().getFile();
FileBody fileBody = new FileBody(file);
builder.addPart(project.getArtifact().getFile().getName(), fileBody);
httpPost = null;
httpPost = new HttpPost(axis2AdminConsoleLoginURL.toString());
httpclient = null;
httpclient = HttpClients.createDefault();
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
try {
CloseableHttpResponse hcResponse = httpclient.execute(httpPost);
int status = hcResponse.getStatusLine().getStatusCode();
if(status != 200) {
throw new MojoExecutionException("Failed to log in");
}
}finally {
httpclient.close();
}
// log out of web console
URL axis2AdminConsoleLogoutURL = new URL(axis2AdminConsoleURL.toString()+"/logout");
getLog().debug("Logging out of Axis2 Admin Web Console "+axis2AdminConsoleLogoutURL);
HttpGet get = new HttpGet(axis2AdminConsoleLogoutURL.toString());
httpclient = null;
httpclient = HttpClients.createDefault();
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BROWSER_COMPATIBILITY);
try {
CloseableHttpResponse hcResponse = httpclient.execute(get);
int status = hcResponse.getStatusLine().getStatusCode();
if(status != 200) {
throw new MojoExecutionException("Failed to log out");
}
}finally {
httpclient.close();
}
}
}