Hi, Rajith.
Your questions are just in time. I just reached a point that the databinding
framework works with the Axis2 binding (Axiom) end-to-end. I'm planning to
put together a document to describe how the framework works and how you can
plug in extensions.
Let me try to give you some breif answers first. Please see the comments
below.
Thanks,
Raymond
----- Original Message -----
From: "Rajith Attapattu" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, September 18, 2006 3:23 PM
Subject: Re: Question on databinding framework
Hi,
I would really appreciate if somebody can answer the following questions
regarding the data binding framework.
1. Is DataBindingInteceptor the only interceptor in the chain that deals
with data transformation?
Yes. DataBindingInterceptor(s) are added to the wiring to transform data
between two mappable (compatible but with different databindings)
ServiceContract/Operation(s).
2. The DataBindingInteceptor has a mediator associated with it to
transform
the data. The current mediator has a list of Transformers that act on the
data.
Is my understanding correct?
Yes, you're right. Mediator is backed by registered DataBinding(s) and
Transformer(s). It figures a path (potentially multiple hops) between the
source and target and flow source data over the path so that it can be
converted to the target format.
3. As I see all transformers are categoried as either Pull or Push based.
What does this mean?
There are two types of transformations depending on the target side. Let's
say a-->b, if b is something like a DOM Node, SDO DataObject, or
XMLStreamReader, then it's a pull style because the data is pulled from the
source. If b is a data sink, for example, SAX ContentHandler, OutputStream,
Writer, then it's a push style because the data is pushed into the target.
Pull-style transformers can natually chained together to form a path.
Push-style transformer can either be used to terminate the transformation or
it's further piped by DataPipe (which uses the PushTransformer to populate
data, for example, receive SAX events to create a SDO DataObject or DOM) so
that the chain can continue.
Examples:
SDO --> XMLStreamReader --> DOM
DOM --> SAX2SDOPipe (A ContentHandler provided by SDO) --> SDO
4. How does all these fit into together? Like can I know the flow when a
service is accessed or when we invoke on a reference?
For example what I am expecting is something like this. (I am familliar
with axis2, so let me use that as most of u guys are also familliar with
axis2)
SOAP msg --> TransportListerner --> in Handler chain --> MessageReceiver
--> Service implementation or your Bizz logic
Service Impl --> MessageReceiver --> out Handler chain -->
TransportSender --> SOAP msg
A flow diagram (simillar to above) of how Tuscant handles a service
invocation and invoking a reference is very helpfull.
Reference flow: Caller Component --|1|--> Tuscany SCA Reference with Axis2
binding --|2|--> Axis2 Client (AXIOM) --> SOAP/HTTP
|1|: DataBindingInterceptor converts the invocation message from the caller
component format to AXIOM.
|2|: During "build" phase, the Reference binding builder should make sure
the WSDL portType (if exists) used by the web service is mappable to the
interface declared inside the <reference> or derive the WSDL from other IDLs
such as Java interface.
Service flow: SOAP/HTTP --> Axis2Servlet (AXIOM) --|1|--> Message receiver
provided by Tuscany SCA Axis2 Service (WSDL portType) ---|2|--> Wired
component (Java interface with SDO or JAXB).
|1|: During "build" phase, the Service binding builder should make sure the
WSDL portType (if exists) used by the web service is mappable to the
interface declared inside the <service> or derive the WSDL from other IDLs
such as Java interface.
|2|: DataBindingInterceptor converts the invocation message from AXIOM to
the target component format.
Thanks in advance,
Rajith.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]