Whe you read a WSDL from local disc, no error, but if you read a wsdl from a URL throw a exception that:
Retrieving document at WSDLException: faultCode=OTHER_ERROR: Unable to resolve imported document at 'http://localhost:8080/mifichero.wsdl'
no content-type: java.net.UnknownServiceException: no content-type
This error is fixed if change the plugin reference javax.wsdl_1.5 by
javax.wsdl_1.6.2.v200806030405
Friday, September 9, 2011
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
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>
<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>
Friday, April 29, 2011
Modificar los tipos de datos de un Wsdl por codigo.
Si quieres modificar los tipos de datos de un WSDL usa la implememtacion de la especificacion JSWDL llamada wsdl4j
javax.wsdl.xml.WSDLWriter wsdlWriter= javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
javax.wsdl.xml.WSDLReader wsdlReader = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLReader();
Definition wsdlDefinition =(Definition) wsdlReader.readWSDL(wsdlfile);
//elimina el esquema de datos antiguo
javax.wsdl.Types type=wsdlDefinition.getTypes();
for (Object e : type.getExtensibilityElements()) {
if (e instanceof com.ibm.wsdl.extensions.schema.SchemaImpl) {
//schema = (com.ibm.wsdl.extensions.schema.SchemaImpl)e;
//TODO:erase all schema
type.getExtensibilityElements().remove(e);
break;
}
}
//importa el el nuevo esquema de tipo de datos
com.ibm.wsdl.extensions.schema.SchemaImpl schema;
schema = (com.ibm.wsdl.extensions.schema.SchemaImpl) wsdlDefinition.getExtensionRegistry()
.createExtension(javax.wsdl.Types.class, new QName("http://www.w3.org/2001/XMLSchema", "schema"));
//com.ibm.wsdl.extensions.schema.SchemaImpl schema = new com.ibm.wsdl.extensions.schema.SchemaImpl();
SchemaReference schemaReference = new SchemaReferenceImpl();
schemaReference.setSchemaLocationURI("http://localhost:8000/allTypes2.xsd");
schema.addInclude(schemaReference);
type.addExtensibilityElement(schema);
wsdlDefinition.addNamespace(ns, nameSpace);
File file2 = new File("newwsdl.wsdl");
BufferedWriter output;
try {
output = new BufferedWriter(new FileWriter(file2));
wsdlWriter.writeWSDL(wsdlDefinition, output);
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
javax.wsdl.xml.WSDLWriter wsdlWriter= javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
javax.wsdl.xml.WSDLReader wsdlReader = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLReader();
Definition wsdlDefinition =(Definition) wsdlReader.readWSDL(wsdlfile);
//elimina el esquema de datos antiguo
javax.wsdl.Types type=wsdlDefinition.getTypes();
for (Object e : type.getExtensibilityElements()) {
if (e instanceof com.ibm.wsdl.extensions.schema.SchemaImpl) {
//schema = (com.ibm.wsdl.extensions.schema.SchemaImpl)e;
//TODO:erase all schema
type.getExtensibilityElements().remove(e);
break;
}
}
//importa el el nuevo esquema de tipo de datos
com.ibm.wsdl.extensions.schema.SchemaImpl schema;
schema = (com.ibm.wsdl.extensions.schema.SchemaImpl) wsdlDefinition.getExtensionRegistry()
.createExtension(javax.wsdl.Types.class, new QName("http://www.w3.org/2001/XMLSchema", "schema"));
//com.ibm.wsdl.extensions.schema.SchemaImpl schema = new com.ibm.wsdl.extensions.schema.SchemaImpl();
SchemaReference schemaReference = new SchemaReferenceImpl();
schemaReference.setSchemaLocationURI("http://localhost:8000/allTypes2.xsd");
schema.addInclude(schemaReference);
type.addExtensibilityElement(schema);
wsdlDefinition.addNamespace(ns, nameSpace);
File file2 = new File("newwsdl.wsdl");
BufferedWriter output;
try {
output = new BufferedWriter(new FileWriter(file2));
wsdlWriter.writeWSDL(wsdlDefinition, output);
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Crear una estructura de Map dentro de otra
Si quieres trabajar con una estructura compleja de un Map dentro de otra, usando generic, se realiza de la siguiente manera:
//definicion
Map <javax.xml.namespace.QName , Map < javax.xml.namespace.QName,String>> mapaComplejo;
//y lo inicializamos
mapaSimple=new HashMap<javax.xml.namespace.QName,String>();
mapaSimple.put(new QName("part"),"type");
//inicializamos mapa complejo
mapaComplejo = new HashMap <javax.xml.namespace.QName , Map<javax.xml.namespace.QName,String>>();
mapaComplejo.put(msg.getQName(), mapaSimple);
//definicion
Map <javax.xml.namespace.QName , Map < javax.xml.namespace.QName,String>> mapaComplejo;
//y lo inicializamos
mapaSimple=new HashMap<javax.xml.namespace.QName,String>();
mapaSimple.put(new QName("part"),"type");
//inicializamos mapa complejo
mapaComplejo = new HashMap <javax.xml.namespace.QName , Map<javax.xml.namespace.QName,String>>();
mapaComplejo.put(msg.getQName(), mapaSimple);
Tuesday, April 19, 2011
Compilando apache Ode 1.3.5 con Maven 3, error. Usa Maven 2
En la version 1.3.3 de Apache ODE el compilador es una herramienta muy util para comprobar que hacemos las cosas bien. Lo malo que hay un bug. en la versión 1.3.3, no se muy bien porque, cuando recibes un mensaje y ese mismo mensaje lo usa para invocar a otro WS se arma un lio con los mensajes SOAP y mete dos HEAD en vez de una. Asi que sin mas te bajas la version 1.3.5 y funciona correctamente.
Pues no es así, cuando ejecutas el compilador BPELC.bat lanza un error que no encuentra una clases
Caused by: java.lang.ClassNotFoundException: org.apache.ode.tools.bpelc.cline.BpelC
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.apache.ode.tools.bpelc.cline.BpelC. Program will exit.
Esto es debido a que cuando abres el jar de ode-bpel-compiler-1.3.5.jar ves que esta sin compilar las clases que estan dentro. Así que te bajas las fuentes e intentas compilar com Maven 3. Craso error. No compila porque no se que libreria, tiene por dependencia, eso creo yo, la 1.0-incubating-M7b woden.pom que en todos los repositorios que he buscado no lo he encontrado. Como era la 1º vez que uso Maven 3, he pensado que no estaba soportado para Maven 3, así que voy a probar con Maven 2. Yo pensaba que era una tonteria, ya que he leido que solo ha cambiado internamente y que no hay diferencia. Pues con Maven 2 ha compilado perfectamente.
Pues no es así, cuando ejecutas el compilador BPELC.bat lanza un error que no encuentra una clases
Caused by: java.lang.ClassNotFoundException: org.apache.ode.tools.bpelc.cline.BpelC
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.apache.ode.tools.bpelc.cline.BpelC. Program will exit.
Esto es debido a que cuando abres el jar de ode-bpel-compiler-1.3.5.jar ves que esta sin compilar las clases que estan dentro. Así que te bajas las fuentes e intentas compilar com Maven 3. Craso error. No compila porque no se que libreria, tiene por dependencia, eso creo yo, la 1.0-incubating-M7b woden.pom que en todos los repositorios que he buscado no lo he encontrado. Como era la 1º vez que uso Maven 3, he pensado que no estaba soportado para Maven 3, así que voy a probar con Maven 2. Yo pensaba que era una tonteria, ya que he leido que solo ha cambiado internamente y que no hay diferencia. Pues con Maven 2 ha compilado perfectamente.
Friday, March 25, 2011
Creacion de un bpel con varias operaciones
Si quieres hacer que un Bpel ejecute varias operaciones, puedes implementar distintas operaciones dependiendo del mesaje de entrada. Pero si el mensaje de entrada es el mismo, puedes hacer que el Bpel un solo EPR, pero que se ejecute distintas partes del Bpel solamente por la acción marcada en la cabecera del mensaje SOAP. Cuando un mensaje SOAP entra en un EPR este es direccionado a la operación del Bpel.
Para implementar cada una de las operaciones incluiremos las etiquetas "onMessage" en ellas se puede definir el "partnerLink" la "operation" y el "portType" y las "variable", pasamos a explicar cada una de ellas.
El partnerLink es el punto de acceso al Wsdl y el portType esta definido en el Wsdl la operacion es la operacion marcada en ese portType y la variable es la instancia del mensaje Wsdl.
la etiqueta onMessage se define dentro de la etiqueta pick de un BPEL. En ella se pueden poner tantos on Message como quieras.
Para implementar cada una de las operaciones incluiremos las etiquetas "onMessage" en ellas se puede definir el "partnerLink" la "operation" y el "portType" y las "variable", pasamos a explicar cada una de ellas.
El partnerLink es el punto de acceso al Wsdl y el portType esta definido en el Wsdl la operacion es la operacion marcada en ese portType y la variable es la instancia del mensaje Wsdl.
la etiqueta onMessage se define dentro de la etiqueta pick de un BPEL. En ella se pueden poner tantos on Message como quieras.
Subscribe to:
Posts (Atom)