[ 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