Filtrar el Código de Clases JAVA

Para filtrar el código de clases JAVA se puede utilizar el plugin Templating Maven Plugin que en su versión 1.0-alpha-4-SNAPSHOT tiene integración con M2E, el plugin de integración de Maven con Eclipse.

Configuración de Maven

  • Para aplicaciones FundeWeb 2.x, tendremos que utilizar el parent versión 2.0.7.
  • Para aplicaciones FundeWeb 1.x migradas a Weblogic el seam-parent versión 1.5.6.

Para las aplicaciones FundeWeb 2.x con un parent con versión anterior a la 2.0.5 tendremos que actualizar el parent lo que conlleva la actualización a Primefaces 5.1. Si no se quiere actualizar a Primefaces 5.1, se puede añadir en el POM principal del proyecto lo siguiente:

<!-- Sólo para aplicaciones con parent inferior a la 2.0.7-->
<properties>
    <templating-maven-plugin.version>1.0.0</templating-maven-plugin.version>
</properties>
 
<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>templating-maven-plugin</artifactId>
				<version>${templating-maven-plugin.version}</version>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

Ahora tenemos que añadir el plugin en el POM del modulo que contiene el código fuente de la clase JAVA que queremos filtrar, dentro de la etiqueta </plugins> (lo mejor se dejarlo justo encima de la etiqueta de cierre </plugins>).

	<plugin>
		<groupId>org.codehaus.mojo</groupId>
		<artifactId>templating-maven-plugin</artifactId>
		<executions>
			<execution>
				<id>filter-src</id>
				<goals>
					<goal>filter-sources</goal>
				</goals>
			</execution>
		</executions>
	</plugin>

Ahora tenemos que crear la carpeta java-templates dentro de la carpeta src/main del módulo. Veamos un ejemplo:

 Templating Maven Plugin - Crear la Carpeta java-templates

Una vez creada esta carpeta, automáticamente se creara la carpeta de código fuente target/generated-sources/java-templates en el módulo, donde aparece la clase filtrada con los valores indicados en los ficheros de filtro del módulo (que estan en la carpeta src/main/filters).

 Templating Maven Plugin - Carpeta target/generated-sources/java-templates

El código fuente lo podemos editar directamente desde la carpeta src/main/java-templates. Si tenemos la opción Project –> Build Automatically o cuando forcemos el build con Crtl + B, el código de la carpeta target/generated-sources/java-templates se actualiza automaticamente.

Modificación en el Código de la Clase JAVA

Para poder filtrar valores en el código de la clase JAVA, este tiene que estar entre los delimitadores ${} o @@. Veamos un Ejemplo:

package com.intalio.bpms.workflow.ib4p_20051115;
 
import java.net.MalformedURLException;
import java.net.URL;
 
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
 
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
 
/**
 * This class was generated by Apache CXF 2.2.12 Wed Feb 20 08:58:33 CET 2013
 * Generated source version: 2.2.12
 * 
 */
 
@WebServiceClient(name = "completeTask",
			wsdlLocation = "${bpms.server.url}/ode/processes/completeTask?wsdl",
			targetNamespace = "http://www.intalio.com/bpms/workflow/ib4p_20051115")
public class CompleteTask extends Service {
 
	public final static URL WSDL_LOCATION;
	public final static QName SERVICE = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "completeTask");
	public final static QName UIFWPort = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "UIFWPort");
 
	private static Log LOG = Logging.getLog( CompleteTask.class );
 
	static {
		URL url = null;
		try {
			url = new URL("${bpms.server.url}/ode/processes/completeTask?wsdl");
		} catch (MalformedURLException e) {
		    LOG.error("Can not initialize the default wsdl from [#0].", e, url);
		}
		WSDL_LOCATION = url;
	}
 
	public CompleteTask(URL wsdlLocation) {
		super(wsdlLocation, SERVICE);
	}
 
	public CompleteTask(URL wsdlLocation, QName serviceName) {
		super(wsdlLocation, serviceName);
	}
 
	public CompleteTask() {
		super(WSDL_LOCATION, SERVICE);
	}
 
 
	@WebEndpoint(name = "UIFWPort")
	public CompleteTaskPortType getUIFWPort() {
		return super.getPort(UIFWPort, CompleteTaskPortType.class);
	}
 
 
	@WebEndpoint(name = "UIFWPort")
	public CompleteTaskPortType getUIFWPort(WebServiceFeature... features) {
		return super.getPort(UIFWPort, CompleteTaskPortType.class, features);
	}
}

Como se puede observar, dentro de la anotación @WebServiceClient tenemos la propiedad wsdlLocation con su valor filtrado con ${bpms.server.url}. El resultado del filtrado lo podemos ver en el código generado dentro de la carpeta target/generated-sources/java-templates. Veamos el resultado:

package com.intalio.bpms.workflow.ib4p_20051115;
 
import java.net.MalformedURLException;
import java.net.URL;
 
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceFeature;
 
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
 
/**
 * This class was generated by Apache CXF 2.2.12 Wed Feb 20 08:58:33 CET 2013
 * Generated source version: 2.2.12
 * 
 */
 
@WebServiceClient(name = "completeTask",
			wsdlLocation = "http://mncs.atica.um.es:8080/ode/processes/completeTask?wsdl",
			targetNamespace = "http://www.intalio.com/bpms/workflow/ib4p_20051115")
public class CompleteTask extends Service {
 
	public final static URL WSDL_LOCATION;
	public final static QName SERVICE = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "completeTask");
	public final static QName UIFWPort = new QName("http://www.intalio.com/bpms/workflow/ib4p_20051115", "UIFWPort");
 
	private static Log LOG = Logging.getLog( CompleteTask.class );
 
	static {
		URL url = null;
		try {
			url = new URL("http://mncs.atica.um.es:8080/ode/processes/completeTask?wsdl");
		} catch (MalformedURLException e) {
		    LOG.error("Can not initialize the default wsdl from [#0].", e, url);
		}
		WSDL_LOCATION = url;
	}
 
	public CompleteTask(URL wsdlLocation) {
		super(wsdlLocation, SERVICE);
	}
 
	public CompleteTask(URL wsdlLocation, QName serviceName) {
		super(wsdlLocation, serviceName);
	}
 
	public CompleteTask() {
		super(WSDL_LOCATION, SERVICE);
	}
 
	@WebEndpoint(name = "UIFWPort")
	public CompleteTaskPortType getUIFWPort() {
		return super.getPort(UIFWPort, CompleteTaskPortType.class);
	}
 
	@WebEndpoint(name = "UIFWPort")
	public CompleteTaskPortType getUIFWPort(WebServiceFeature... features) {
		return super.getPort(UIFWPort, CompleteTaskPortType.class, features);
	}
}

El valor de la propiedad bpms.server.url que esta definida en el fichero filtro-local.properties (ya que en eclipse se aplica el perfil local por defecto) es http://mncs.atica.um.es:8080.

Si definimos la propiedad para el resto de entornos, cuando utilicemos las tareas de sincronización para un entorno, el valor sera el correspoandiente al filtro de propiedades de dicho entorno.


JUAN MIGUEL BERNAL GONZALEZ 2014/12/02 18:50

  • fdw2.0/fundeweb2.0/gt/maven-filtrar-codigo-java.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)