You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/10/27 19:11:48 UTC

svn commit: r589154 [1/2] - in /incubator/tuscany/java/sca: itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/ itest/osgi-implementation/src/test/java/supplychain/ itest/osgi-implementation/src/test/java/supplychain/factory/ itest/...

Author: rfeng
Date: Sat Oct 27 10:11:44 2007
New Revision: 589154

URL: http://svn.apache.org/viewvc?rev=589154&view=rev
Log:
Improvements in the databinding area:
* Support array types as the java arguments or return type
* Consider the introspected type for java2wsdl generation
* Have the databinding to honor default elements

Added:
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java   (with props)
Modified:
    incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponent.java
    incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponentImpl.java
    incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/VersionedSupplyChainTestCase.java
    incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/factory/FactoryTestCase.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldImpl.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldService.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldServiceComponent.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2aImpl.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2bImpl.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3aImpl.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3bImpl.java
    incubator/tuscany/java/sca/itest/wsdlless/src/main/resources/wsdl/helloworld.wsdl
    incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/WSDLTestCase.java
    incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelper.java
    incubator/tuscany/java/sca/modules/binding-ws-axis2/src/test/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelperTestCase.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java
    incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2Node.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2String.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2XMLStreamReader.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/XML2JavaBeanTransformer.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderImpl.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLGroupDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding
    incubator/tuscany/java/sca/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
    incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/TransformerRegistryImplTestCase.java
    incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/xml/BeanXMLStreamReaderTestCase.java
    incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementationProvider.java
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLOperationIntrospectorImpl.java
    incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
    incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/ElementInfo.java
    incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
    incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/XMLType.java
    incubator/tuscany/java/sca/samples/quote-xquery/src/main/resources/META-INF/sca/quote_join.xq

Modified: incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponent.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponent.java (original)
+++ incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponent.java Sat Oct 27 10:11:44 2007
@@ -33,4 +33,6 @@
     void modifyParameter();
 
     ParameterObject getPO();
+    
+    String[] bar(int[][] intArray);
 }

Modified: incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponentImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponentImpl.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponentImpl.java (original)
+++ incubator/tuscany/java/sca/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/RemoteServiceComponentImpl.java Sat Oct 27 10:11:44 2007
@@ -47,4 +47,8 @@
         return po;
     }
 
+    public String[] bar(int[][] intArray) {
+        return new String[] {"int"};
+    }
+
 }

Modified: incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/VersionedSupplyChainTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/VersionedSupplyChainTestCase.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/VersionedSupplyChainTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/VersionedSupplyChainTestCase.java Sat Oct 27 10:11:44 2007
@@ -43,7 +43,7 @@
     
     protected void tearDown() throws Exception {
         super.tearDown();
-        Thread.sleep(1000);
+        Thread.sleep(2000);
     }
    
     public void test() throws Exception {

Modified: incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/factory/FactoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/factory/FactoryTestCase.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/factory/FactoryTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/osgi-implementation/src/test/java/supplychain/factory/FactoryTestCase.java Sat Oct 27 10:11:44 2007
@@ -44,7 +44,7 @@
         customer.purchaseGames();       
         assertFalse(customer.hasOutstandingOrders());
 
-        Thread.sleep(1000);
+        Thread.sleep(2000);
         System.out.println("Test complete");
         
     }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldImpl.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldImpl.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldImpl.java Sat Oct 27 10:11:44 2007
@@ -30,4 +30,15 @@
         return "Hi " + name;
     }
 
+    public String[] getMultipleGreetings(String[] names) {
+        if(names==null) {
+            return null;
+        } 
+        String[] greetings = new String[names.length];
+        for(int i=0; i<names.length;i++) {
+            greetings[i] = "Hi "+names[i];
+        }
+        return greetings;
+    }
+
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldService.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldService.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldService.java Sat Oct 27 10:11:44 2007
@@ -27,4 +27,5 @@
 public interface HelloWorldService {
 
     public String getGreetings(String name);
+    public String[] getMultipleGreetings(String[] names);
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldServiceComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldServiceComponent.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldServiceComponent.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/helloworld/HelloWorldServiceComponent.java Sat Oct 27 10:11:44 2007
@@ -40,4 +40,8 @@
     public void setHelloWorldService(HelloWorldService helloWorldService) {
         this.helloWorldService = helloWorldService;
     }
+
+    public String[] getMultipleGreetings(String[] names) {
+        return helloWorldService.getMultipleGreetings(names);
+    }
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2aImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2aImpl.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2aImpl.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2aImpl.java Sat Oct 27 10:11:44 2007
@@ -34,5 +34,10 @@
     public String getGreetings(String s) {
         return comp.getGreetings(s);
     }
+    
+    public String[] getMultipleGreetings(String[] names) {
+        return comp.getMultipleGreetings(names);
+    }
+
 
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2bImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2bImpl.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2bImpl.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component2bImpl.java Sat Oct 27 10:11:44 2007
@@ -35,5 +35,8 @@
     public String getGreetings(String s) {
         return comp.getGreetings(s);
     }
+    public String[] getMultipleGreetings(String[] names) {
+        return comp.getMultipleGreetings(names);
+    }
 
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3aImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3aImpl.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3aImpl.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3aImpl.java Sat Oct 27 10:11:44 2007
@@ -35,5 +35,8 @@
     public String getGreetings(String s) {
         return comp.getGreetings(s);
     }
+    public String[] getMultipleGreetings(String[] names) {
+        return comp.getMultipleGreetings(names);
+    }
 
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3bImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3bImpl.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3bImpl.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/java/org/apache/tuscany/sca/itest/Component3bImpl.java Sat Oct 27 10:11:44 2007
@@ -36,4 +36,8 @@
         return comp.getGreetings(s);
     }
 
