package org.codehaus.mojo.springws;
import java.io.File;
import java.util.Iterator;
import java.util.Map;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.ws.wsdl.WsdlDefinition;
/**
* Exports Spring-ws WSDL definitions to files.
*
* @goal springws
* @phase process-resources
* @requiresDependencyResolution
*/
public class SpringWsMojo
extends AbstractMojo
{
/**
* Suffix of generated wsdl files.
* @parameter default-value=".wsdl" expression="${springws.suffix}"
* @required
*/
private String suffix;
/**
* ContextFiles to look for WSDL generators in.
*
* @parameter expression="${springws.contextLocations}"
*/
private String[] contextLocations;
/**
* Directory for generated .wsdl files.
* @parameter expression="${project.build.directory}/generated-resources/springws"
*/
private File targetDirectory;
private final Transformer transformer;
public SpringWsMojo()
throws TransformerException
{
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
}
/**
* {@inheritDoc}
*/
public void execute()
throws MojoExecutionException, MojoFailureException
{
targetDirectory.mkdirs();
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext( contextLocations );
Map beanMap = applicationContext.getBeansOfType( WsdlDefinition.class );
for ( Iterator i = beanMap.entrySet().iterator(); i.hasNext(); )
{
Map.Entry entry = (Map.Entry) i.next();
String serviceName = entry.getKey().toString();
WsdlDefinition wsdlDefinition = (WsdlDefinition) entry.getValue();
Source source = wsdlDefinition.getSource();
File file = export( source, serviceName );
getLog().debug( "Generated: " + file.getAbsolutePath() );
}
}
private File export( Source source, String serviceName )
throws MojoExecutionException
{
File file = new File( targetDirectory, serviceName + suffix );
Result result = new StreamResult( file );
try
{
transformer.transform( source, result );
}
catch ( TransformerException e )
{
throw new MojoExecutionException( e.getMessage(), e );
}
return file;
}
}