Flexible Assigns

Auto Complete Copy Destination (L-Value)

A lot of times, users expect the operation in a WS-BPEL assign activity to behave such that the path specified by the destination ("to-spec") is automatically created, if it doesn't already exist. By default, if the to-spec used within a operation does not select exactly one XML information item during execution, then the standard fault bpel:selectionFailure is thrown (as mandated by the spec).

To override this default behavior, we introduce a insertMissingToData attribute in the operation, which if it is set to "yes", will instruct the runtime to complete the (XPath) L-value specified by the to-spec, if no items were selected. For the sake of simplicity, we will complete the to-spec if and only if: 1. It's a path expression whose steps are separated by "/", and 1. Its steps have an axis, which is either "child" or "attribute", and 1. Its steps have no following predicates, and 1. Its steps test the name of a node, without the use of wildcards.

Formally, the grammar of the to-spec, for which auto-complete is enabled, may be defined in terms of these productions:

PathExpr ::= ("/" RelativePathExpr?) | RelativePathExpr 
RelativePathExpr ::= ForwardStep (("/" ) ForwardStep)* 
ForwardStep ::= (ForwardAxis QName) | AbbrevForwardStep 
AbbrevForwardStep ::= "@"? QName 
ForwardAxis ::= ("child" "::") | ("attribute" "::")

The example below illustrates the use of the insertMissingToData attribute. Let's say that the variable "response" is uninitialized. In that case, the first operation will fail, whereas the second one will succeed.


<copy insertMissingToData="yes"> 

Add support for the ignoreMissingFromData attribute in <copy>

The attached patch adds support for the following attributes in the BPEL assign activity's copy operation:

  1. The optional @ignoreMissingFromData attribute, which if it has the value of "yes", and the from-spec returns zero XML information items, then no bpel:selectionFailure is thrown, and the to-spec is not evaluated.

  2. An extension @ignoreUninitializedFromVariable attribute, which if it has the value of "yes", and the from-spec contains an uninitialized variable, then no bpel:uninitializedVariable is thrown, and the to-spec is not evaluated.

The informal syntax of the above attributes is shown below:

<copy ignoreMissingFromData="yes|no"? ignoreUninitializedFromVariable="yes|no"?> 
      from-spec to-spec