FeaturesPluginsDocs & SupportCommunityPartners
Semantic Analysis

Semantic Validation Rules and Messages

The purpose of semantic analysis is to detect any undefined semantics or invalid semantics within a process definition that was not detected during the schema validation against the XSD or by the standard static analysis.

 

Construct

Description

Message

Comments

 

<receive partnerLink="ncname" portType="qname"? operation="ncname"

variable="ncname"? createInstance="yes|no"?

messageExchange="ncname"?

Standard-attributes>

 

 

1.      validate if partnerLink exists.

2.      validate if portType exists.

3.      validate if operation exists under the portType.

4.      validate if variable exists.

5.      Validate to ensure that at lest one receive is available in flow which has createInstance attribute value set to “yes”.

6.      Validate to ensure that there is at lest one receive is available in process which has createInstance attribute value set to “yes”.

 

Done

Done

Done

Done

<reply partnerLink="ncname" portType="qname"? operation="ncname"

variable="ncname"? faultName="qname"?

messageExchange="ncname"?

standard-attributes>

1.      validate if partnerLink exists

2.      validate if portType exists

3.      validate if operation exists under the portType

4.      validate if variable exists.

5.      Validate if faultName specified exists in wsdl operation of given portType.

 

Done

Done

Done

Done

<invoke partnerLink="ncname" portType="qname"? operation="ncname"

inputVariable="ncname"? outputVariable="ncname"?

standard-attributes>

1.      validate if partnerLink exists.

2.      validate if portType exists.

3.      validate if operation exists under the portType.

4.      validate if input and output variable exists.

 

Done

Done

Done

Done

<pick>

<onMessage partnerLink="ncname" portType="qname"?

operation="ncname" variable="ncname"?

messageExchange="ncname"? >+

<pick>

1.      validate if partnerLink exists

2.      validate if portType exists

3.      validate if operation exists under the portType

4.      validate if variable exists

 

 

<throw faultName="qname" faultVariable="ncname"? standard-attributes>

standard-elements

</throw>

Ensure that faulVariable exist.

 

 

<validate variables="ncname-list" standard-attributes>

standard-elements

</validate>

Validate to ensure that list of space seperated variables are available in enclosing scope or process.

 

 

<variables>?

<variable name="ncname" messageType="qname"?

type="qname"? element="qname"?/>+

</variables>

1.      Ensure that variable names are unique inside variables.

2.      Ensure that variable name does not contain “.” (dot), since dot is used to separate a variable name with a message part.

 

Done

<variables>

<variable name="ncname" messageType="qname"?

type="qname"? element="qname"?/>+

</variables>

1.      validate if exactly one of messageType/element/type is specified

2.      validate if specified messageType exists.

3.      validate if specified element exists.

4.      validate if specified type exists.

 

Done

Done

<partnerLinks>

<partnerLink name="ncname" partnerLinkType="qname"

myRole="ncname"? partnerRole="ncname"?>+

</partnerLink>

</partnerLinks>

1.      Validate to ensure that all the partnerLink inside partnerLinks have unique names.

 

 

Done

 

<partnerLink name="ncname" partnerLinkType="qname"

myRole="ncname"? partnerRole="ncname"?>+

</partnerLink>

1.      Validate to ensure that at lest one of myRole or partnerRole is specified.

2.      Validate to ensure that partnerLinkType exists in the wsdl document.

3.      Validate to ensure that specified myRole or partnerRole exists as a role in the partnerLinkType defined in wsdl document.

 

 

Done

Done

<catch faultName="qname"? faultVariable="ncname"?

faultMessageType="qname"?

faultElement="qname"?>*

1.      Validate to ensure that faultName specified exist in either bpel (if local bpel fault declared using throw) or exist

in the wsdl defined operation in the enclosing invoke or the activity where this catch is specified.

2.      The faultName may reflect a purely internal custom fault in a process, or the faultName may be missing.In such cases, the faultVariable, which is local to the fault handler and declared by its occurrence in the catch element, will not have a defined type. To avoid this possibility faultVariable MUST only be used if either the faultMessageType or faultElement attributes, but not both, accompany it. faultMessageType and faultElement MUST NOT be used unless accompanied by faultVariable

3.      Validate to ensure if faultMessageType is specified then it exists in an imported wsdl document.

4.      Validate to emsure if faultElement is specified then it exists in an imported wsdl/xsd.

 

 

<from variable="ncname" part="ncname"?/>

1.      Validate to ensure that <from> variable exists.

2.      Validate to ensure that <from> part exists.

 

 

 

<from partnerLink="ncname" endpointReference="myRole|partnerRole"/>

Validate to ensure that <from> partnerLink exists.

 

 

<from variable="ncname" property="qname"/>

1.      Validate to ensure that <from> variable exists.

2.      Validate to ensure that <from> property exists.

 

 

<from expressionLanguage="anyURI"?>expression</from>

1.      Validate to ensure that expression text can be parsed by the expression model

