[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Issue - 12 - Proposal For Vote
Issue 12 - XML types and WS Interactions Proposal: Allow messaging activities involving messageTypes with a single part defined using an element (e.g. a WS-I doc/lit) to submit a BPEL variable of the same element type as the part directly to the message activity rather than having to submit a BPEL messageType variable. Rationale: Today all message activities in BPEL require the use of a WSDL messageType variable. But moving forward it is expected that WS-I’s doc/lit design pattern will be a common Web Services design pattern. This pattern requires that a message have exactly one part and that the part be defined using an element. In other words messages having to look something like: <xsd:element name="myElem"> <xsd:complexType> <xsd:sequence> <xsd:element name="xsdtns:detail" ... /> </xsd:sequence> </xsd:complexType> </xsd:element> ... <wsdl:message name="myMsgType"> <wsdl:part name="myPartName" element="xsdtns:myElem" /> </wsdl:message> Rather than requiring users to wrap the single element of content into a messageType variable it would be much simpler to allow, in these cases, for the user to directly submit an element BPEL variable to the message operation. The consequence is that a BPEL which only deals with WS-I compliant doc/lit operations would never need to use messageType variables at all. They could just use element variables. Allowing this optimization, besides making BPEL code simpler, would also put BPEL in very good shape for the eventual transition to WSDL 2.0. WSDL 2.0 messages do not have any parts at all and are defined exclusively using XML elements. So by allowing for message activities that interact with WSDL 1.1 messages with a single element-based part to avoid using messageType variables and just use XML variables we make it much easier for BPEL 2.0 code to make the transition to a WSDL 2.0 world. Changes Required: This proposal depends on issue 93 and 145. In the case where a messageType consists of a single part defined using an element it will be legal to submit a BPEL element variable instead of a messageType variable to messaging activities. The onEvent handler will be extended to have an element attribute in addition to a messageType attribute. The catch semantics are extended so that if there is no messageType based catch that matches a fault whose data is a messageType then if the messageType has one part defined using an element then a matching element based catch can grab it. Section 11.3 Add to the end of the section: If the WSDL operation used to send and/or receive a message in an invoke activity is defined as a message containing exactly one part which itself is defined using an element then a BPEL variable of the same element type as used to define the part MAY be submitted directly to the invoke activity. The result of submitting a BPEL variable in the previously defined circumstance MUST be the equivalent of declaring an anonymous temporary WSDL message variable based on the associated WSDL message type. In the case of an inputVariable the value of the submitted BPEL variable will be used to set the value of the part in the anonymous temporary WSDL message variable. In the case of an outputVariable the value of the received part in the temporary WSDL message variable will be used to set the value of the submitted BPEL variable. Section 11.4 Insert after the paragraph that begins “It is permissible to have the createInstance attribute”: If the WSDL operation used to receive or send a message in a request/reply activity is defined as a message containing exactly one part which itself is defined using an element then a BPEL variable of the same element type as used to define the part MAY be submitted directly to the request/reply activity. The result of submitting a BPEL variable in the previously defined circumstance MUST be the equivalent of declaring an anonymous temporary WSDL message variable based on the associated WSDL message type. In the case of a receive activity, the incoming part’s value will be used to set the value of the submitted BPEL variable. In the case of a reply activity the value of the submitted BPEL variable will be used to set the value of the part in the anonymous temporary WSDL message variable that is sent out. In the case of a reply that is sending a fault the same logic applies but using a fault name rather than an operation name. Section 12.4 Change: Each pick activity MUST include at least one onMessage event. The semantics of the onMessage event is identical to a receive activity regarding the optional nature of the variable attribute, the handling of race conditions, and the constraint regarding simultaneous enablement of conflicting receive actions. To: Each pick activity MUST include at least one onMessage event. The semantics of the onMessage event is identical to a receive activity regarding the optional nature of the variable attribute, the handling of race conditions, the single element-based part message short cut and the constraint regarding simultaneous enablement of conflicting receive actions. Section 13.4 Change: A fault response to an invoke activity is one source of faults, with obvious name and data aspects based on the definition of the fault in the WSDL operation. To: A fault response to an invoke activity is one source of faults, with name and data aspects based on the definition of the fault in the WSDL operation. Change: Because of the flexibility allowed in expressing the faults that a catch activity can handle, it is possible for a fault to match more than one fault handler. The following rules are used to select the catch activity that will process a fault: • If the fault has no associated fault data, a catch activity that specifies a matching faultName value and no faultVariable attribute will be selected if present. Otherwise, the default catchAll handler is selected if present. • If the fault has associated fault data, a catch activity specifying a matching faultName value and a faultVariable whose type (WSDL message type) matches the type of the fault’s data will be selected if present. Otherwise, a catch activity with no specified faultName and with a faultVariable whose type matches the type of the fault data will be selected if present. Otherwise, the default catchAll handler is selected if present. If no catch or catchall is selected, the fault is not caught by the current scope and is rethrown to the immediately enclosing scope (see Implicit Fault and Compensation Handlers for a more complete description of the default fault and compensation handling behavior). If the fault occurs in (or is rethrown to) the global process scope, and there is no matching fault handler for the fault at the global level, the process terminates abnormally, as though an exit activity had been performed. To: Because of the flexibility allowed in expressing the faults that a catch activity can handle, it is possible for a fault to match more than one fault handler. In the case of faults thrown without associated data the fault will be caught as follows: • If there is a catch activity with a matching faultName value that does not specify a faultVariable attribute then the fault is passed to the identified catch activity. • Otherwise if there is a catchAll handler then the fault is passed to the catchAll handler. • Otherwise the fault is thrown to the immediately enclosing scope. In the case of faults thrown with associated data the fault will be caught as follows: • If there is a catch activity with a matching faultName value that has a faultVariable whose type matches the type of the fault data then the fault is passed to the identified catch activity. • Otherwise if the fault data is a WSDL message type where the message contains a single part defined by an element and there exists a catch activity with a matching faultName value that has a faultVariable whose type matches the type of the element used to define the part then the fault is passed to the identified catch activity with the faultVariable initialized to the value in the single part’s element. • Otherwise if there is a catch activity without a faultName attribute that has a faultVariable whose type matches the type of the fault data then the fault is passed to the identified catch activity. • Otherwise if the fault data is a WSDL message type where the message contains a single part defined by an element and there exists a catch activity without a faultName attribute that has a faultVariable whose type matches the type of the element used to define the part then the fault is passed to the identified catch activity with the faultVariable initialized to the value in the single part’s element. • Otherwise if there is a catchAll handler then the fault is passed to the catchAll handler. • Otherwise the fault is thrown to the immediately enclosing scope. If the fault occurs in (or is rethrown to) the global process scope, and there is no matching fault handler for the fault at the global level, the process terminates abnormally, as though an exit activity had been performed. See Implicit Fault and Compensation Handlers for a more complete description of the default fault and compensation handling behavior. Section 13.5 Change the onEvent element definition to make messageType optional and add an optional element attribute. <onEvent partnerLink="ncname" portType="qname"? operation="ncname" variable="ncname"? (messageType="qname" | element="qname" )? > Insert after the schema: All instances of onEvent MUST use either the messageType or element attribute but not both. Section 13.5.1 Change: The messageType attribute specifies the type of the variable by referencing a message type definition using its QName. The type of the variable (as specified by the messageType attribute) must be the same as the type of the input message defined by operation referenced by the operation attribute. The variable and messageType attributes constitute the declaration of a variable of that name and type within an implicit scope associated with the event handler. To: The messageType attribute specifies the type of the variable by referencing a message type definition using its QName. The type of the variable (as specified by the messageType attribute) must be the same as the type of the input message defined by operation referenced by the operation attribute. Optionally the messageType attribute may be omitted and instead the element attribute substituted if the message to be received has a single part and that part is defined with an element type that matches the element type referenced by the element attribute. The variable and messageType/element attribute constitute the declaration of a variable of that name and type within an implicit scope associated with the event handler. If an element attribute is used then the binding of the incoming message to the variable declared in the onEvent handler occurs as specified for the receive activity in section 11.4.
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]