One of the queries I got
recently was on how to handle selection failures in assign activity if the tags
are not present as part of the payload.
To show case how it works
I will just do a small sample program which assigns input variable to output
variable. I am using PS5(11.1.1.6) environment and BPEL2.0 as specification.
I
am using BPEL 2.0 spec, but the solution works in BPEL 1.1 also.
Example:-  I use a simple assign activity to assign 2
elements of input to output.
| 
  <assign name="Assign1"
  xml:id="id_11"> 
            <copy
  xml:id="id_16"> 
                <from
  xml:id="id_17">$inputVariable.payload/client:input1</from> 
                <to
  xml:id="id_18">$outputVariable.payload/client:result1</to> 
            </copy> 
            <copy xml:id="id_19"
  ignoreMissingFromData="no"> 
                <from
  xml:id="id_20">$inputVariable.payload/client:input2</from> 
                <to
  xml:id="id_21">$outputVariable.payload/client:result2</to> 
            </copy> 
        </assign> | 
For
testing this I pass only one element in payload. The element2 tag is not
present in the payload.
| 
<soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:bpel="http://xmlns.oracle.com/BPMLearning/Project1/BPELProcess1"> 
   <soapenv:Header/> 
   <soapenv:Body> 
      <bpel:process> 
         <bpel:input1>hello</bpel:input1> 
        </bpel:process> 
   </soapenv:Body> 
</soapenv:Envelope> | 
In
runtime it throws following selection failure error
Exception stack
trace:
| 
Exception is thrown because the from-spec at
  line 61 is evaluated to be empty 
-<details> 
-<from-spec> 
<from xml:id="id_20"
  xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"> 
$inputVariable.payload/client:input2 
</from> 
</from-spec> 
-<variable> 
<message> 
inputVariable 
</message> 
</variable> 
-<fault> 
-<bpelFault> 
<faultType> 
0 
</faultType> 
<selectionFailure xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"/> 
</bpelFault> 
</fault> 
</details> | 
Solution
 To fix this there is an attribute ignoreMissingFromData
| 
BPEL 1.1  syntax | 
BPEL 2.0 syntax | 
| 
<copy
  bpelx:ignoreMissingFromData="yes|no"/> | 
<copy
  ignoreMissingFromData="yes|no"/> | 
| 
<assign
  name="Assign1" xml:id="id_11"> 
            <copy
  xml:id="id_16"> 
                <from
  xml:id="id_17">$inputVariable.payload/client:input1</from> 
                <to
  xml:id="id_18">$outputVariable.payload/client:result1</to> 
            </copy> 
            <copy xml:id="id_19" ignoreMissingFromData="yes"> 
                <from xml:id="id_20">$inputVariable.payload/client:input2</from> 
                <to
  xml:id="id_21">$outputVariable.payload/client:result2</to> 
            </copy> 
        </assign> | 
The
error gets suppressed since it ignores the element as the ignoreMissingFromData
flag is set to yes.
BPEL instance
execution stacktrace
| 
 | ||
| 
 
That’s it .It’s an easy solution to
  selectionFailure instead of 
 using the count nodes function and taking
  headaches in  
doing the mapping. | 


