[ https://issues.apache.org/jira/browse/ODE-581?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12699454#action_12699454 ]
Karthick Sankarachary commented on ODE-581: ------------------------------------------- There was a glitch in the way we compiled the variable variants of the to-spec, which led to this issue. That glitch has now been taken care of (please refer to revision 765432). In addition, I checked in your bpel process as one of our test cases. Thanks for bringing this to our attention. > 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.