Raymond,

It seems to me something go lost in the translation of Axis2ReferenceCallback 
from before to after the databinding framework, or at a minimum it did not get 
translated correctly.

As originally written, Axis2ReferenceCallback is the object that is given to 
the Axis2 operation client as its callback object. As such, it receives an 
AsyncResult containing an Axis2 MessageContext. Originally, and following the 
pattern of Axis2TargetInvoker, it asked the databinding to translate the 
contents of the MessageContext (assumed to be an OMElement), which it then 
handed to the Axis2ReferenceCallbackTargetInvoker. This latter object assumes 
the OMElement has been translated and invokes its target via its parent 
PojoTargetInvoker. The target here being the Axis2Reference itself, so the 
invocation merely calls the callback invocation handler on the Axis2Reference's 
inbound wire.

As it stands now, all Axis2ReferenceCallback does is take the OMElement and 
hand it to the Axis2ReferenceCallbackTargetInvoker, the translation code is 
gone, presumably factored out into the databinding interceptor. However, there 
does not seem to be any such intervening interceptor. >From here on nothing has 
changed, so the Axis2ReferenceCallbackTargetInvoker still assumes that the 
OMElement has been translated.

Notice that since originally the Axis2Reference had no outbound wire, the 
Axis2ReferenceCallbackTargetInvoker did not have a chain preceding it. In fact, 
Axis2ReferenceCallbackTargetInvoker would not even exist did it not have to 
extend the behavior of o.a.axis2.client.async.Callback and do something very 
similar to what PojoTargetInvoker does to trigger the Axis2Reference's inbound 
wire callback invocation handler. Since it can't extend two classes, it seemed 
to make sense to make it a target invoker but the intention was not to have it 
be part of an outbound wire that did not exist.

Now that there is an outbound wire, it seems like what needs to happen is as 
follows:
1- Axis2ReferenceCallback is called by the Axis2 operation client
2- (Some magic happens here) Axis2ReferenceCallback somehow triggers the 
outbound wire's inbound chain of interceptors, which hopefully can include a 
databinding interceptor. Not sure how to set this up
3- Axis2ReferenceCallbackTargetInvoker sits at the end of the chain and gets 
invoked with a translated OMElement. For this point on it can assume this has 
happened. Again, not sure how to get this set up.

Does this sound like it could work, and like what you had in mind?

Reply via email to