Package com.appsec.maven.wsit

Source Code of com.appsec.maven.wsit.WsitServiceMojo

/**
* WSIT Build Tools (http://wsitbt.codeplex.com)
*
* Copyright (c) 2011 Application Security, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Application Security, Inc.
*/
package com.appsec.maven.wsit;

import java.io.File;

import com.appsec.wsitbt.core.util.WSITBTUtil;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.FileUtils;

import com.appsec.wsitbt.core.wsit.WsitDocument;

/**
* Generates wsit service configuration files.
*
* @author John Hite
* @goal service
* @phase generate-resources
* @description WSIT Plugin
* @since 1.0
*/
public final class WsitServiceMojo extends AbstractMojo
{
    /**
     * The service's WSDL.
     *
     * @parameter expression="wsit-service.wsdl"
     * @required
     * @since 1.0
     */
    private File wsdl;

    /**
     * The policy fragment with WSIT configuration to apply.
     *
     * @parameter expression="wsit-service.policy"
     * @required
     * @since 1.0
     */
    private File policy;

    /**
     * The configuration files will be written to this directory.
     *
     * @parameter expression="wsit-service.outputdir" default-value="${project.build.directory}/generated-sources/resources"
     * @required
     * @since 1.0
     */
    private File outputdir;

    /**
     * The full name (including the package) of the web service implementation class.
     *
     * @parameter expression="wsit-service.classname"
     * @required
     * @since 1.0
     */
    private String classname;

    /**
     * The id of a Policy in the Policy fragment to apply to the binding.
     * This should be a policy that defines the security requirements of the service.
     *
     * @parameter expression="wsit-service.bindingpolicy"
     * @required
     * @since 1.0
     */
    private String bindingpolicy;

    /**
     * Specifies a policy to apply to all input operations
     *
     * @parameter expression="wsit-service.inputpolicy"
     * @since 1.0
     */
    private String inputpolicy;

    /**
     * Specifies a policy to apply to all output operations
     *
     * @parameter expression="wsit-service.outputpolicy"
     * @since 1.0
     */
    private String outputpolicy;

    /**
     * Specifies a policy to apply to all fault operations
     *
     * @parameter expression="wsit-service.outputpolicy"
     * @since 1.0
     */
    private String faultpolicy;

    /**
     * Updates the wsdl with the policy. This removes any WSIT specific configuration from
     * the policy and applies the policy to the wsdl.
     *
     * @parameter expression="wsit-service.updatewsdl" default-value="false"
     * @since 1.0
     */
    private boolean updatewsdl;

    /**
     * The output folder for the wsdl. Defaults to the outputdir.
     *
     * @parameter expression="wsit-service.wsdloutdir"
     * @since 1.0
     */
    private File wsdloutdir;

    /**
     * @parameter expression="${project}"
     * @readonly
     * @since 1.0
     */
    private MavenProject project;


    public void execute() throws MojoExecutionException, MojoFailureException
    {
        try
        {
            checkProperties();

            WSITBTUtil.doMkDirs(outputdir);
            final File output = new File(outputdir.getAbsoluteFile(), "wsit-" + classname + ".xml");
            getLog().info("Creating " + output.getAbsolutePath());

            FileUtils.copyFile(wsdl, output);

            WsitDocument wsitDoc = WsitDocument.parse(output, true);
            wsitDoc.mergePolicy(policy);
            wsitDoc.setBindingPolicy(bindingpolicy);
            wsitDoc.setInputPolicy(inputpolicy);
            wsitDoc.setOutputPolicy(outputpolicy);
            wsitDoc.setFaultPolicy(faultpolicy);

            wsitDoc.save(output);

            if (this.updatewsdl)
            {
                final File wsdlout;
                if (this.wsdloutdir != null)
                {
                    WSITBTUtil.doMkDirs(wsdloutdir);
                    wsdlout = new File(wsdloutdir.getAbsolutePath(), wsdl.getName());
                }
                else
                {
                    wsdlout = new File(outputdir.getAbsolutePath(), wsdl.getName());
                }
                getLog().info("Saving updated wsdl to " + wsdlout.getAbsolutePath());
                wsitDoc.stripWsitConfiguration();
                wsitDoc.save(wsdlout);
            }

            project.addCompileSourceRoot(outputdir.getAbsolutePath());
            Resource resource = new Resource();
            resource.setDirectory(outputdir.getAbsolutePath());
            project.addResource(resource);
        }
        catch (MojoFailureException e)
        {
            throw e;
        }
        catch (Exception e)
        {
            throw new MojoExecutionException("Failed to generate wsit configuration", e);
        }
    }

    private void checkProperties() throws MojoFailureException
    {
        if (null == outputdir)
        {
            throw new MojoFailureException("The required attribute outputdir must be set");
        }
        if (null == policy)
        {
            throw new MojoFailureException("The required attribute policy must be set");
        }
        if (!policy.exists())
        {
            throw new MojoFailureException("The file specified by policy attribute must exist");
        }
        if (null == wsdl)
        {
            throw new MojoFailureException("The required attribute wsdl must be set");
        }
        if (!wsdl.exists())
        {
            throw new MojoFailureException("The file specified by wsdl attribute must exist");
        }
        if (null == classname)
        {
            throw new MojoFailureException("The required attribute class must be set");
        }
        if (null == bindingpolicy)
        {
            throw new MojoFailureException("The required attribute bindingpolicy must be set");
        }
        if (null == inputpolicy)
        {
            getLog().debug("An inputpolicy is not specified");
        }
        if (null == outputpolicy)
        {
            getLog().debug("An outputpolicy is not specified");
        }
        if (null == faultpolicy)
        {
            getLog().debug("An faultpolicy is not specified");
        }
    }

    public void setWsdl(File wsdl)
    {
        this.wsdl = wsdl;
    }

    public void setPolicy(File policy)
    {
        this.policy = policy;
    }

    public void setOutputdir(File outputdir)
    {
        this.outputdir = outputdir;
    }

    public void setClassname(String classname)
    {
        this.classname = classname;
    }

    public void setBindingpolicy(String bindingpolicy)
    {
        this.bindingpolicy = bindingpolicy;
    }

    public void setInputpolicy(String inputpolicy)
    {
        this.inputpolicy = inputpolicy;
    }

    public void setOutputpolicy(String outputpolicy)
    {
        this.outputpolicy = outputpolicy;
    }
   
    public void setFaultpolicy(String faultpolicy)
    {
        this.faultpolicy = faultpolicy;
    }

    public void setUpdatewsdl(boolean updatewsdl)
    {
        this.updatewsdl = updatewsdl;
    }

    public void setWsdloutdir(File wsdloutdir)
    {
        this.wsdloutdir = wsdloutdir;
    }

    public void setProject(MavenProject project)
    {
        this.project = project;
    }

}
TOP

Related Classes of com.appsec.maven.wsit.WsitServiceMojo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.