[ 
https://issues.apache.org/jira/browse/ODE-924?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

tbuss updated ODE-924:
----------------------

    Attachment: src-ODE-922-924.zip

This fix overlap with my proposed fix for ODE-922.  The file, from.java, is 
modified by both fixes.  I have combined my fix for ODE-922 with my proposed 
fix for ODE-924 since they are both related to BPEL 1.1 support

> Incorrect Xpath processing for BPEL 1.1
> ---------------------------------------
>
>                 Key: ODE-924
>                 URL: https://issues.apache.org/jira/browse/ODE-924
>             Project: ODE
>          Issue Type: Bug
>          Components: BPEL Compilation/Parsing, BPEL Runtime
>    Affects Versions: 1.3.5
>         Environment: Windows XP SP3, Tomcat-7.0.10, jdk1.6.0
>            Reporter: tbuss
>         Attachments: src-ODE-922-924.zip
>
>
> I am trying to port some BPLE 1.1 workflows to Ode 1.3.5 but I am having 
> difficulty with absolute xpath expressions. For example, the following fails 
> with a selectionFailure fault.
>           <assign name="GetProjects" 
> uuid="41b4d5c8-ff05-406f-ad6d-8f3c816a6521">
>             <copy>
>               <from variable="appAuth" query="/ns8:appAuth" />
>               <to variable="GetProjects-GetProjects" part="parameters" 
> query="/ns8:GetProjects/ns8:auth" />
>             </copy>
>           </assign>
> I am able to work around this issue by changing all the xpaths wherever they 
> are found to relative xpath expressions, omitting the /rootElement/ part of 
> the xpath.  In some case this means omitting the containing attribute 
> entirely.  Here is the same example with the workaround.
>           <assign name=" GetProjects" 
> uuid="41b4d5c8-ff05-406f-ad6d-8f3c816a6521">
>             <copy>
>               <from variable="appAuth"/>
>               <to variable=" GetProjects-GetProjects " part="parameters" 
> query="ns8:auth" />
>             </copy>
>           </assign>
> While resulting BPEL will execute correctly it is a serious impediment to 
> running BPEL 1.1 processes on Ode.
> Also According to the BPEL4WS1.1 spec this behavior is not correct.  Section 
> 14.1 Assignment states that
> "Compliant implementations of the current version of BPEL4WS MUST support the 
> use of XPath 1.0 as the query language"
> and that
> "For XPath 1.0, the value of the query attribute MUST be an absolute 
> locationPath (with '/' meaning the root of the document fragment representing 
> the entire part). It is used to identify the root of a subtree within the 
> document fragment representing the part. The location path MUST select 
> exactly one node. If the location path selects zero nodes or more than one 
> node during execution, then the standard fault bpws:selectionFailure MUST be 
> thrown by a compliant implementation."
> As best I can tell, and the documentation on this is rather sparse, the 
> locationPath query for BPEL4WS 1.1 should either be rooted on the part name 
> if the part is defined using a type (typical for RPC literal style wsdls) or 
> if the part name is defined using an element (typical for document literal 
> wsdls) then the element name should be used.  In the example I gave, the 
> service is document literal and the element name that defines the part in the 
> wsdl is ns8:GetProjects.   Hence it seems the required Xpath query should be 
> "/ns8:GetProjects/ns8:auth".  If the service had been rpc literal then the 
> required xpath should be "parameters/ns8:auth" since the part is named 
> "parameters".
> However, Ode 1.3.5 requires the xpath query to be either "ns8:auth" or 
> "/ns8:auth" to successfully select the ns8:auth element, both of which seem 
> odd.
> I have created a proposed fix for this which I will attach.
> The fix removes any preceding absolute root from the xpath expression in the 
> BPEL 1.1 compiler producing a working compiled version.  
> I tried to fix it in the runtime but it is more complex there because of 
> where the ode runtime sets the document root for the temporary document it 
> uses to evaluate the xpath.  This is probably why an incorrect absolute path 
> like "/ns8:auth" works.  This makes the handling the cases for both Document 
> Literal and RPC literal difficult because the document root would have be 
> adjusted to different places depending on the case and detecting which case 
> is not trivial to determine by the time we get to the runtime.  Also fixing 
> it at runtime has a chance of destabilizing the BPEL 2.0 runtime which would 
> be bad.
> The compiler fix turned out to be fairly elegant for what is essentially a 
> hack.  By just providing the class Expression11 with a pseudo Factory method 
> and replacing all the calls to Expression11 constructor with the factory 
> method call I was able to centralize stripping of the absolute root 
> converting say, "/ns8:GetProjects/ns8:auth", to "ns8:auth",  and also handle 
> the degenerative case of setting a location like this  "/ns8:GetProjects" to 
> null.  The fix is simplistic;  I'm not parsing the xpath or attempting to 
> deal with all cases so there may be expressions that don't work. 
> More testing is required but the fix seems to work for all the cases I have 
> tried including queries nested in GetVariableData functions so I will attach 
> it to the JIRA.  I believe it is specific to BPEL 1.1 and should have no 
> effect on BPLE 2.0 processes.  It may break any BPEL 1.1 processes that were 
> written to work around this issue.  I suspect existing relative paths will 
> still work since I am only looking for absolute expressions and let relative 
> expressions through. However, an incorrect absolute path like the "/ns8:auth" 
> example I gave will get stripped out and won't produce the correct result at 
> runtime as it does now.
> For the original user mailing list discussion see
> http://mail-archives.apache.org/mod_mbox/ode-user/201105.mbox/%3c1B3A9CAA04782F40AC59576CFBFC802C0B2390140D@VA3DIAXVS251.RED001.local%3e

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to