+    public String[] getMultipleGreetings(String[] names) {
+        return comp.getMultipleGreetings(names);
+    }
+
 }

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/main/resources/wsdl/helloworld.wsdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/main/resources/wsdl/helloworld.wsdl?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/main/resources/wsdl/helloworld.wsdl (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/main/resources/wsdl/helloworld.wsdl Sat Oct 27 10:11:44 2007
@@ -1,80 +1,131 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.    
+	* Licensed to the Apache Software Foundation (ASF) under one
+	* or more contributor license agreements.  See the NOTICE file
+	* distributed with this work for additional information
+	* regarding copyright ownership.  The ASF licenses this file
+	* to you under the Apache License, Version 2.0 (the
+	* "License"); you may not use this file except in compliance
+	* with the License.  You may obtain a copy of the License at
+	* 
+	*   http://www.apache.org/licenses/LICENSE-2.0
+	* 
+	* Unless required by applicable law or agreed to in writing,
+	* software distributed under the License is distributed on an
+	* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+	* KIND, either express or implied.  See the License for the
+	* specific language governing permissions and limitations
+	* under the License.    
 -->
-<wsdl:definitions targetNamespace="http://helloworld" xmlns:tns="http://helloworld" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	name="helloworld">
-
-    <wsdl:types>
-        <schema elementFormDefault="qualified" targetNamespace="http://helloworld" xmlns="http://www.w3.org/2001/XMLSchema">
-
-            <element name="getGreetings">
-                <complexType>
-                    <sequence>
-                        <element name="name" type="xsd:string"/>
-                    </sequence>
-                </complexType>
-            </element>
-
-            <element name="getGreetingsResponse">
-                <complexType>
-                    <sequence>
-                        <element name="getGreetingsReturn" type="xsd:string"/>
-                    </sequence>
-                </complexType>
-            </element>
-            
-        </schema>
-    </wsdl:types>
-
-    <wsdl:message name="getGreetingsRequest">
-        <wsdl:part element="tns:getGreetings" name="parameters"/>
-    </wsdl:message>
-
-    <wsdl:message name="getGreetingsResponse">
-        <wsdl:part element="tns:getGreetingsResponse" name="parameters"/>
-    </wsdl:message>
-
-    <wsdl:portType name="HelloWorld">
-        <wsdl:operation name="getGreetings">
-            <wsdl:input message="tns:getGreetingsRequest" name="getGreetingsRequest"/>
-            <wsdl:output message="tns:getGreetingsResponse" name="getGreetingsResponse"/>
-        </wsdl:operation>
-    </wsdl:portType>
-
-    <wsdl:binding name="HelloWorldSoapBinding" type="tns:HelloWorld">
-        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
-        <wsdl:operation name="getGreetings">
-            <wsdlsoap:operation soapAction=""/>
-            <wsdl:input name="getGreetingsRequest">
-                <wsdlsoap:body use="literal"/>
-            </wsdl:input>
-            <wsdl:output name="getGreetingsResponse">
-                <wsdlsoap:body use="literal"/>
-            </wsdl:output>
-        </wsdl:operation>
-
-    </wsdl:binding>
-
-    <wsdl:service name="HelloWorldService">
-        <wsdl:port binding="tns:HelloWorldSoapBinding" name="HelloWorldSoapPort">
-            <wsdlsoap:address location=""/>
-        </wsdl:port>
-    </wsdl:service>
+<wsdl:definitions targetNamespace="http://helloworld"
+	xmlns:tns="http://helloworld"
+	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="helloworld">
+
+	<wsdl:types>
+		<schema elementFormDefault="qualified"
+			targetNamespace="http://helloworld"
+			xmlns="http://www.w3.org/2001/XMLSchema">
+
+			<element name="getGreetings">
+				<complexType>
+					<sequence>
+						<element name="name" type="xsd:string" />
+					</sequence>
+				</complexType>
+			</element>
+
+			<element name="getGreetingsResponse">
+				<complexType>
+					<sequence>
+						<element name="getGreetingsReturn"
+							type="xsd:string" />
+					</sequence>
+				</complexType>
+			</element>
+
+			<element name="getMultipleGreetings">
+				<complexType>
+					<sequence>
+						<element name="name" type="xsd:string"
+							maxOccurs="unbounded" />
+					</sequence>
+				</complexType>
+			</element>
+
+			<element name="getMultipleGreetingsResponse">
+				<complexType>
+					<sequence>
+						<element name="getGreetingsReturn"
+							type="xsd:string" maxOccurs="unbounded" />
+					</sequence>
+				</complexType>
+			</element>
+		</schema>
+	</wsdl:types>
+
+	<wsdl:message name="getGreetingsRequest">
+		<wsdl:part element="tns:getGreetings" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="getGreetingsResponse">
+		<wsdl:part element="tns:getGreetingsResponse" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="getMultipleGreetingsRequest">
+		<wsdl:part element="tns:getMultipleGreetings" name="parameters" />
+	</wsdl:message>
+
+	<wsdl:message name="getMultipleGreetingsResponse">
+		<wsdl:part element="tns:getMultipleGreetingsResponse"
+			name="parameters" />
+	</wsdl:message>
+
+	<wsdl:portType name="HelloWorld">
+		<wsdl:operation name="getGreetings">
+			<wsdl:input message="tns:getGreetingsRequest"
+				name="getGreetingsRequest" />
+			<wsdl:output message="tns:getGreetingsResponse"
+				name="getGreetingsResponse" />
+		</wsdl:operation>
+		<wsdl:operation name="getMultipleGreetings">
+			<wsdl:input message="tns:getMultipleGreetingsRequest"
+				name="getMultipleGreetingsRequest" />
+			<wsdl:output message="tns:getMultipleGreetingsResponse"
+				name="getMultipleGreetingsResponse" />
+		</wsdl:operation>
+
+	</wsdl:portType>
+
+	<wsdl:binding name="HelloWorldSoapBinding" type="tns:HelloWorld">
+		<wsdlsoap:binding style="document"
+			transport="http://schemas.xmlsoap.org/soap/http" />
+		<wsdl:operation name="getGreetings">
+			<wsdlsoap:operation soapAction="" />
+			<wsdl:input name="getGreetingsRequest">
+				<wsdlsoap:body use="literal" />
+			</wsdl:input>
+			<wsdl:output name="getGreetingsResponse">
+				<wsdlsoap:body use="literal" />
+			</wsdl:output>
+		</wsdl:operation>
+		<wsdl:operation name="getMultipleGreetings">
+			<wsdlsoap:operation soapAction="" />
+			<wsdl:input name="getMultipleGreetingsRequest">
+				<wsdlsoap:body use="literal" />
+			</wsdl:input>
+			<wsdl:output name="getMultipleGreetingsResponse">
+				<wsdlsoap:body use="literal" />
+			</wsdl:output>
+		</wsdl:operation>
+	</wsdl:binding>
+
+	<wsdl:service name="HelloWorldService">
+		<wsdl:port binding="tns:HelloWorldSoapBinding"
+			name="HelloWorldSoapPort">
+			<wsdlsoap:address location="" />
+		</wsdl:port>
+	</wsdl:service>
 
 </wsdl:definitions>

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/WSDLTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/WSDLTestCase.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/WSDLTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/WSDLTestCase.java Sat Oct 27 10:11:44 2007
@@ -42,6 +42,10 @@
     public void testClient1a2a3a4a() {
         HelloWorldService client = domain.getService(HelloWorldService.class, "Client1a2a3a4a");
         assertEquals("Hi petra", client.getGreetings("petra"));
+        String[] greetings = client.getMultipleGreetings(new String[] {"John", "Smith"});
+        assertEquals(2, greetings.length);
+        assertEquals("Hi John", greetings[0]);
+        assertEquals("Hi Smith", greetings[1]);
     }
 
     @Test

Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelper.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelper.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelper.java Sat Oct 27 10:11:44 2007
@@ -25,6 +25,7 @@
 import java.lang.reflect.Method;
 import java.net.URI;
 import java.net.URL;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -47,6 +48,7 @@
 import javax.wsdl.extensions.schema.Schema;
 import javax.wsdl.xml.WSDLLocator;
 import javax.wsdl.xml.WSDLReader;
+import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
@@ -54,6 +56,7 @@
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.apache.tuscany.sca.interfacedef.wsdl.DefaultWSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
@@ -82,13 +85,42 @@
  */
 public class Java2WSDLHelper {
 
+    private static void register(Map<String, String> map, DataType type) {
+        if (type == null) {
+            return;
+        }
+        Package pkg = type.getPhysical().getPackage();
+        if (pkg != null) {
+            String pkgName = pkg.getName();
+            Object logical = type.getLogical();
+            if (logical instanceof XMLType) {
+                QName typeName = ((XMLType)logical).getTypeName();
+                if (typeName != null && !XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(typeName.getNamespaceURI())) {
+                    map.put(pkgName, typeName.getNamespaceURI());
+                }
+            }
+        }
+    }
+
     /**
      * Create a WSDLInterfaceContract from a JavaInterfaceContract
      */
     public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
                                                                     WebServiceBinding wsBinding) {
         JavaInterface iface = (JavaInterface)contract.getInterface();
-        Definition def = Java2WSDLHelper.createDefinition(iface.getJavaClass(), wsBinding);
+        
+        // Create a package2ns map
+        Map<String, String> pkg2nsMap = new HashMap<String, String>();
+        for (Operation op : iface.getOperations()) {
+            DataType<List<DataType>> inputType = op.getInputType();
+            for (DataType t : inputType.getLogical()) {
+                register(pkg2nsMap, t);
+            }
+            DataType outputType = op.getOutputType();
+            register(pkg2nsMap, outputType);
+        }
+
+        Definition def = createDefinition(pkg2nsMap, iface.getJavaClass(), wsBinding);
 
         DefaultWSDLFactory wsdlFactory = new DefaultWSDLFactory();
 
@@ -113,7 +145,10 @@
                 javax.wsdl.Operation wsdlOp = portType.getOperation(op.getName(), null, null);
                 WSDLOperationIntrospectorImpl opx =
                     new WSDLOperationIntrospectorImpl(wsdlFactory, wsdlOp, wsdlDefinition, null, null);
+                
+                wsdlInterface.getOperations().add(opx.getOperation());
 
+                /*
                 Operation clonedOp = (Operation)op.clone();
                 clonedOp.setDataBinding(null);
 
@@ -135,9 +170,8 @@
                 clonedOp.setWrapper(opx.getWrapper().getWrapperInfo());
 
                 wsdlInterface.getOperations().add(clonedOp);
+                */
             }
-        } catch (CloneNotSupportedException e) {
-            throw new RuntimeException(e);
         } catch (InvalidWSDLException e) {
             throw new RuntimeException(e);
         }