for given expressionLanguage.

(In the absence of queryLanguage default to default query model which is xpath1.0)

 

 

<from> <literal> ... literal value ... </literal> </from>

1.      Validate to ensure if type of the literal is specified using inline xsi:type then literal value should of that type. (lets say type is string and there is an element

definition under <literal> then its an error.)

2.      Literal return value should be either EII or TII

 

 

<to variable="ncname" part="ncname"?/>

1.      Validate to ensure that <to> variable exists.

2.      Validate to ensure that <to> part exists.

 

 

<to partnerLink="ncname"/>

Validate to ensure that <to> partnerLink exists.

 

 

<to variable="ncname" property="qname"/>

1.      Validate to ensure that <to> variable exist.

2.      Validate to ensure that <to> property exists.

 

 

<to queryLanguage="anyURI"?>… query … </to>

1.      Validate to ensure that query text can be parsed by the query model

for given queryLanguage.

(In the absence of queryLanguage default to default query model which is xpath1.0)

 

 

<correlationSets>

<correlationSet name="ncname" properties="qname-list"/>

</correlationSets>

1.Validate to ensure that all the correlationSet inside a correlationSets have unique names.

 

Done

<correlationSet name="ncname" properties="qname-list"/>

1.      Validate to ensure that all the properties

defined in a correlationSet exists.

2.      Validate to ensure that for each properties specified there exist a propertyAlias.

 

Done

<correlation set="ncname" initiate="yes|join|no"?

pattern="request|response|request-response"/>+

1.      validate if a duplicate correlation inside all activities which can have correlation (receive/reply/invoke etc) try to initiate it again. This should be a warning.

Ex:
<receive createInstance="yes">
<correlations>
<correlation set="cSet1" initiate="yes"/>
<correlation set="cSet1" initiate="yes"/>
<correlation set="cSet1" initiate="yes"/>
</correlations>

</receive>

2.      validate if a correlation is initiated and then same is being not initiated.

Ex:
 

<receive >
<correlations>
<correlation set="cSet1" initiate="yes"/>
<correlation set="cSet1" initiate="no"/>
</correlations>
</receive>

 

3.      If the receive is the first activity (and not in a flow) and the create instance is yes, if there is any correlation that has initiate values other than "join" or "yes", it is a FATAL error.

4.      Fatal error if Inside flow a receive has

createInstance attribute value “yes” and a correlation inside receive has initialed attribute value “no”.

 

 

Ex:

<flow>
<receive createInstance=”yes”>
<correlation set="cSet1" initiate="no"/>
</receive>


4. Validate that the same correlation Set is not being referred to twice in the <correlations> tag.  Example:
<receive createInstance="yes">
<correlations>
<correlation set="cSet1" initiate="yes"/>
<correlation set="cSet1" initiate="yes"/>
</correlations>

</receive>


 


















































Done




BPEL Extension Validation

 

Construct

Description

Message

Comments

<bpws:property name="ncname" type="qname"? element="qname"?/>

1.      validate if property xsd type exists.

2.      validate if property xsd element exists.

3.      Validate to ensure only one of type or element is specified. (Need to do if bpel schema does not take care of this)

4.      If property is not from the latest supported property namesapce. (i.e. using property which was on old version of bpel using old namespace) then we need to warn user.

 

Done

Done

Done

<bpws:propertyAlias propertyName="qname"

messageType="qname"? part="ncname"?

type="qname"? element="qname"?>

<query queryLanguage="anyURI"?>?

... queryString ...

</query>

</bpws:propertyAlias>

1.      Validate to ensure propertyName exists.

2.      Validate to ensure messageType if specified exists.

 

1.      Validate to ensure part if specified exist.

2.      Validate to ensure type if specified exist.

3.      Validate to ensure element if specified exists.

4.      Validate to ensure that queryString is parseable by the query model as specified by queryLanguage.

5.      (In the absence of queryLanguage default to default query model which is xpath1.0)

6.      A BPEL process MUST NOT be accepted for processing if it defines two or more propertyAlias’s for the same property name and BPEL variable type.

7.      The same logic would prohibit having two propertyAliases on the same element qname and property name value or two propertyAliases on the same type qname and property name value.

8.      If propertyAlias is not from the latest supported propertyAlias namesapce. (i.e. using propertyAlias which was on old version of bpel using old namespace) then we need to warn user.

 

 

Done

 

 

 

Done

Done

Done

<plnk:partnerLinkType name="ncname">

<plnk:role name="ncname" portType="qname"/>

<plnk:role name="ncname" portType="qname"/>?

</plnk:partnerLinkType>

1.      validate if portType exists as specified in role

2.      validate to ensure only two roles are specified in partnerLinkType

3.      If partnerLinkType is not from the latest supported partnerLinkType namesapce. (i.e. using partnerLinkType which was on old version of bpel using old namespace) then we need to warn user.

 

Done

Done

 

Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by