Friday, May 27, 2011

Create a listener in your bussinnes process BPEL

When you´re execute a BPEL. I dont how debug a error. To see inside of a execution engenner you could implement a listener  


import java.util.Properties;
import org.apache.ode.bpel.evt.BpelEvent;
import org.apache.ode.bpel.evt.EventContext;
import org.apache.ode.bpel.iapi.*;

public class Listener implements  BpelEventListener {
   
    EventContext context;
   
    @Override
    public void onEvent(BpelEvent arg0) {
        context =arg0.eventContext;
        // TODO Auto-generated method stub
        String evento ="";
        evento = evento+ "--------------------------------\n";
        evento = evento+ "evento: ["+arg0.eventName(arg0)+"] \n";       
        evento = evento+ "linea : ["+arg0.getLineNo()+"] \n";
        evento = evento+ "tipo  : ["+arg0.getType()+"] \n";
        evento = evento+ getNamesVariables();
        evento = evento+ "--------------------------------\n";
        System.out.println(evento );

    }

    @Override
    public void shutdown() {
        // TODO Auto-generated method stub
        ;
        System.out.println( "-------------shutdown---------------\n");
       
    }

    @Override
    public void startup(Properties arg0) {
        String evento ="";
        // TODO Auto-generated method stub
        evento = evento+ "--------------------------------\n";
        evento = evento+ arg0 ;
        evento = evento+ "--------------------------------\n";
        System.out.println(evento );

    }
    private String getNamesVariables(){
        String cadena="";
        for(String variable :context.getVariableNames()){
            cadena = cadena +" variable["+ variable+"]\n";
        }
        return cadena ;
    }

}


build a class and copy  inside folder
apache-tomcat-5.5.33\webapps\ode\WEB-INF\classes

if  you dont create a file in  ode-axis2.properties you to have to create in
apache-tomcat-5.5.33\webapps\ode\WEB-INF\conf

this information are in http://ode.apache.org/ode-execution-events.html

Thursday, May 12, 2011

ejecutar la funcion doXslTrasnsform

Si quieres hacer transformacion de datos en el BPEL, existe una funcion que ejecuta las hojas de estilo XSLT, para ejecutar esta instruccion dentro de un BPEL necesita la ruta de un XSLT y un node-set. Este node-set no puede ser ni un tipo de dato definido en tu XML Schema, (fichero xsd) ni un mensaje WSDL. Así que lo unico que acepta son elementos definidos. Así que es un poco extraño que si en tu WSDL que no has definido nigún tipo de dato element, tengas que definirlo para realizar una llamada a un XSLT. Así que la solución que propongo es, defines un nuevo fichero Schema XML inserto un element en el fichero, importo el Schema XML en el WSDL, importo el WSDL en el BPEL.

  <import location="HelloWorld.wsdl"
     namespace="http://ode/bpel/unit-test.wsdl"
     importType="http://schemas.xmlsoap.org/wsdl/" />
< ... mas nodos bpel
 <variables>
     <variable name="myVar" messageType="test:HelloMessage"/>
     <variable name="tmpVar" element="data:elementoNuevo" />
     <.... mas variables
   </variables>
<... proceso
<... copia el mensaje a la variable.
   <bpel:assign  name="Assign">
            <bpel:copy>
                <bpel:from>bpel:doXslTransform('urn:/transforma.xsl',$tmpVar)</bpel:from>
                <bpel:to variable="otherVar" part="TestPart" />
            </bpel:copy>
        </bpel:assign>