Hi all, we are trying to make some variable manipulation in a bpel file with xpath but I can not find what I do wrong...
This is the wsdl of the service I invoke (airbus.wsdl): <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:ns0="http://www.a-ware.org/airbus/xsd" xmlns:tns="http://www.a-ware.org/airbus/xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="airbus" targetNamespace="http://www.a-ware.org/airbus/xsd"> <wsdl:types> <xsd:schema elementFormDefault="qualified" targetNamespace="http://www.a-ware.org/airbus/xsd" xmlns:tns="http://www.a-ware.org/airbus/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- return type =============================================--> <xsd:complexType name="return_type"> <xsd:sequence> <xsd:element name="exitValue" type="xsd:integer"/> <xsd:element name="stdout" type="xsd:string"/> <xsd:element name="stdin" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <!-- =================================================== --> <!-- PAAM ============================================= --> <xsd:element name="PAAM_in" type="tns:PAAM_in_type"/> <xsd:complexType name="PAAM_in_type"> <xsd:sequence> <xsd:element ref="tns:frequency"/> <xsd:element ref="tns:templateFile"/> <xsd:element name="parameters" type="tns:parameters_type"/> </xsd:sequence> </xsd:complexType> <xsd:element name="templateFile" type="xsd:string"/> <xsd:element name="frequency" type="xsd:float"/> <xsd:complexType name="parameters_type"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="name" type="xsd:string"/> <xsd:element name="value" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="PAAM_out" type="tns:PAAM_out_type"/> <xsd:complexType name="PAAM_out_type"> <xsd:sequence> <xsd:element name="modelFileName" type="xsd:string"/> <xsd:element name="tclscriptFileName" type="xsd:string"/> <xsd:element name="return" type="tns:return_type"/> </xsd:sequence> </xsd:complexType> [some other types] </xsd:schema> </wsdl:types> <wsdl:message name="paamInput"> <wsdl:part element="tns:PAAM_in" name="body"> </wsdl:part> </wsdl:message> <wsdl:message name="paamOutput"> <wsdl:part element="tns:PAAM_out" name="body"> </wsdl:part> </wsdl:message> [some other messages] <wsdl:portType name="airbusPortType"> <wsdl:operation name="paam"> <wsdl:input message="tns:paamInput"> </wsdl:input> <wsdl:output message="tns:paamOutput"> </wsdl:output> </wsdl:operation> [some other operations] </wsdl:portType> </wsdl:definitions> The wsdl of the process I try to execute is (airbusTest.wsdl): <?xml version="1.0" encoding="UTF-8"?> <definitions targetNamespace="http://www.a-ware.org/bpel/airbusTest/wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:pln="http://schemas.xmlsoap.org/ws/2004/03/partner-link/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://www.a-ware.org/bpel/airbusTest/wsdl" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.a-ware.org/airbus/xsd"> <import location="airbus.wsdl" namespace="http://www.a-ware.org/airbus/xsd"/> <types> <schema targetNamespace="http://www.a-ware.org/bpel/airbusTest/wsdl" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.a-ware.org/airbus/xsd" elementFormDefault="qualified"> <import namespace="http://www.a-ware.org/airbus/xsd" schemaLocation="airbus.xsd" /> <!-- airbus.xsd contains exactly the schema of the previous wsdl --> <element name="ProcessInstantiation_data_outElement"> <complexType> <sequence> <element ref="xsd:templateFile" /> <element name="frequencies"> <complexType> <sequence> <element ref="xsd:frequency" minOccurs="1" maxOccurs="unbounded" /> </sequence> </complexType> </element> <element name="parameters"> <complexType> <sequence> <element name="parameter" type="xsd:parameters_type" minOccurs="1" maxOccurs="unbounded" /> </sequence> </complexType> </element> </sequence> </complexType> </element> <element name="e5_EndMessage_data_inElement"> <complexType> <sequence> <element name="PAAM_out" type="xsd:PAAM_out_type" /> <element name="IcemCFD_out" type="xsd:IcemCFD_out_type" /> <element name="ANADEL_out" type="xsd:ANADEL_out_type" /> <element name="MOVE_D01_out" type="xsd:MOVE_D01_out_type" /> </sequence> </complexType> </element> </schema> </types> <message name="ProcessInstantiation_data_out"> <part element="wsdl:ProcessInstantiation_data_outElement" name="body"/> </message> <message name="e5_EndMessage_data_in"> <part element="wsdl:e5_EndMessage_data_inElement" name="body"/> </message> [portType and partnerLinks] </definitions> While the process is (airbusTest.bpel): <?xml version="1.0" encoding="UTF-8"?> <process name="airbusTest" targetNamespace="http://www.a-ware.org/bpel/airbusTest/bpel" xmlns="http://schemas.xmlsoap.org/ws/2004/03/business-process/" xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/" xmlns:wsdl="http://www.a-ware.org/bpel/airbusTest/wsdl" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.a-ware.org/airbus/xsd"> <!--bpmn2bpel Version 1.0--> <import importType="http://schemas.xmlsoap.org/wsdl/" location="airbusTest.wsdl" namespace="http://www.a-ware.org/bpel/airbusTest/wsdl"/> <import importType="http://schemas.xmlsoap.org/wsdl/" location="airbus.wsdl" namespace="http://www.a-ware.org/airbus/xsd"/> <partnerLinks> [partner links] </partnerLinks> <variables> <!--List variables used in this BPEL process--> <variable messageType="xsd:paamOutput" name="n0_PAAM_data_out"/> <variable messageType="xsd:paamInput" name="n0_PAAM_data_in"/> [some other variable] <variable messageType="wsdl:ProcessInstantiation_data_out" name="ProcessInstantiation_data_out"/> <variable messageType="wsdl:e5_EndMessage_data_in" name="e5_EndMessage_data_in"/> <variable name="counter" type="xs:integer"/> </variables> <sequence name="sequenceComponent_3"> <receive createInstance="yes" name="ProcessInstantiation" operation="localPT" partnerLink="client" portType="wsdl:airbusTestPT" variable="ProcessInstantiation_data_out"/> <assign name="MyAssign"> <copy> <from>1</from> <to variable="counter"/> </copy> </assign> <sequence> <while > <condition> ( ($counter - 1) < count($ProcessInstantiation_data_out.body/wsdl:frequencies/xsd:frequency) ) </condition> <sequence name="sequenceComponent_0"> <assign name="d0_InputData"> <copy> <from><literal> <xsd:PAAM_in xmlns:xsd="http://www.a-ware.org/airbus/xsd"> <xsd:frequency>4</xsd:frequency> <xsd:templateFile>string</xsd:templateFile> <xsd:parameters> <xsd:name>string</xsd:name> <xsd:value>string</xsd:value> </xsd:parameters> </xsd:PAAM_in> </literal></from> <to variable="n0_PAAM_data_in" part="body"><query>/</query></to> </copy> <copy> <!-- the frequencies --> <from variable="ProcessInstantiation_data_out" part="body"><query>/wsdl:frequencies/xsd:frequency[1]</query></from> <to variable="n0_PAAM_data_in" part="body"><query>/</query></to> </copy> <copy> <from variable="ProcessInstantiation_data_out" part="body"><query>/xsd:templateFile</query></from> <to variable="n0_PAAM_data_in" part="body"><query>/</query></to> </copy> </assign> <invoke inputVariable="n0_PAAM_data_in" name="n0_PAAM" operation="paam" outputVariable="n0_PAAM_data_out" partnerLink="xsd_airbusPortTypePL" portType="xsd:airbusPortType"/> [other invokes and assigns] <assign name="Increment_Assign"> <copy> <from> ( $counter + 1 ) </from> <to variable="counter"/> </copy> </assign> </sequence> </while> </sequence> <assign name="d26_ANADEL_out"> <copy> [I prepare the output variable] </copy> </assign> <reply name="e5_EndMessage" operation="localPT" partnerLink="client" portType="wsdl:airbusTestPT" variable="e5_EndMessage_data_in"/> </sequence> </process> the input message I send to the process is: <?xml version="1.0" encoding="UTF-8"?> <wsdl:ProcessInstantiation_data_outElement xmlns:wsdl="http://www.a-ware.org/bpel/airbusTest/wsdl" xmlns:xsd="http://www.a-ware.org/airbus/xsd"> <xsd:templateFile>pluto</xsd:templateFile> <wsdl:frequencies> <xsd:frequency>7.1</xsd:frequency> <xsd:frequency>3.2</xsd:frequency> </wsdl:frequencies> <wsdl:parameters> <wsdl:parameter> <xsd:name>string</xsd:name> <xsd:value>string</xsd:value> </wsdl:parameter> </wsdl:parameters> </wsdl:ProcessInstantiation_data_outElement> But the message I receive when I invoke paam is: The message received by paam is <xsd:PAAM_in xmlns:wsdl="http://www.a-ware.org/bpel/airbusTest/wsdl" xmlns:xsd="http://www.a-ware.org/airbus/xsd"> <xsd:templateFile>pluto</xsd:templateFile> <wsdl:frequencies> <xsd:frequency>7.1</xsd:frequency> <xsd:frequency>3.2</xsd:frequency> </wsdl:frequencies> <wsdl:parameters> <wsdl:parameter> <xsd:name>prova</xsd:name> <xsd:value>bene</xsd:value> </wsdl:parameter> </wsdl:parameters> </xsd:PAAM_in> So the problem is at the second assign (<assign name="d0_InputData">) with the frequencies where I try to select only one of the frequency /wsdl:frequencies/xsd:frequency[1] but it seams that ODE selects the entire branch and copy it into the destination variable. My final goal is to use counter as an index: /wsdl:frequencies/xsd:frequency[$counter] But this obviously doesn't work either. What am I doing wrong? I have tried every think but it seems that the notation "[]" gets always ignored by ode. I am using apache-ode-jbi-1.0-RC4-incubating-SNAPSHOT.zip which I built from the SVN trunk at 2007-05-24, in service mix 3.2-incubating-SNAPSHOT. Thank you for your help, Luca
