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]