複数のアサーション

receiveアクティビティ、invokeアクティビティ、またはpickアクティビティとscopeアクティビティのonMessageブランチでは、複数のアサーションをネストできます。アサーションの評価は、式がfalseと評価されるまでアサーションの宣言順に続行されます。次の例に詳細を示します。

<invoke name="invokeCR" partnerLink="creditRatingService"
        portType="services:CreditRatingService" operation="process"
        inputVariable="crInput" outputVariable="crOutput">
    <bpelx:postAssert name="negativeCredit" expression="$crOutput.payload/tns:rating >
 0"
                  faultName="services:NegativeCredit" message="'Negative Credit'"
 />
    <bpelx:postAssert name="insufficientCredit"
 expression="$crOutput.payload/tns:rating > 600"
                  faultName="services:InsufficientCredit" message="'Insufficient
 Credit'" />
</invoke>

前の例では、レスポンスの信用格付けがゼロより大きいことを確認する式のアサーションが最初に評価されます。表12-11に、このアサーションの動作を示します。

表12-11 アサーションの動作

返されたレスポンスの信用格付け 結果

ゼロ未満

services:NegativeCreditフォルトがスローされます。

ゼロ以上

アサーションが正しいため、2番目のアサーションが評価されます。

600未満

services:InsufficientCreditフォルトがスローされます。

600以上

アサーションが正しいため、invokeアクティビティからフォルトはスローされません。

アサーションは、いくつでもネストできます。アクティビティからフォルトがスローされないためには、指定したすべてのアサーションがtrueと評価される必要があります。

このコンストラクトを使用して、Javaのif...else if...else文と同様に、着信ペイロードに対して様々なレベルの検証を適用できます。

検証ロジックに関係なく、フォルトが常にスローされるようにするには、false()のアサーション式を指定します。これは、Javaのelseコンストラクトと同じです。