[
https://issues.apache.org/jira/browse/ODE-581?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Karthick Sankarachary resolved ODE-581.
---------------------------------------
Resolution: Fixed
> Problem with query expressions when assigning from variable to variable
> -----------------------------------------------------------------------
>
> Key: ODE-581
> URL: https://issues.apache.org/jira/browse/ODE-581
> Project: ODE
> Issue Type: Bug
> Components: BPEL Compilation/Parsing, BPEL Runtime
> Affects Versions: 1.2
> Environment: The attached test process is intended to be run against
> Ode 1.X. I have also seen this behavior on Ode 1.2, but it manifests itself
> differently.
> Reporter: Jon Coogan
> Assignee: Karthick Sankarachary
> Attachments: deploy.xml, QueryTest1.bpel, QueryTest1.wsdl
>
>
> I have noticed that in some instances, when using a query expression to copy
> data from one variable to another, the Ode runtime will throw a
> selectionFailure fault. Replacing the variable query with an expression
> resolves the problem.
> I have put together a simple example of the problem I am seeing with query
> expressions. I tested 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. There are
> comments in the .bpel file that indicate where the problem occurs and how to
> resolve the problem by using an expression instead of a query.
> Test files follow:
> ********** 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 **********
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.