in modules/tool/axis2-repo-maven-plugin/src/main/java/org/apache/axis2/maven2/repo/AbstractCreateRepositoryMojo.java [233:485]
public void execute() throws MojoExecutionException, MojoFailureException {
Log log = getLog();
File inputDirectory = getInputDirectory();
File outputDirectory = getOutputDirectory();
if (inputDirectory.exists()) {
log.info("Copying files from " + inputDirectory);
DirectoryScanner ds = new DirectoryScanner();
ds.setBasedir(inputDirectory);
ds.scan();
for (String relativePath : ds.getIncludedFiles()) {
try {
FileUtils.copyFile(
new File(inputDirectory, relativePath),
new File(outputDirectory, relativePath));
} catch (IOException ex) {
throw new MojoExecutionException("Failed to copy " + relativePath, ex);
}
}
}
Set<Artifact> artifacts = new HashSet<Artifact>();
if (useDependencies) {
artifacts.addAll(projectArtifacts);
}
if (useModules) {
for (MavenProject project : collectedProjects) {
artifacts.add(project.getArtifact());
artifacts.addAll(project.getAttachedArtifacts());
}
}
if (includeModules || includeServices) {
FilterArtifacts filter = new FilterArtifacts();
filter.addFilter(new ScopeFilter(getScope(), null));
if (includeModules && includeServices) {
filter.addFilter(new TypeFilter("aar,mar", null));
} else if (includeModules) {
filter.addFilter(new TypeFilter("mar", null));
}
try {
artifacts = filter.filter(artifacts);
} catch (ArtifactFilterException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
}
selectArtifacts(artifacts, modules, "mar");
selectArtifacts(artifacts, services, "aar");
Map<String,ArchiveDeployer> deployers = new HashMap<String,ArchiveDeployer>();
deployers.put("aar", new ArchiveDeployer(outputDirectory, servicesDirectory, "services.list", generateFileLists, stripServiceVersion));
deployers.put("mar", new ArchiveDeployer(outputDirectory, modulesDirectory, "modules.list", generateFileLists, stripModuleVersion));
for (Artifact artifact : artifacts) {
File file = artifact.getFile();
if (file == null || file.isDirectory()) {
throw new MojoFailureException("Artifact " + artifact.getId() + " not available. " +
"This typically means that it is part of the reactor but that the " +
"package phase has not been executed.");
}
String type = artifact.getType();
ArchiveDeployer deployer = deployers.get(type);
if (deployer == null) {
throw new MojoExecutionException("No deployer found for artifact type " + type);
}
deployer.deploy(log, artifact);
}
for (ArchiveDeployer deployer : deployers.values()) {
deployer.finish(log);
}
}
if (jaxwsServices != null) {
File targetDirectory = new File(outputDirectory, jaxwsServicesDirectory);
for (JAXWSService service : jaxwsServices) {
String jarName = service.getName() + ".jar";
try {
JarArchiver archiver = new JarArchiver();
archiver.setDestFile(new File(targetDirectory, jarName));
String[] packages = service.getPackages();
String[] includes = new String[packages.length];
for (int i=0; i<packages.length; i++) {
includes[i] = packages[i].replace('.', '/') + "/**/*.class";
}
for (File classDirectory : getClassDirectories()) {
archiver.addDirectory(classDirectory, includes, new String[0]);
}
if (service.getResourcesDirectory() != null) {
archiver.addDirectory(service.getResourcesDirectory());
}
archiver.createArchive();
} catch (ArchiverException ex) {
throw new MojoExecutionException("Failed to build " + jarName, ex);
} catch (IOException ex) {
throw new MojoExecutionException("Failed to build " + jarName, ex);
}
}
}
if (serviceDescriptions != null) {
File parentDirectory = new File(outputDirectory, servicesDirectory);
for (ServiceDescription serviceDescription : serviceDescriptions) {
File servicesFile = new File(serviceDescription.getDirectory(), "services.xml");
File metaInfDirectory;
try {
InputStream in = new FileInputStream(servicesFile);
try {
OMDocument doc = OMXMLBuilderFactory.createOMBuilder(in).getDocument();
OMElement serviceElement;
{
Iterator<OMElement> it = doc.getOMDocumentElement().getChildrenWithLocalName("service");
if (!it.hasNext()) {
throw new MojoFailureException("No service found in " + servicesFile);
}
serviceElement = it.next();
if (it.hasNext()) {
throw new MojoFailureException(servicesFile + " contains more than one service");
}
}
String serviceName = serviceElement.getAttributeValue(new QName("name"));
log.info("Building service " + serviceName);
metaInfDirectory = new File(new File(parentDirectory, serviceName), "META-INF");
metaInfDirectory.mkdirs();
if (serviceDescription.getScope() != null) {
serviceElement.addAttribute("scope", serviceDescription.getScope(), null);
}
applyParameters(serviceElement, serviceDescription.getParameters());
FileOutputStream out = new FileOutputStream(new File(metaInfDirectory, "services.xml"));
try {
doc.serialize(out);
} finally {
out.close();
}
} finally {
in.close();
}
DirectoryScanner ds = new DirectoryScanner();
ds.setBasedir(serviceDescription.getDirectory());
ds.setExcludes(new String[] { "services.xml" });
ds.scan();
for (String relativePath : ds.getIncludedFiles()) {
try {
FileUtils.copyFile(
new File(serviceDescription.getDirectory(), relativePath),
new File(metaInfDirectory, relativePath));
} catch (IOException ex) {
throw new MojoExecutionException("Failed to copy " + relativePath, ex);
}
}
} catch (IOException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
} catch (XMLStreamException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
}
}
}
if (generatedAxis2xml != null || axis2xml != null) {
File targetDirectory = configurationDirectory == null
? outputDirectory : new File(outputDirectory, configurationDirectory);
targetDirectory.mkdirs();
File axis2xmlFile = new File(targetDirectory, "axis2.xml");
if (axis2xml != null) {
log.info("Copying axis2.xml");
try {
FileUtils.copyFile(axis2xml, axis2xmlFile);
} catch (IOException ex) {
throw new MojoExecutionException("Error copying axis2.xml file: " + ex.getMessage(), ex);
}
} else {
log.info("Generating axis2.xml");
try {
FilterArtifacts filter = new FilterArtifacts();
filter.addFilter(new ScopeFilter(getScope(), null));
filter.addFilter(new TypeFilter("jar", null));
List<URL> urls = new ArrayList<URL>();
for (Artifact artifact : filter.filter(projectArtifacts)) {
urls.add(artifact.getFile().toURI().toURL());
}
URLClassLoader classLoader = URLClassLoader.newInstance(urls.toArray(new URL[urls.size()]));
InputStream in = classLoader.getResourceAsStream("org/apache/axis2/deployment/axis2_default.xml");
if (in == null) {
throw new MojoFailureException("The default axis2.xml file could not be found");
}
try {
OMDocument axis2xmlDoc = OMXMLBuilderFactory.createOMBuilder(in).getDocument();
OMElement root = axis2xmlDoc.getOMDocumentElement();
for (Iterator<OMNode> it = root.getDescendants(false); it.hasNext(); ) {
OMNode node = it.next();
if (node instanceof OMElement) {
OMElement element = (OMElement)node;
String classAttr = element.getAttributeValue(new QName("class"));
if (classAttr != null) {
try {
classLoader.loadClass(classAttr);
} catch (ClassNotFoundException ex) {
it.remove();
}
}
}
}
applyParameters(root, generatedAxis2xml.getParameters());
processTransports(root, generatedAxis2xml.getTransportReceivers(), "transportReceiver");
processTransports(root, generatedAxis2xml.getTransportSenders(), "transportSender");
addMessageHandlers(root, generatedAxis2xml.getMessageBuilders(), "messageBuilder");
addMessageHandlers(root, generatedAxis2xml.getMessageFormatters(), "messageFormatter");
if (generatedAxis2xml.getHandlers() != null) {
for (Handler handler : generatedAxis2xml.getHandlers()) {
boolean handlerInserted = false;
for (Iterator<OMElement> phaseOrderIterator = root.getChildrenWithLocalName("phaseOrder"); phaseOrderIterator.hasNext(); ) {
OMElement phaseOrder = phaseOrderIterator.next();
if (phaseOrder.getAttributeValue(new QName("type")).equals(handler.getFlow())) {
for (Iterator<OMElement> phaseIterator = phaseOrder.getChildrenWithLocalName("phase"); phaseIterator.hasNext(); ) {
OMElement phase = phaseIterator.next();
if (phase.getAttributeValue(new QName("name")).equals(handler.getPhase())) {
OMElement handlerElement = axis2xmlDoc.getOMFactory().createOMElement("handler", null, phase);
handlerElement.addAttribute("name", handler.getName(), null);
handlerElement.addAttribute("class", handler.getClassName(), null);
handlerInserted = true;
break;
}
}
break;
}
}
if (!handlerInserted) {
throw new MojoFailureException("Flow " + handler.getFlow() + " and phase " + handler.getPhase() + " not found");
}
}
}
if (generatedAxis2xml.getModules() != null) {
for (String module : generatedAxis2xml.getModules()) {
axis2xmlDoc.getOMFactory().createOMElement("module", null, root).addAttribute("ref", module, null);
}
}
if (generatedAxis2xml.getDeployers() != null) {
for (Deployer deployer : generatedAxis2xml.getDeployers()) {
OMElement deployerElement = axis2xmlDoc.getOMFactory().createOMElement("deployer", null, root);
deployerElement.addAttribute("extension", deployer.getExtension(), null);
deployerElement.addAttribute("directory", deployer.getDirectory(), null);
deployerElement.addAttribute("class", deployer.getClassName(), null);
}
}
OutputStream out = new FileOutputStream(axis2xmlFile);
try {
axis2xmlDoc.serialize(out);
} finally {
out.close();
}
} finally {
in.close();
}
} catch (ArtifactFilterException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
} catch (IOException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
} catch (XMLStreamException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
}
}
}
}