Axis2ServiceDeployer
De Dos Ideas.
package com.dosideas.spring;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.context.WebApplicationContext;
/**
*
* @author ejgarcia
*/
public class Axis2ServiceDeployer implements InitializingBean, ApplicationContextAware {
/** Carpeta donde se van a desplegar los servicios.
* Debe coincidir la propiedad axis2.repository.path, declarada como
* init-param en la definición del AxisServlet en el archivo web.xml
*/
protected String servicesDeploymentFolder = null;
/** Nombre del servicio. El nombre debe coincidir con el wsdl */
protected String serviceName = null;
private WebApplicationContext ctx;
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getServicesDeploymentFolder() {
return servicesDeploymentFolder;
}
public void setServicesDeploymentFolder(String servicesDeploymentFolder) {
this.servicesDeploymentFolder = servicesDeploymentFolder;
}
public void afterPropertiesSet() {
/** creo la estructura de directorios default */
File servicesDeploymentFolderFile = new File(servicesDeploymentFolder);
servicesDeploymentFolderFile.mkdirs();
File serviceFolderFile =
new File(servicesDeploymentFolderFile, "services" +
File.separator + serviceName + File.separator + "META-INF");
serviceFolderFile.mkdirs();
/** Copio los recursos al directorio */
String serviceFileResourcePath = "services/" + serviceName + "/META-INF/services.xml";
String serviceWsdlResourcePath = "services/" + serviceName + "/META-INF/" + serviceName + ".wsdl";
String serviceFileClassPath = "/WEB-INF/" + serviceFileResourcePath;
String serviceWsdlClassPath = "/WEB-INF/" + serviceWsdlResourcePath;
//ClassLoader cl = this.getClass().getClassLoader();
InputStream serviceIn = ctx.getServletContext().getResourceAsStream(serviceFileClassPath);
InputStream wsdlIn = ctx.getServletContext().getResourceAsStream(serviceWsdlClassPath);
System.err.println("Recurso 2: " + serviceFileClassPath + " : " + serviceIn);
System.err.println("Recurso 2: " + serviceWsdlClassPath + " : " + wsdlIn);
copyInputStreamToFile(serviceIn, new File(servicesDeploymentFolderFile, serviceFileResourcePath));
copyInputStreamToFile(wsdlIn, new File(servicesDeploymentFolderFile, serviceWsdlResourcePath));
}
private void copyInputStreamToFile(InputStream in, File file) {
if (in == null){System.err.println("No se pudo encontrar... "); return;}
FileOutputStream outToFile = null;
ByteArrayOutputStream out = null;
try {
byte[] buffer = new byte[10000];
out = new ByteArrayOutputStream();
outToFile = new FileOutputStream(file);
//int counter = 0;
int bytesRead = 0;
while ((bytesRead = in.read(buffer, 0, buffer.length)) > 0) {
System.err.println("bytes leidos: " + bytesRead);
out.write(buffer, 0, bytesRead);
//counter += bytesRead;
//if (bytesRead < buffer.length) break;
}
out.writeTo(outToFile);
in.close();
out.close();
outToFile.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
if (in != null) in.close();
if (outToFile != null) outToFile.close();
if (out != null) out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
this.ctx = (WebApplicationContext)arg0;
}
}