Hi,

I debugged the issue and found out there are two databinding intecerptors added to the invocation chain. The main issue here is that we insert databinding interceptors independently for the reference side and service side. In your case,
the reference is defined as follows:

<component name="BPELHelloWorld">
<implementation.java class="helloworld.HelloWorld"/>
   <reference name="helloService" target="BPELHelloWorldService">
<interface.wsdl interface="http://tuscany.apache.org/implementation/bpel/example/helloworld.wsdl#wsdl.interface(HelloPortType)" />
   </reference>
</component>

a) The introspected type is a java interface for reference "helloService" but it's configured in the component definition with a WSDL portType. Since the java interface is bare style while the wsdl is doc-lit-wrapped, we add an interceptor for the reference side.

b) For the service wire, the target (bpel) service expects data for the wsdl portType. When we create an invoker for SCA binding, we set the source interface contract to the reference interface (which is a java interface). We add interceptor for the service side too.

So one workaround is to remove the <interface.wsdl> for reference. Then no databinding interceptor will be added because the interface contract of the component is the same as the one of the component type.

We need to bypass the interceptor for a) in case of the local optimization. We could fix that in SCAReferenceBindingProvider and SCAServiceBindingProvider.getBindingInterfaceContract() to return the interface contract on the component type.

I verified both the workaround and fix work. You can use the workaround 1st and I'll check in the fix after I come back from vacation next week.

Thanks,
Raymond

----- Original Message ----- From: "Luciano Resende" <[EMAIL PROTECTED]>
To: "tuscany-dev" <tuscany-dev@ws.apache.org>
Sent: Saturday, November 17, 2007 10:16 PM
Subject: Databinding transformation generating different invocation message


I have two components defined, A and B, and B has a Reference to A. If
I make a call to A.foo, there is only one databinding transformation
happening and I get the proper message on the implementation type
invoker :

<?xml version="1.0" encoding="UTF-8"?>
<message><TestPart><hello
xmlns="http://tuscany.apache.org/implementation/bpel/example/helloworld.wsdl";><message>Hello</message></hello></TestPart></message>

If I make a call to B.foo, it looks like the databinding
transformation is happening twice, and the message reaching the
implementation type invoker has wrong value :

<?xml version="1.0" encoding="UTF-8"?>
<message><TestPart><hello
xmlns="http://tuscany.apache.org/implementation/bpel/example/helloworld.wsdl";><message>[hello:
null]</message></hello></TestPart></message>

This can be reproduced by the two tests available in the
iTest/bpel/helloworld project.

I was expecting that both messages to be equal. Is my expectation
right ? Any ideas or suggestions ?



Any

--
Luciano Resende
Apache Tuscany Committer
http://people.apache.org/~lresende
http://lresende.blogspot.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to