Custom XSLT function en Oracle SOA Suite 11g
Algo que es relativamente común, es que las funciones de XSLT que ofrece el mapper fuera de la caja, de SOA Suite, no incluya funciones que necesitas. Por lo que en ese momento, toca hacer tus propias funciones.
Realmente es fácil hacerlo, sólo hay que tener cuidado al alimentar al descriptor para que se refleje como parte de las Funciones:
Los pasos que hay que seguir para conseguirlo, son:
Por ejemplo, esta clase que hace el cambio de formato de fechas:
package com.sps
import java.text.SimpleDateFormat;
import java.util.Date;
public class ChangeDateFormat {
public ChangeDateFormat() {
super();
}
public static String getNewDateFormat(String fecha){
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
String fechaFormateada = "";
Date d = new Date();
try {
d = sdf.parse(fecha);
fechaFormateada = sdf2.format(d);
System.out.println("FECHA FORMATEADA " + fechaFormateada);
return fechaFormateada;
}
catch(Exception e){
e.printStackTrace();
}
return "";
}
public static void main(String[] args) {
ChangeDateFormat cdf = new ChangeDateFormat();
String result = cdf.getNewDateFormat("30-SEP-2012");
System.out.println("RESULTADO " + result);
}
}
====
Después de que escribiste tu clase, hay que crear este archivo:
<soa-xpath-functions version="11.1.1"
xmlns="http://xmlns.oracle.com/soa/config/xpath"
xmlns:fechas=http://www.oracle.com/XSL/Transform/java/com.sps.ChangeDateFormat>
<function name="sps:getNewDateFormat">
<className>com.sps.ChangeDateFormat</className>
<return type="string"/>
<params>
<param name="fecha" type="string"/>
</params>
<desc/>
<detail>
<![CDATA[Esta funcion cambia el formato de Fecha]]>
</detail>
</function>
</soa-xpath-functions>
Aquí es dónde hay que tener cierto cuidado:
1. El namespace a usar, debe ser respetado hasta /java/ después debes poner el nombre de tu clase.
2. Hay otros posts en la red que muestran algo similar, sólo que tienen mal el nombre del tag className. Por lo que ten cuidado, y respeta la consistencia. Esto lo detectó Luis Miranda (de mi equipo SPS).
Una vez que tienes el descriptor, asegúrate de ponerlo en la carpeta META-INF, debajo de classes y genera un JAR.
Posteriormente entra a JDEV y regístralo.
Ve a Tools—>Preferences—>SOA:
Reinicia tu JDEV y en e Mapper, ya debes ver la opción de User Defined.
Mención a Luis Miranda e Isaac Ruiz (@rugi). Luis por identificar el error en el className, e Isaac por haber hecho el código de conversión de Fechas.
Realmente es fácil hacerlo, sólo hay que tener cuidado al alimentar al descriptor para que se refleje como parte de las Funciones:
Los pasos que hay que seguir para conseguirlo, son:
- Escribir las clases de Java que representen a tu función.
- Escribir el Descriptor de la Función
- Generar un JAR, dónde el Descriptor esté abajo de la carpeta META-INF
- Registrar el JAR en JDEV
- Reiniciar JDEV
- Poner el jar abajo de /lib (eg. C:\Oracleps5\Middleware\user_projects\domains\soa_domain\lib) de tu instalación de Weblogic.
- Reiniciar Weblogic
Por ejemplo, esta clase que hace el cambio de formato de fechas:
package com.sps
import java.text.SimpleDateFormat;
import java.util.Date;
public class ChangeDateFormat {
public ChangeDateFormat() {
super();
}
public static String getNewDateFormat(String fecha){
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
String fechaFormateada = "";
Date d = new Date();
try {
d = sdf.parse(fecha);
fechaFormateada = sdf2.format(d);
System.out.println("FECHA FORMATEADA " + fechaFormateada);
return fechaFormateada;
}
catch(Exception e){
e.printStackTrace();
}
return "";
}
public static void main(String[] args) {
ChangeDateFormat cdf = new ChangeDateFormat();
String result = cdf.getNewDateFormat("30-SEP-2012");
System.out.println("RESULTADO " + result);
}
}
====
Después de que escribiste tu clase, hay que crear este archivo:
<soa-xpath-functions version="11.1.1"
xmlns="http://xmlns.oracle.com/soa/config/xpath"
xmlns:fechas=http://www.oracle.com/XSL/Transform/java/com.sps.ChangeDateFormat>
<function name="sps:getNewDateFormat">
<className>com.sps.ChangeDateFormat</className>
<return type="string"/>
<params>
<param name="fecha" type="string"/>
</params>
<desc/>
<detail>
<![CDATA[Esta funcion cambia el formato de Fecha]]>
</detail>
</function>
</soa-xpath-functions>
Aquí es dónde hay que tener cierto cuidado:
1. El namespace a usar, debe ser respetado hasta /java/ después debes poner el nombre de tu clase.
2. Hay otros posts en la red que muestran algo similar, sólo que tienen mal el nombre del tag className. Por lo que ten cuidado, y respeta la consistencia. Esto lo detectó Luis Miranda (de mi equipo SPS).
Una vez que tienes el descriptor, asegúrate de ponerlo en la carpeta META-INF, debajo de classes y genera un JAR.
Posteriormente entra a JDEV y regístralo.
Ve a Tools—>Preferences—>SOA:
Reinicia tu JDEV y en e Mapper, ya debes ver la opción de User Defined.
Mención a Luis Miranda e Isaac Ruiz (@rugi). Luis por identificar el error en el className, e Isaac por haber hecho el código de conversión de Fechas.
Publicar un comentario