Thanks to Mark and Matthieu for helping me with this, and to Karthick for
fixing this issue.  See ODE-581.

-Jon


On 4/14/09 3:09 PM, "Jon Coogan" <[email protected]> wrote:

> Ok, I have put together a simple example of the problem I am seeing with
> query expressions.  This example does not include a forEach activity.  Also,
> I am running this against a current build of Ode 1.X.
> 
> The attached process takes a single int as input and returns a single string
> as output.  Valid arguments for the input are 1, 2, or 3.  The process
> should return "one", "two", or "three", depending on the input.
> 
> The problem occurs when I try to assign values out of the RecordSet variable
> into the Record variable.  When I use a query on the "to" side of the copy,
> the process will throw a selectionFailure fault at runtime.  The process
> works correctly if you replace the queries with expressions.
> 
> In case my attachments don't get through, I'll include the text of the files
> here:
> 
> ********** Begin QueryTest1.wsdl **********
> 
> <?xml version="1.0"?>
> <definitions name="QueryTest1"
>         targetNamespace="mynamespace"
>         xmlns:tns="mynamespace"
>         xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype";
>         xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>         xmlns="http://schemas.xmlsoap.org/wsdl/";
>> 
>         
>     <types>
>         <schema attributeFormDefault="unqualified"
> elementFormDefault="qualified"
>                 targetNamespace="mynamespace"
>                 xmlns="http://www.w3.org/2001/XMLSchema";>
> 
>             <element name="QueryTest1Request" type="int" />
>             <element name="QueryTest1Response" type="string" />
>         
>             <complexType name="RecordType">
>                 <sequence>
>                     <element name="SomeValue" type="string"></element>
>                     <element name="AnotherValue" type="string"></element>
>                 </sequence>
>             </complexType>
>         
>             <complexType name="RecordSetType">
>                 <sequence>
>                     <element ref="tns:Record" minOccurs="0"
> maxOccurs="unbounded"></element>
>                 </sequence>
>             </complexType>
>             
>             <element name="Record" type="tns:RecordType"></element>
>             <element name="RecordSet" type="tns:RecordSetType"></element>
>         </schema>
>     </types>
>     
>     <message name="QueryTest1RequestMessage">
>         <part name="payload" element="tns:QueryTest1Request"/>
>     </message>
>     <message name="QueryTest1ResponseMessage">
>         <part name="payload" element="tns:QueryTest1Response"/>
>     </message>
>     
>     <portType name="QueryTest1">
>         <operation name="process">
>             <input  message="tns:QueryTest1RequestMessage" />
>             <output message="tns:QueryTest1ResponseMessage"/>
>         </operation>
>     </portType>
>     
>     <plnk:partnerLinkType name="QueryTest1">
>         <plnk:role name="QueryTest1Provider" portType="tns:QueryTest1"/>
>     </plnk:partnerLinkType>
>     
>     <binding name="QueryTest1Binding" type="tns:QueryTest1">
>         <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"; />
>         <operation name="process">
>             <soap:operation soapAction="mynamespace/process" />
>             <input>
>                 <soap:body use="literal" />
>             </input>
>             <output>
>                 <soap:body use="literal" />
>             </output>
>         </operation>
>     </binding>
>     
>     <service name="QueryTest1Service">
>         <port name="QueryTest1Port" binding="tns:QueryTest1Binding">
>             <soap:address location="http://[server]:[port]/ode/QueryTest1";
> />
>         </port>
>     </service>
> </definitions>
> 
> ********** End QueryTest1.wsdl **********
> 
> ********** Begin QueryTest1.bpel **********
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <bpws:process exitOnStandardFault="yes"
>     expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
>     name="QueryTest1"
>     queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
>     suppressJoinFailure="yes" targetNamespace="mynamespace"
>     xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable";
>     xmlns:ode="http://www.apache.org/ode/type/extension";
>     xmlns:tns="mynamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema";>
> 
>     <bpws:import importType="http://schemas.xmlsoap.org/wsdl/";
>         location="QueryTest1.wsdl" namespace="mynamespace"/>
> 
>     <bpws:partnerLinks>
>         <bpws:partnerLink myRole="QueryTest1Provider" name="client"
> partnerLinkType="tns:QueryTest1"/>
>     </bpws:partnerLinks>
> 
>     <bpws:variables>
>         <bpws:variable messageType="tns:QueryTest1RequestMessage"
> name="input"/>
>         <bpws:variable messageType="tns:QueryTest1ResponseMessage"
> name="output"/>
>         <bpws:variable element="tns:RecordSet" name="RecordSet"/>
>         <bpws:variable element="tns:Record" name="Record"/>
>     </bpws:variables>
> 
>     <bpws:sequence name="QueryTest1">
>         <bpws:receive createInstance="yes" name="ReceiveInput"
>             operation="process" partnerLink="client"
>             portType="tns:QueryTest1" variable="input"/>
>         <bpws:assign name="InitializeRecordSetVariable" validate="no">
>             <bpws:copy>
>                 <bpws:from>
>                     <bpws:literal>
>                         <tns:RecordSet xmlns:tns="mynamespace"
>                  
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="mynamespace QueryTest1.wsdl ">
>                             <tns:Record>
>                                 <tns:SomeValue>one</tns:SomeValue>
>                                 <tns:AnotherValue>ONE</tns:AnotherValue>
>                             </tns:Record>
>                             <tns:Record>
>                                 <tns:SomeValue>two</tns:SomeValue>
>                                 <tns:AnotherValue>TWO</tns:AnotherValue>
>                             </tns:Record>
>                             <tns:Record>
>                                 <tns:SomeValue>three</tns:SomeValue>
>                                 <tns:AnotherValue>THREE</tns:AnotherValue>
>                             </tns:Record>
>                         </tns:RecordSet>
>                     </bpws:literal>
>                 </bpws:from>
>                 <bpws:to variable="RecordSet"/>
>             </bpws:copy>
>         </bpws:assign>
>         <bpws:assign name="InitializeRecordVariable" validate="no">
>             <bpws:copy>
>                 <bpws:from>
>                     <bpws:literal>
>                         <tns:Record xmlns:tns="mynamespace"
>                  
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="mynamespace QueryTest1.wsdl ">
>                             <tns:SomeValue/>
>                             <tns:AnotherValue/>
>                         </tns:Record>
>                     </bpws:literal>
>                 </bpws:from>
>                 <bpws:to variable="Record"/>
>             </bpws:copy>
>         </bpws:assign>
>         <bpws:assign name="AssignRequestedRecordToVariable" validate="no">
>             <bpws:copy>
>                 <bpws:from variable="RecordSet">
>                     <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[tns:
> Record[number($input.payload)]/tns:SomeValue]]></bpws:query>
>                 </bpws:from>
> 
>                 <!------------ Selection failure. ------------>
>                 <bpws:to variable="Record">
>                     <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[tns:
> SomeValue]]></bpws:query>
>                 </bpws:to>
>                 
>                 <!------------ This works.        ------------>
>                 <!-- <bpws:to
> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA
> [$Record/tns:SomeValue]]></bpws:to> -->
> 
>             </bpws:copy>
>             <bpws:copy>
>                 <bpws:from variable="RecordSet">
>                     <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[tns:
> Record[number($input.payload)]/tns:AnotherValue]]></bpws:query>
>                 </bpws:from>
> 
>                 <!------------ Selection failure. ------------>
>                 <bpws:to variable="Record">
>                     <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[tns:
> AnotherValue]]></bpws:query>
>                 </bpws:to>
> 
>                 <!------------ This works.        ------------>
>                 <!-- <bpws:to
> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA
> [$Record/tns:AnotherValue]]></bpws:to> -->
> 
>             </bpws:copy>
>         </bpws:assign>
>         <bpws:assign name="AssignFromVariableToOutput" validate="no">
>             <bpws:copy>
>                 <bpws:from variable="Record">
>                     <bpws:query
> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![CDATA[tns:
> SomeValue]]></bpws:query>
>                 </bpws:from>
>                 <bpws:to part="payload" variable="output"/>
>             </bpws:copy>
>         </bpws:assign>
>         <bpws:reply name="ReplyWithOutput" operation="process"
>             partnerLink="client" portType="tns:QueryTest1"
> variable="output"/>
>     </bpws:sequence>
> 
> </bpws:process>
> 
> ********** End QueryTest1.bpel **********
> 
> ********** Begin deploy.xml **********
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03";
> xmlns:ns1="mynamespace">
>   <process name="ns1:QueryTest1">
>     <active>true</active>
>     <provide partnerLink="client">
>       <service name="ns1:QueryTest1Service" port="QueryTest1Port"/>
>     </provide>
>   </process>
> </deploy>
> 
> ********** End deploy.xml **********
> 

Reply via email to