アサート後およびアサート前条件のスキーマおよび構文に関する必知事項
アサーション条件は、ネストされた拡張要素として指定されます。次の例に、BPEL 2.0におけるアサート後条件のスキーマ定義を示します。
<invoke | receive | onMessage> standard-elements <bpelx:postAsserts> <bpelx:postAssert faultName="QName"> <bpelx:expression expressionLanguage="anyURI"?>expression </bpelx:expression> <bpelx:message expressionLanguage="anyURI"?>expression</bpelx:message> </bpelx:postAssert> </bpelx:postAsserts> </invoke | receive | onMessage>
次の例に、BPEL 2.0におけるアサート後条件の構文を示します。
<bpelx:postAsserts> <bpelx:postAssert faultName="ns2:InvalidInput"> <bpelx:expression>number(concat($inputVariable.payload/client:input,'2')) < 500</bpelx:expression> <bpelx:message>"AssertXpathPostInvoke_20 assert fired"</bpelx:message> </bpelx:postAssert> </bpelx:postAsserts>
次の例に、BPEL 1.1におけるアサート後条件のスキーマ定義を示します。BPEL 1.1とBPEL 2.0の差異に注意します。
<invoke | receive | onMessage> standard-elements <bpelx:postAssert name="ncname" expression="boolean-expr" faultName="QName"+ message="generic-expr"+/> </invoke | receive | onMessage>
次の例に、BPEL 1.1におけるアサート後条件の構文を示します。
<bpelx:postAssert name="Assert_1" message='Post Invoke Multiple assert value fired' faultName="ns2:NegativeValue" expression="bpws:getVariableData('invar','payload','/ns1:process/ns1:input') > 0"/>
次の例に、BPEL 2.0におけるアサート前条件のスキーマ定義を示します。
<invoke | reply> standard-elements <bpelx:preAsserts> <bpelx:preAssert faultName="QName"> <bpelx:expression expressionLanguage="anyURI"?>expression</bpelx:expression> <bpelx:message expressionLanguage="anyURI"?>expression</bpelx:message> </bpelx:preAssert> </bpelx:preAsserts> </invoke | reply>
次の例に、BPEL 2.0におけるアサート前条件の構文を示します。
<bpelx:preAsserts> <bpelx:preAssert faultName="ns1:InvalidInput"> <bpelx:expression>concat($inputVariable.payload/client:input,'2') > $inputVariable.payload/client:input</bpelx:expression> <bpelx:message>"AssertXpathPreInvoke_20 Assert test"</bpelx:message> </bpelx:preAssert> </bpelx:preAsserts>
次の例に、BPEL 1.1におけるアサート前条件のスキーマ定義を示します。BPEL 1.1とBPEL 2.0の差異に注意します。
<invoke | reply> standard-elements <bpelx:preAssert name="NCName" expression="string" message="string" faultName="QName"/> </invoke | reply>
次の例に、BPEL 1.1におけるアサート前条件の構文を示します。
<bpelx:preAssert name="Assert_1" expression="bpws:getVariableData('invar','payload','/ns1:process/ns1:input') > 0" message='pre invoke assert NegativeInput fired' faultName="ns4:NegativeInput"/>
bpelx:postAssert
拡張要素には、パートナからのコールバック・メッセージの受信時に評価するXPath式を指定します。アサーション式でfalseのブール値が返された場合は、指定のフォルトがアクティビティからスローされます。アサーション式でtrueのブール値が返された場合、フォルトはスローされず、通常のBPELプロセス・フローの場合と同様に、invokeアクティビティ、receiveアクティビティ、またはpickアクティビティとscopeアクティビティのonMessageブランチに続くアクティビティが実行されます。
bpelx:preAssert
またはbpelx:postAssert
拡張要素は、Javaのassert
文と同じです。Javaでは、assert
式がtrueと評価されない場合は、JVMによってエラーが報告されます。同様に、bpelx:preAssert
またはbpelx:postAssert
拡張要素の式もtrueと評価される必要があります。そうでない場合は、指定のフォルトがスローされます。
たとえば、次の例に示すBPEL 1.1のinvokeアクティビティでは、アサーション条件に指定したXPath式でfalseが返されると、NegativeCredit
フォルトがスローされます。
<scope> <faultHandlers> <catch faultName="services:NegativeCredit" faultVariable="crError"> <empty/> </catch> </faultHandlers> <sequence> <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'" /> </invoke> </sequence> </scope>
bpelx:preAssert
またはbpelx:postAssert
のオプションのname
属性は、監査証跡イベント・メッセージの作成時に使用されます。このインスタンスの名前を使用すると、複数のアサーションが指定されている場合にアサーション要素を識別できます。name
属性の指定がない場合は、BPELファイル内のアサーション要素の行番号が使用されます。