@@ -234,12 +268,15 @@
     /**
      * Create a WSDL4J Definition object from a Java interface
      */
-    protected static Definition createDefinition(Class<?> javaInterface, WebServiceBinding wsBinding) {
+    protected static Definition createDefinition(Map map, Class<?> javaInterface, WebServiceBinding wsBinding) {
 
         String className = javaInterface.getName();
         ClassLoader cl = javaInterface.getClassLoader();
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         Java2WSDLBuilder builder = new Java2WSDLBuilder(os, className, cl);
+        if (map != null) {
+            builder.setPkg2nsMap(map);
+        }
 
         try {
             builder.generateWSDL();

Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/test/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/test/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelperTestCase.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/test/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelperTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/test/java/org/apache/tuscany/sca/binding/ws/axis2/Java2WSDLHelperTestCase.java Sat Oct 27 10:11:44 2007
@@ -36,7 +36,7 @@
 public class Java2WSDLHelperTestCase extends TestCase {
 
     public void testCreateDefinition() {
-        Definition definition = Java2WSDLHelper.createDefinition(HelloWorld.class, null);
+        Definition definition = Java2WSDLHelper.createDefinition(null, HelloWorld.class, null);
         assertNotNull(definition);
 
         Map portTypes = definition.getPortTypes();

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java Sat Oct 27 10:11:44 2007
@@ -23,6 +23,7 @@
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ModuleActivator;
 import org.apache.tuscany.sca.core.databinding.processor.DataBindingJavaInterfaceProcessor;
+import org.apache.tuscany.sca.core.databinding.transformers.Array2ArrayTransformer;
 import org.apache.tuscany.sca.core.databinding.transformers.Exception2ExceptionTransformer;
 import org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer;
 import org.apache.tuscany.sca.core.databinding.transformers.Output2OutputTransformer;
@@ -55,6 +56,10 @@
         Exception2ExceptionTransformer exception2ExceptionTransformer = new Exception2ExceptionTransformer();
         exception2ExceptionTransformer.setMediator(mediator);
         transformers.addTransformer(exception2ExceptionTransformer);
+        
+        Array2ArrayTransformer array2ArrayTransformer = new Array2ArrayTransformer();
+        array2ArrayTransformer.setMediator(mediator);
+        transformers.addTransformer(array2ArrayTransformer);
 
         Group2GroupTransformer group2GroupTransformer = new Group2GroupTransformer();
         group2GroupTransformer.setMediator(mediator);

Added: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java?rev=589154&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java (added)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java Sat Oct 27 10:11:44 2007
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.core.databinding.transformers;
+
+import java.lang.reflect.Array;
+
+import org.apache.tuscany.sca.databinding.Mediator;
+import org.apache.tuscany.sca.databinding.PullTransformer;
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.TransformationException;
+import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.osoa.sca.annotations.Reference;
+
+/**
+ * This is a special transformer to transform the output from one IDL to the
+ * other one
+ */
+public class Array2ArrayTransformer extends BaseTransformer<Object, Object> implements PullTransformer<Object, Object> {
+
+    protected Mediator mediator;
+
+    public Array2ArrayTransformer() {
+        super();
+    }
+
+    /**
+     * @param mediator the mediator to set
+     */
+    @Reference
+    public void setMediator(Mediator mediator) {
+        this.mediator = mediator;
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return "java:array";
+    }
+
+    @Override
+    public String getTargetDataBinding() {
+        return "java:array";
+    }
+
+    /**
+     * @see org.apache.tuscany.sca.databinding.impl.BaseTransformer#getSourceType()
+     */
+    @Override
+    protected Class getSourceType() {
+        return Object.class;
+    }
+
+    /**
+     * @see org.apache.tuscany.sca.databinding.impl.BaseTransformer#getTargetType()
+     */
+    @Override
+    protected Class getTargetType() {
+        return Object.class;
+    }
+
+    /**
+     * @see org.apache.tuscany.sca.databinding.Transformer#getWeight()
+     */
+    @Override
+    public int getWeight() {
+        return 10;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Object transform(Object array, TransformationContext context) {
+        try {
+            if (array == null) {
+                return null;
+            }
+            DataType<DataType> sourceType = context.getSourceDataType();
+            DataType<DataType> targetType = context.getTargetDataType();
+            int length = Array.getLength(array);
+            Object targetArray = Array.newInstance(targetType.getPhysical().getComponentType(), length);
+            for (int i = 0; i < length; i++) {
+                Object sourceItem = Array.get(array, i);
+                Object targetItem =
+                    mediator.mediate(sourceItem, sourceType.getLogical(), targetType.getLogical(), context
+                        .getMetadata());
+                Array.set(targetArray, i, targetItem);
+            }
+            return targetArray;
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java Sat Oct 27 10:11:44 2007
@@ -24,17 +24,14 @@
 import org.apache.tuscany.sca.databinding.Mediator;
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.TransformationContext;
-import org.apache.tuscany.sca.databinding.Transformer;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.osoa.sca.annotations.Reference;
-import org.osoa.sca.annotations.Service;
 
 /**
  * This is a special transformer to transform the exception from one IDL to the
  * other one
  */
-@Service(Transformer.class)
 public class Exception2ExceptionTransformer extends BaseTransformer<Object[], Object[]> implements
     PullTransformer<Exception, Exception> {
 

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java Sat Oct 27 10:11:44 2007
@@ -27,7 +27,6 @@
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
-import org.apache.tuscany.sca.databinding.Transformer;
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
 import org.apache.tuscany.sca.interfacedef.DataType;
@@ -36,13 +35,11 @@
 import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.osoa.sca.annotations.Reference;
-import org.osoa.sca.annotations.Service;
 
 /**
  * This is a special transformer to transform the input from one IDL to the
  * other one
  */
-@Service(Transformer.class)
 public class Input2InputTransformer extends BaseTransformer<Object[], Object[]> implements
     PullTransformer<Object[], Object[]> {
     private static final Logger logger = Logger.getLogger(Input2InputTransformer.class.getName());

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java Sat Oct 27 10:11:44 2007
@@ -25,7 +25,6 @@
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
-import org.apache.tuscany.sca.databinding.Transformer;
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
 import org.apache.tuscany.sca.interfacedef.DataType;
@@ -34,13 +33,11 @@
 import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.osoa.sca.annotations.Reference;
-import org.osoa.sca.annotations.Service;
 
 /**
  * This is a special transformer to transform the output from one IDL to the
  * other one
  */
-@Service(Transformer.class)
 public class Output2OutputTransformer extends BaseTransformer<Object, Object> implements
     PullTransformer<Object, Object> {
 

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java Sat Oct 27 10:11:44 2007
@@ -50,7 +50,7 @@
     private Operation sourceOperation;
 
     private Operation targetOperation;
-
+    private RuntimeWire wire;
     private Mediator mediator;
 
     public DataTransformationInterceptor(RuntimeWire wire,
@@ -61,6 +61,7 @@
         this.sourceOperation = sourceOperation;
         this.targetOperation = targetOperation;
         this.mediator = mediator;
+        this.wire = wire;
     }
 
     public Invoker getNext() {
@@ -170,6 +171,7 @@
         Map<String, Object> metadata = new HashMap<String, Object>();
         metadata.put("source.operation", isResponse ? targetOperation : sourceOperation);
         metadata.put("target.operation", isResponse ? sourceOperation : targetOperation);
+        metadata.put("wire", wire);
         return mediator.mediate(source, sourceType, targetType, metadata);
     }
 
@@ -239,7 +241,7 @@
         Map<String, Object> metadata = new HashMap<String, Object>();
         metadata.put("source.operation", targetOperation);
         metadata.put("target.operation", sourceOperation);
-
+        metadata.put("wire", wire);
         DataType<DataType> eSourceDataType =
             new DataTypeImpl<DataType>("idl:fault", sourceExType.getPhysical(), sourceType);
         DataType<DataType> eTargetDataType =

Modified: incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java Sat Oct 27 10:11:44 2007
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Set;
 
+import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMAbstractFactory;
@@ -58,12 +59,28 @@
     }
 
     public void setChild(OMElement wrapper, int i, ElementInfo childElement, Object value) {
-        OMElement element = (OMElement)value;
+        if (childElement.isMany()) {
+            Object[] elements = (Object[])value;
+            if (value != null) {
+                for (Object e : elements) {
+                    addChild(wrapper, childElement, (OMElement)e);
+                }
+            }
+        } else {
+            OMElement element = (OMElement)value;
+            addChild(wrapper, childElement, element);
+        }
+    }
+
+    private void addChild(OMElement wrapper, ElementInfo childElement, OMElement element) {
         QName elementName = childElement.getQName();
-        OMNamespace namespace = factory.createOMNamespace(elementName.getNamespaceURI(), elementName.getPrefix());
-        element.setNamespace(namespace);
-        element.setLocalName(childElement.getQName().getLocalPart());
-        wrapper.addChild((OMElement)value);
+        // Make it a bit tolerating of element QName 
+        if (!elementName.equals(element.getQName())) {
+            OMNamespace namespace = factory.createOMNamespace(elementName.getNamespaceURI(), elementName.getPrefix());
+            element.setNamespace(namespace);
+            element.setLocalName(childElement.getQName().getLocalPart());
+        }
+        wrapper.addChild(element);
     }
 
     public List getChildren(OMElement wrapper, List<ElementInfo> childElements, TransformationContext context) {
@@ -108,39 +125,92 @@
 
     private static final QName XSI_TYPE_QNAME = new QName("http://www.w3.org/2001/XMLSchema-instance", "type", "xsi");
 
-    public Object getChild(OMElement wrapper, ElementInfo childElement, int index, TransformationContext context) {
-        int pos = 0;
-        String wrapperNS = wrapper.getQName().getNamespaceURI();
+    private List<List<OMElement>> getElements(OMElement wrapper) {
+        List<List<OMElement>> elements = new ArrayList<List<OMElement>>();
+        List<OMElement> current = new ArrayList<OMElement>();
+        elements.add(current);
+        boolean first = true;
+        QName last = null;
+
         for (Iterator i = wrapper.getChildElements(); i.hasNext();) {
-            OMElement e = (OMElement)i.next();
-            if (pos == index) {
-                TypeInfo type = childElement.getType();
-                if (!childElement.getQName().equals(e.getQName()) && type != null) {
-                    OMAttribute attr = e.getAttribute(XSI_TYPE_QNAME);
-                    if (attr == null) {
-                        String typeNS = type.getQName().getNamespaceURI();
-                        if (wrapperNS != null) {
-                            // FIXME: [rfeng] Workaround for TUSCANY-1713, assuming the type
-                            // namespace is the same as the wrapper
-                            typeNS = wrapperNS;
-                        }
-                        OMNamespace ns = e.getOMFactory().createOMNamespace(typeNS, "_typens_");
-                        e.declareNamespace(ns);
-                        OMNamespace xsiNS =
-                            e.getOMFactory().createOMNamespace(XSI_TYPE_QNAME.getNamespaceURI(),
-                                                               XSI_TYPE_QNAME.getPrefix());
-                        e.declareNamespace(xsiNS);
-                        attr =
-                            e.getOMFactory().createOMAttribute("type",
-                                                               xsiNS,
-                                                               "_typens_:" + type.getQName().getLocalPart());
-                        e.addAttribute(attr);
-                    }
+            OMElement element = (OMElement)i.next();
+            if (first || element.getQName().equals(last)) {
+                current.add(element);
+                last = element.getQName();
+            } else {
+                current = new ArrayList<OMElement>();
+                elements.add(current);
+                current.add(element);
+                last = element.getQName();
+            }
+            first = false;
+        }
+        return elements;
+    }
+
+    public Object getChild(OMElement wrapper, ElementInfo childElement, int index, TransformationContext context) {
+        Iterator children = wrapper.getChildrenWithName(childElement.getQName());
+        if (!children.hasNext()) {
+            // No name match, try by index
+            List<List<OMElement>> list = getElements(wrapper);
+            List<OMElement> elements = list.get(index);
+            if (!childElement.isMany()) {
+                return elements.isEmpty() ? null : attachXSIType(childElement, elements.get(0));
+            } else {
+                Object[] array = elements.toArray();
+                for (Object item : array) {
+                    attachXSIType(childElement, (OMElement)item);
+                }
+                return array;
+            }
+        }
+        if (!childElement.isMany()) {
+            if (children.hasNext()) {
+                OMElement child = (OMElement)children.next();
+                attachXSIType(childElement, child);
+                return child;
+            } else {
+                return null;
+            }
+        } else {
+            List<OMElement> elements = new ArrayList<OMElement>();
+            for (; children.hasNext();) {
+                OMElement child = (OMElement)children.next();
+                attachXSIType(childElement, child);
+                elements.add(child);
+            }
+            return elements.toArray();
+        }
+    }
+
+    /**
+     * Create xis:type if required 
+     * @param childElement
+     * @param element
+     * @return
+     */
+    private OMElement attachXSIType(ElementInfo childElement, OMElement element) {
+        TypeInfo type = childElement.getType();
+        if (type != null) {
+            OMAttribute attr = element.getAttribute(XSI_TYPE_QNAME);
+            if (attr == null) {
+                String typeNS = type.getQName().getNamespaceURI();
+                if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(typeNS)) {
+                    return element;
                 }
-                return e;
+                OMNamespace ns = element.getOMFactory().createOMNamespace(typeNS, "_typens_");
+                element.declareNamespace(ns);
+                OMNamespace xsiNS =
+                    element.getOMFactory().createOMNamespace(XSI_TYPE_QNAME.getNamespaceURI(),
+                                                             XSI_TYPE_QNAME.getPrefix());
+                element.declareNamespace(xsiNS);
+                attr =
+                    element.getOMFactory().createOMAttribute("type",
+                                                             xsiNS,
+                                                             "_typens_:" + type.getQName().getLocalPart());
+                element.addAttribute(attr);
             }
-            pos++;
         }
-        return null;
+        return element;
     }
 }

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java Sat Oct 27 10:11:44 2007
@@ -70,7 +70,9 @@
                     }
                 }
             }
-            dataType.setLogical(XMLType.UNKNOWN);
+            if (dataType.getLogical() == null) {
+                dataType.setLogical(XMLType.UNKNOWN);
+            }
             dataType.setDataBinding(getName());
             return true;
         }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer Sat Oct 27 10:11:44 2007
@@ -18,6 +18,6 @@
 # Implementation classes for the transformers
 org.apache.tuscany.sca.databinding.json.JSON2XMLStreamReader;source=org.codehaus.jettison.json.JSONObject,target=javax.xml.stream.XMLStreamReader,weight=500
 org.apache.tuscany.sca.databinding.json.XMLStreamReader2JSON;source=javax.xml.stream.XMLStreamReader,target=org.codehaus.jettison.json.JSONObject,weight=500
-org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java.lang.Object,target=org.codehaus.jettison.json.JSONObject,weight=80000
+org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:complexType,target=org.codehaus.jettison.json.JSONObject,weight=80000
 org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:simpleType,target=org.codehaus.jettison.json.JSONObject,weight=80000
 org.apache.tuscany.sca.databinding.json.axiom.JSON2OMElement;source=org.codehaus.jettison.json.JSONObject,target=org.apache.axiom.om.OMElement,weight=500

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java Sat Oct 27 10:11:44 2007
@@ -24,6 +24,7 @@
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
+import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
 
 /**
  * Transforms generic java objects to Value objects needed by Saxon parser
@@ -39,6 +40,11 @@
     @Override
     protected Class getTargetType() {
         return Value.class;
+    }
+    
+    @Override
+    public String getSourceDataBinding() {
+        return JavaBeansDataBinding.NAME;
     }
 
     @Override

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java Sat Oct 27 10:11:44 2007
@@ -24,7 +24,6 @@
 
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
-import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
  * Represents data binding for parameters of type NodeInfo
@@ -44,7 +43,7 @@
     @Override
     public boolean introspect(DataType type, Annotation[] annotations) {
         if (super.introspect(type, annotations)) {
-            type.setLogical(XMLType.UNKNOWN);
+            // type.setLogical(XMLType.UNKNOWN);
             return true;
         } else {
             return false;

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java Sat Oct 27 10:11:44 2007
@@ -24,7 +24,6 @@
 
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
-import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
  * Represents data binding for parameters of type Value
@@ -43,7 +42,7 @@
     @Override
     public boolean introspect(DataType type, Annotation[] annotations) {
         if (super.introspect(type, annotations)) {
-            type.setLogical(XMLType.UNKNOWN);
+            // type.setLogical(XMLType.UNKNOWN);
             return true;
         } else {
             return false;

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java Sat Oct 27 10:11:44 2007
@@ -25,6 +25,7 @@
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
+import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
 
 /**
  * Transforms Value objects to generic java objects
@@ -50,6 +51,11 @@
     @Override
     protected Class getTargetType() {
         return Object.class;
+    }
+    
+    @Override
+    public String getTargetDataBinding() {
+        return JavaBeansDataBinding.NAME;
     }
 
     @Override

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer Sat Oct 27 10:11:44 2007
@@ -16,12 +16,11 @@
 # under the License.
 
 # Implementation classes for the transformers
-# Temporarily disable the NodeInfo <--> Node transformers
 org.apache.tuscany.sca.databinding.saxon.Node2NodeInfoTransformer;source=org.w3c.dom.Node,target=net.sf.saxon.om.NodeInfo,weight=2000
 org.apache.tuscany.sca.databinding.saxon.NodeInfo2NodeTransformer;source=net.sf.saxon.om.NodeInfo,target=org.w3c.dom.Node,weight=2000
-org.apache.tuscany.sca.databinding.saxon.Object2ValueTransformer;source=java.lang.Object,target=net.sf.saxon.value.Value,weight=10000
-org.apache.tuscany.sca.databinding.saxon.Value2ObjectTransformer;source=net.sf.saxon.value.Value,target=java.lang.Object,weight=10000
-org.apache.tuscany.sca.databinding.saxon.SimpleType2ValueTransformer;source=java:simpleType,target=net.sf.saxon.value.Value,weight=10000
-org.apache.tuscany.sca.databinding.saxon.Value2SimpleTypeTransformer;source=net.sf.saxon.value.Value,target=java:simpleType,weight=10000
-org.apache.tuscany.sca.databinding.saxon.NodeInfo2DataObjectTransformer;source=net.sf.saxon.om.NodeInfo,target=commonj.sdo.DataObject,weight=500
-org.apache.tuscany.sca.databinding.saxon.DataObject2NodeInfoTransformer;source=commonj.sdo.DataObject,target=net.sf.saxon.om.NodeInfo,weight=500
+org.apache.tuscany.sca.databinding.saxon.Object2ValueTransformer;source=java:complexType,target=net.sf.saxon.value.Value,weight=80000
+org.apache.tuscany.sca.databinding.saxon.Value2ObjectTransformer;source=net.sf.saxon.value.Value,target=java:complexType,weight=80000
+org.apache.tuscany.sca.databinding.saxon.SimpleType2ValueTransformer;source=java:simpleType,target=net.sf.saxon.value.Value,weight=80000
+org.apache.tuscany.sca.databinding.saxon.Value2SimpleTypeTransformer;source=net.sf.saxon.value.Value,target=java:simpleType,weight=80000
+org.apache.tuscany.sca.databinding.saxon.NodeInfo2DataObjectTransformer;source=net.sf.saxon.om.NodeInfo,target=commonj.sdo.DataObject,weight=1000
+org.apache.tuscany.sca.databinding.saxon.DataObject2NodeInfoTransformer;source=commonj.sdo.DataObject,target=net.sf.saxon.om.NodeInfo,weight=1000

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2Node.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2Node.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2Node.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2Node.java Sat Oct 27 10:11:44 2007
@@ -41,7 +41,7 @@
         try {
             HelperContext helperContext = SDOContextHelper.getHelperContext(context);
             XMLHelper xmlHelper = helperContext.getXMLHelper();
-            QName elementName = SDOContextHelper.getElement(context.getSourceDataType());
+            QName elementName = SDOContextHelper.getElement(context);
             Document doc = DOMHelper.newDocument();
             DOMResult result = new DOMResult(doc);
             XMLDocument xmlDoc = xmlHelper.createDocument(source, elementName.getNamespaceURI(), elementName.getLocalPart());

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2String.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2String.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2String.java Sat Oct 27 10:11:44 2007
@@ -36,7 +36,7 @@
         try {
             HelperContext helperContext = SDOContextHelper.getHelperContext(context);
             XMLHelper xmlHelper = helperContext.getXMLHelper();
-            QName elementName = SDOContextHelper.getElement(context.getSourceDataType());
+            QName elementName = SDOContextHelper.getElement(context);
             return xmlHelper.save(source, elementName.getNamespaceURI(), elementName.getLocalPart());
         } catch (Exception e) {
             throw new TransformationException(e);

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2XMLStreamReader.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/DataObject2XMLStreamReader.java Sat Oct 27 10:11:44 2007
@@ -41,7 +41,7 @@
         try {
             HelperContext helperContext = SDOContextHelper.getHelperContext(context);
             XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(helperContext);
-            QName elementName = SDOContextHelper.getElement(context.getSourceDataType());
+            QName elementName = SDOContextHelper.getElement(context);
             XMLHelper xmlHelper = helperContext.getXMLHelper();
             XMLDocument document =
                     xmlHelper.createDocument(source, elementName.getNamespaceURI(), elementName.getLocalPart());

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java Sat Oct 27 10:11:44 2007
@@ -139,9 +139,13 @@
         return HelperProvider.getDefaultContext();
     }
 
-    public static QName getElement(DataType<?> dataType) {
+    public static QName getElement(TransformationContext context) {
+        if (context == null) {
+            return SDODataBinding.ROOT_ELEMENT;
+        }
+        DataType<?> dataType = context.getTargetDataType();
         Object logical = dataType.getLogical();
-        QName elementName = SDODataBinding.ROOT_ELEMENT;
+        QName elementName = null;
         if (logical instanceof XMLType) {
             XMLType xmlType = (XMLType)logical;
             QName element = xmlType.getElementName();
@@ -149,6 +153,22 @@
                 elementName = element;
             }
         }
-        return elementName;
+        if (elementName == null) {
+            // Try source type
+            dataType = context.getSourceDataType();
+            logical = dataType.getLogical();
+            if (logical instanceof XMLType) {
+                XMLType xmlType = (XMLType)logical;
+                QName element = xmlType.getElementName();
+                if (element != null) {
+                    elementName = element;
+                }
+            }
+        }
+        if (elementName != null) {
+            return elementName;
+        } else {
+            return SDODataBinding.ROOT_ELEMENT;
+        }
     }
 }

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java Sat Oct 27 10:11:44 2007
@@ -45,7 +45,7 @@
 public class SDODataBinding extends BaseDataBinding {
     public static final String NAME = DataObject.class.getName();
     public static final String[] ALIASES = new String[] {"sdo"};
-    
+
     public static final String ROOT_NAMESPACE = "commonj.sdo";
     public static final QName ROOT_ELEMENT = new QName(ROOT_NAMESPACE, "dataObject");
 
@@ -64,7 +64,9 @@
         if (DataObject.class.isAssignableFrom(javaType)) {
             // Dynamic SDO
             dataType.setDataBinding(getName());
-            dataType.setLogical(XMLType.UNKNOWN);
+            if (dataType.getLogical() == null) {
+                dataType.setLogical(XMLType.UNKNOWN);
+            }
             return true;
         }
         // FIXME: We need to access HelperContext
@@ -80,7 +82,12 @@
         String name = context.getXSDHelper().getLocalName(type);
         QName xmlType = new QName(namespace, name);
         dataType.setDataBinding(getName());
-        dataType.setLogical(new XMLType(null, xmlType));
+        QName elementName = null;
+        Object logical = dataType.getLogical();
+        if (logical instanceof XMLType) {
+            elementName = ((XMLType)logical).getElementName();
+        }
+        dataType.setLogical(new XMLType(elementName, xmlType));
         return true;
     }
 

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java Sat Oct 27 10:11:44 2007
@@ -22,6 +22,7 @@
 import java.lang.annotation.Annotation;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Constructor;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -40,7 +41,8 @@
  */
 public class DefaultDataBindingExtensionPoint implements DataBindingExtensionPoint {
     private final Map<String, DataBinding> bindings = new HashMap<String, DataBinding>();
-	private static final Logger logger = Logger.getLogger(DefaultTransformerExtensionPoint.class.getName());
+    private final List<DataBinding> databindings = new ArrayList<DataBinding>();
+    private static final Logger logger = Logger.getLogger(DefaultTransformerExtensionPoint.class.getName());
     private boolean loadedDataBindings;
 
     public DefaultDataBindingExtensionPoint() {
@@ -59,17 +61,17 @@
     }
 
     public void addDataBinding(DataBinding dataBinding) {
-    	if (logger.isLoggable(Level.FINE)) {
-			String className = dataBinding.getClass().getName();
-			boolean lazy = false;
-			if (dataBinding instanceof LazyDataBinding) {
-				className = ((LazyDataBinding) dataBinding).className;
-				lazy = true;
-			}
-			logger.fine("Adding databinding: " + className + ";type="
-					+ dataBinding.getName() + ",lazy=" + lazy);
-		}
-		bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
+        if (logger.isLoggable(Level.FINE)) {
+            String className = dataBinding.getClass().getName();
+            boolean lazy = false;
+            if (dataBinding instanceof LazyDataBinding) {
+                className = ((LazyDataBinding)dataBinding).className;
+                lazy = true;
+            }
+            logger.fine("Adding databinding: " + className + ";type=" + dataBinding.getName() + ",lazy=" + lazy);
+        }
+        databindings.add(dataBinding);
+        bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
         String[] aliases = dataBinding.getAliases();
         if (aliases != null) {
             for (String alias : aliases) {
@@ -84,6 +86,7 @@
         }
         DataBinding dataBinding = bindings.remove(id.toLowerCase());
         if (dataBinding != null) {
+            databindings.remove(dataBinding);
             String[] aliases = dataBinding.getAliases();
             if (aliases != null) {
                 for (String alias : aliases) {
@@ -206,12 +209,25 @@
         return introspectType(dataType, annotations, false);
     }
 
+    private boolean introspectArray(DataType dataType, Annotation[] annotations) {
+        Class physical = dataType.getPhysical();
+        if (!physical.isArray()) {
+            return false;
+        }
+        Class componentType = physical.getComponentType();
+        DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
+        introspectType(logical, annotations);
+        dataType.setDataBinding("java:array");
+        dataType.setLogical(logical);
+        return true;
+    }
+
     //
     // Leverage the DataBinding ExceptionHandler to calculate the DataType of an exception DataType
     //
     public boolean introspectType(DataType dataType, Annotation[] annotations, boolean isException) {
         loadDataBindings();
-        for (DataBinding binding : bindings.values()) {
+        for (DataBinding binding : databindings) {
             // don't introspect for JavaBeansDatabinding as all javatypes will
             // anyways match to its basetype
             // which is java.lang.Object. Default to this only if no databinding
@@ -243,8 +259,13 @@
         if (physical == Object.class) {
             return false;
         }
-        dataType.setDataBinding(JavaBeansDataBinding.NAME);
-        return false;
+        if (dataType.getPhysical().isArray()) {
+            introspectArray(dataType, annotations);
+            return true;
+        } else {
+            dataType.setDataBinding(JavaBeansDataBinding.NAME);
+            return false;
+        }
     }
 
     public DataType introspectType(Object value) {

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java Sat Oct 27 10:11:44 2007
@@ -34,41 +34,48 @@
  * @version $Rev$ $Date$
  */
 public class DefaultTransformerExtensionPoint implements TransformerExtensionPoint {
-	private static final Logger logger = Logger.getLogger(DefaultTransformerExtensionPoint.class.getName());
+    private static final Logger logger = Logger.getLogger(DefaultTransformerExtensionPoint.class.getName());
     private boolean loadedTransformers;
-    
+
     private final DirectedGraph<Object, Transformer> graph = new DirectedGraph<Object, Transformer>();
-    
+
     public DefaultTransformerExtensionPoint() {
     }
-    
+
     public void addTransformer(String sourceType, String resultType, int weight, Transformer transformer) {
-    	if (logger.isLoggable(Level.FINE)) {
-			String className = transformer.getClass().getName();
-			boolean lazy = false;
-			boolean pull = (transformer instanceof PullTransformer);
-			if (transformer instanceof LazyPullTransformer) {
-				className = ((LazyPullTransformer) transformer).className;
-				lazy = true;
-			}
-			if (transformer instanceof LazyPushTransformer) {
-				className = ((LazyPushTransformer) transformer).className;
-				lazy = true;
-			}
-
-			logger.fine("Adding transformer: " + className + ";source="
-					+ sourceType + ",target=" + resultType + ",weight="
-					+ weight + ",type=" + (pull ? "pull" : "push") + ",lazy="
-					+ lazy);
-		}
+        if (logger.isLoggable(Level.FINE)) {
+            String className = transformer.getClass().getName();
+            boolean lazy = false;
+            boolean pull = (transformer instanceof PullTransformer);
+            if (transformer instanceof LazyPullTransformer) {
+                className = ((LazyPullTransformer)transformer).className;
+                lazy = true;
+            }
+            if (transformer instanceof LazyPushTransformer) {
+                className = ((LazyPushTransformer)transformer).className;
+                lazy = true;
+            }
+
+            logger.fine("Adding transformer: " + className
+                + ";source="
+                + sourceType
+                + ",target="
+                + resultType
+                + ",weight="
+                + weight
+                + ",type="
+                + (pull ? "pull" : "push")
+                + ",lazy="
+                + lazy);
+        }
         graph.addEdge(sourceType, resultType, transformer, weight);
     }
 
     public void addTransformer(Transformer transformer) {
         addTransformer(transformer.getSourceDataBinding(),
-            transformer.getTargetDataBinding(),
-            transformer.getWeight(),
-            transformer);
+                       transformer.getTargetDataBinding(),
+                       transformer.getWeight(),
+                       transformer);
     }
 
     public boolean removeTransformer(String sourceType, String resultType) {
@@ -77,7 +84,7 @@
 
     public Transformer getTransformer(String sourceType, String resultType) {
         loadTransformers();
-        
+
         DirectedGraph<Object, Transformer>.Edge edge = graph.getEdge(sourceType, resultType);
         return (edge == null) ? null : edge.getValue();
     }
@@ -104,21 +111,22 @@
 
         // Get the transformer service declarations
         ClassLoader classLoader = transformerClass.getClassLoader();
-        List<String> transformerDeclarations; 
+        List<String> transformerDeclarations;
         try {
-            transformerDeclarations = ServiceConfigurationUtil.getServiceClassNames(classLoader, transformerClass.getName());
+            transformerDeclarations =
+                ServiceConfigurationUtil.getServiceClassNames(classLoader, transformerClass.getName());
         } catch (IOException e) {
             throw new IllegalStateException(e);
         }
-        
+
         // Load transformers
-        for (String transformerDeclaration: transformerDeclarations) {
+        for (String transformerDeclaration : transformerDeclarations) {
             Map<String, String> attributes = ServiceConfigurationUtil.parseServiceDeclaration(transformerDeclaration);
             String className = attributes.get("class");
             String source = attributes.get("source");
             String target = attributes.get("target");
             int weight = Integer.valueOf(attributes.get("weight"));
-                
+
             // Create a transformer wrapper and register it
             Transformer transformer;
             if (transformerClass == PullTransformer.class) {
@@ -129,7 +137,7 @@
             addTransformer(transformer);
         }
     }
-    
+
     /**
      * A transformer facade allowing transformers to be lazily loaded
      * and initialized.
@@ -182,7 +190,7 @@
         public int getWeight() {
             return weight;
         }
-        
+
         public Object transform(Object source, TransformationContext context) {
             return getTransformer().transform(source, context);
         }
@@ -258,22 +266,27 @@
         }
     }
 
-    
     //FIXME The following methods should be on a different class from
     // extension point
-    
+
     public List<Transformer> getTransformerChain(String sourceType, String resultType) {
         loadTransformers();
-        
+
         String source = sourceType;
         String result = resultType;
         List<Transformer> transformers = new ArrayList<Transformer>();
-        DirectedGraph<Object, Transformer>.Path path = graph.getShortestPath(source, result);
-        if (path == null) {
-            return null;
-        }
-        for (DirectedGraph<Object, Transformer>.Edge edge : path.getEdges()) {
-            transformers.add(edge.getValue());
+        // First check if there is a direct path, if yes, use it regardless of the weight
+        DirectedGraph<Object, Transformer>.Edge link = graph.getEdge(sourceType, resultType);
+        if (link != null) {
+            transformers.add(link.getValue());
+        } else {
+            DirectedGraph<Object, Transformer>.Path path = graph.getShortestPath(source, result);
+            if (path == null) {
+                return null;
+            }
+            for (DirectedGraph<Object, Transformer>.Edge edge : path.getEdges()) {
+                transformers.add(edge.getValue());
+            }
         }
         return transformers;
     }
@@ -281,7 +294,7 @@
     @Override
     public String toString() {
         loadTransformers();
-        
+
         return graph.toString();
     }
 

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java Sat Oct 27 10:11:44 2007
@@ -26,6 +26,7 @@
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
  * Base Implementation of DataBinding
@@ -81,7 +82,9 @@
         Class cls = type.getPhysical();
         if (baseType != null && baseType.isAssignableFrom(cls)) {
             type.setDataBinding(getName());
-            type.setLogical(baseType);
+            if (type.getLogical() == null) {
+                type.setLogical(XMLType.UNKNOWN);
+            }
             return true;
         }
         return false;

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java?rev=589154&r1=589153&r2=589154&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java Sat Oct 27 10:11:44 2007
@@ -24,6 +24,7 @@
 import java.lang.reflect.Type;
 
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
  * The base class for a special databinding which represents a group of other databindings
@@ -60,13 +61,18 @@
         for (Class<?> c : markerTypes) {
             if (isTypeOf(c, cls)) {
                 type.setDataBinding(getDataBinding(c));
-                type.setLogical(getLogical(cls, annotations));
+                Object logical = getLogical(cls, annotations);
+                if (logical != null) {
+                    type.setLogical(getLogical(cls, annotations));
+                } else {
+                    type.setLogical(XMLType.UNKNOWN);
+                }
                 return true;
             }
         }
         return false;
     }
-    
+
     /**
      * Test if the given type is a subtype of the base type
      * @param markerType
@@ -76,7 +82,7 @@
     protected boolean isTypeOf(Class<?> markerType, Class<?> type) {
         return markerType.isAssignableFrom(type);
     }
-    
+
     /**
      * Derive the databinding name from a base class
      * @param baseType
@@ -85,7 +91,7 @@
     protected String getDataBinding(Class<?> baseType) {
         return baseType.getName();
     }
-    
+
     /**
      * Get the logical type
      * @param type The java type



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org