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 2006/09/13 06:39:41 UTC

svn commit: r442838 - in /incubator/tuscany/java: samples/sca/echo.databinding/ samples/sca/echo.databinding/src/main/java/echo/ samples/sca/echo.databinding/src/test/java/echo/ samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/ samples/...

Author: rfeng
Date: Tue Sep 12 21:39:40 2006
New Revision: 442838

URL: http://svn.apache.org/viewvc?view=rev&rev=442838
Log:
Refactor the wrapping/unwrapping logic to WrapperHandler and DataBinding interface
Use the generic Input2InputTransformer and Output2OutputTransformer to perform payload-level transformations
Bring up the echo-databinding to support AXIOM-based wrapping/unwrapping

Added:
    incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java   (with props)
Removed:
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementInputTransformer.java
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementOutputTransformer.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java
Modified:
    incubator/tuscany/java/samples/sca/echo.databinding/pom.xml
    incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java
    incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java
    incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java
    incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java
    incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl
    incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl
    incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl
    incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
    incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java

Modified: incubator/tuscany/java/samples/sca/echo.databinding/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/pom.xml?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/pom.xml (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/pom.xml Tue Sep 12 21:39:40 2006
@@ -63,7 +63,7 @@
             <groupId>org.apache.tuscany.idl</groupId>
             <artifactId>wsdl</artifactId>
             <version>${pom.version}</version>
-            <scope>test</scope>
+            <scope>compile</scope>
         </dependency>
 
         <dependency>

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java Tue Sep 12 21:39:40 2006
@@ -45,7 +45,9 @@
 
     public Object invokeTarget(final Object payload) throws InvocationTargetException {
         // echo back the result, a real binding would invoke some API for flowing the request
-        return ((Object[])payload)[0];
+        Object result = ((Object[]) payload)[0];
+        System.out.println("Echo: " + result);
+        return result;
     }
 
     public Message invoke(Message msg) throws InvocationRuntimeException {

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java Tue Sep 12 21:39:40 2006
@@ -18,6 +18,8 @@
  */
 package echo;
 
+import org.apache.axiom.om.OMElement;
+import org.apache.tuscany.idl.wsdl.WSDLOperation;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.extension.ReferenceExtension;
 import org.apache.tuscany.spi.model.Operation;
@@ -30,11 +32,20 @@
  */
 public class EchoReference extends ReferenceExtension {
 
+    private static final String OM_DATA_BINDING = OMElement.class.getName();
+
     public EchoReference(String name, Class<?> interfaze, CompositeComponent parent, WireService wireService) {
         super(name, interfaze, parent, wireService);
     }
 
+    @SuppressWarnings("unchecked")
     public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
+        // HACK to set the databinding
+        operation.setDataBinding(OM_DATA_BINDING);
+        WSDLOperation op = (WSDLOperation) operation.getMetaData().get(WSDLOperation.class.getName());
+        if (op != null) {
+            op.setDataBinding(OM_DATA_BINDING);
+        }
         return new EchoInvoker();
     }
 }

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java Tue Sep 12 21:39:40 2006
@@ -49,9 +49,9 @@
     public XMLStreamReader call1(XMLStreamReader msg) {
         String request = msg + " [" + msg.getClass().getName() + "]";
         System.out.println("ComponentB --> Received message: " + request);
-        XMLStreamReader ret = (XMLStreamReader) echoReference.echo(msg);
-        String response = ret + " [" + ret.getClass().getName() + "]";
+//        XMLStreamReader ret = (XMLStreamReader) echoReference.echo(msg);
+        String response = request;
         System.out.println("ComponentB --> Returned message: " + response);
-        return ret;
+        return msg;
     }    
 }

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java Tue Sep 12 21:39:40 2006
@@ -31,8 +31,8 @@
     private Interface1 componentA;
 
     public void testTransform() {
-        componentA.call("<foo>123</foo>");
-        componentA.call1("<foo>123</foo>");
+        componentA.call("<message><foo>123</foo></message>");
+        componentA.call1("<message><foo>123</foo></message>");
     }
 
     protected void setUp() throws Exception {

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl Tue Sep 12 21:39:40 2006
@@ -22,10 +22,6 @@
     </component>
 
     <!-- Transformers -->
-    <component name="transformer.ObjectArray2OM">
-        <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElementInputTransformer" />
-    </component>
-    
     <component name="transformer.XMLStreamReader2OMElement">
         <system:implementation.system class="org.apache.tuscany.databinding.axiom.XMLStreamReader2OMElement" />
     </component>

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl Tue Sep 12 21:39:40 2006
@@ -61,8 +61,12 @@
         <system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
     </component>
 
-    <component name="transformer.JavaParametersTransformer">
-        <system:implementation.system class="org.apache.tuscany.databinding.impl.JavaParametersTransformer" />
+    <component name="transformer.Input2InputTransformer">
+        <system:implementation.system class="org.apache.tuscany.databinding.idl.Input2InputTransformer" />
     </component>
 
+    <component name="transformer.Output2OutputTransformer">
+        <system:implementation.system class="org.apache.tuscany.databinding.idl.Output2OutputTransformer" />
+    </component>
+    
 </composite>

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl Tue Sep 12 21:39:40 2006
@@ -1,21 +1,26 @@
 <?xml version="1.0"?>
-<definitions name="StockQuote" targetNamespace="http://example.com/echo.wsdl"
-    xmlns:tns="http://example.com/echo.wsdl" xmlns:xsd1="http://example.com/echo.xsd"
-    xmlns="http://schemas.xmlsoap.org/wsdl/">
+<definitions name="StockQuote" targetNamespace="http://example.com/echo.wsdl" xmlns:tns="http://example.com/echo.wsdl"
+    xmlns:xsd1="http://example.com/echo.xsd" xmlns="http://schemas.xmlsoap.org/wsdl/">
 
     <types>
-        <schema targetNamespace="http://example.com/echo.xsd" xmlns="http://www.w3.org/2001/XMLSchema">
+        <schema targetNamespace="http://example.com/echo.xsd" xmlns:tns="http://example.com/echo.xsd"
+            xmlns="http://www.w3.org/2001/XMLSchema">
+            <complexType name="messageType">
+                <sequence>
+                    <element name="foo" type="string"></element>
+                </sequence>
+            </complexType>
             <element name="echo">
                 <complexType>
                     <sequence>
-                        <element name="message" type="string" />
+                        <element name="message" type="tns:messageType" />
                     </sequence>
                 </complexType>
             </element>
             <element name="echoResponse">
                 <complexType>
                     <sequence>
-                        <element name="message" type="string" />
+                        <element name="message" type="tns:messageType" />
                     </sequence>
                 </complexType>
             </element>

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java Tue Sep 12 21:39:40 2006
@@ -19,9 +19,10 @@
 
 package org.apache.tuscany.databinding.axiom;
 
-import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMElement;
 import org.apache.tuscany.databinding.DataBinding;
 import org.apache.tuscany.databinding.extension.DataBindingExtension;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
 import org.osoa.sca.annotations.Service;
 
 /**
@@ -31,7 +32,15 @@
 public class AxiomDataBinding extends DataBindingExtension {
 
     public AxiomDataBinding() {
-        super(OMNode.class);
+        super(OMElement.class);
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.extension.DataBindingExtension#getWrapperHandler()
+     */
+    @Override
+    public WrapperHandler getWrapperHandler() {
+        return new OMElementWrapperHandler();
     }
 
 }

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java Tue Sep 12 21:39:40 2006
@@ -41,6 +41,7 @@
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
+import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.idl.WrapperHandler;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaSimpleType;
@@ -58,7 +59,7 @@
         this.factory = OMAbstractFactory.getOMFactory();
     }
 
-    public OMElement create(XmlSchemaElement element) {
+    public OMElement create(XmlSchemaElement element, TransformationContext context) {
         OMElement wrapper = factory.createOMElement(element.getQName(), null);
         return wrapper;
     }

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl Tue Sep 12 21:39:40 2006
@@ -21,11 +21,6 @@
         <system:implementation.system class="org.apache.tuscany.databinding.axiom.AxiomDataBinding" />
     </component>
 
-    <!-- Transformers -->
-    <component name="transformer.ObjectArray2OM">
-        <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElementInputTransformer" />
-    </component>
-    
     <component name="transformer.XMLStreamReader2OMElement">
         <system:implementation.system class="org.apache.tuscany.databinding.axiom.XMLStreamReader2OMElement" />
     </component>

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java Tue Sep 12 21:39:40 2006
@@ -27,10 +27,16 @@
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
+import org.apache.tuscany.databinding.DataBindingRegistry;
 import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.idl.Input2InputTransformer;
+import org.apache.tuscany.databinding.idl.Output2OutputTransformer;
 import org.apache.tuscany.databinding.impl.DataBindingRegistryImpl;
 import org.apache.tuscany.databinding.impl.MediatorImpl;
 import org.apache.tuscany.databinding.impl.TransformationContextImpl;
@@ -40,9 +46,6 @@
 import org.apache.tuscany.idl.wsdl.XMLSchemaRegistryImpl;
 import org.apache.tuscany.spi.model.DataType;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
 public class OMElementWrapperTransformerTestCase extends TestCase {
     private static final String IPO_XML =
             "<?xml version=\"1.0\"?>" + "<order1" + "  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
@@ -79,14 +82,18 @@
         WSDLOperation op = new WSDLOperation(operation, OMElement.class.getName(), registry.getSchemaRegistry());
         Assert.assertTrue(op.isWrapperStyle());
 
-        Object[] source = new Object[] { "cust001", IPO_XML, Integer.valueOf(1) };
-        OMElementInputTransformer t = new OMElementInputTransformer();
         MediatorImpl m = new MediatorImpl();
         TransformerRegistryImpl tr = new TransformerRegistryImpl();
         tr.registerTransformer(new String2OMElement());
         tr.registerTransformer(new OMElement2String());
         m.setTransformerRegistry(tr);
-        m.setDataBindingRegistry(new DataBindingRegistryImpl());
+        DataBindingRegistry dataBindingRegistry = new DataBindingRegistryImpl();
+        dataBindingRegistry.register(new AxiomDataBinding());
+        m.setDataBindingRegistry(dataBindingRegistry);
+        
+        Object[] source = new Object[] { "cust001", IPO_XML, Integer.valueOf(1) };
+        Input2InputTransformer t = new Input2InputTransformer();
+        t.setDataBindingRegistry(dataBindingRegistry);
         t.setMediator(m);
 
         TransformationContext context = new TransformationContextImpl();
@@ -112,7 +119,8 @@
                 factory.createOMElement(new QName("http://example.com/order.wsdl", "checkOrderStatusResponse"), null);
         OMElement status = factory.createOMElement(new QName(null, "status"), responseElement);
         factory.createOMText(status, "shipped");
-        OMElementOutputTransformer t2 = new OMElementOutputTransformer();
+        Output2OutputTransformer t2 = new Output2OutputTransformer();
+        t2.setDataBindingRegistry(dataBindingRegistry);
         Object st = t2.transform(responseElement, context1);
         Assert.assertEquals("shipped", st);
 

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java Tue Sep 12 21:39:40 2006
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.databinding;
 
+import org.apache.tuscany.databinding.idl.WrapperHandler;
 import org.apache.tuscany.spi.model.DataType;
 
 /**
@@ -47,4 +48,10 @@
      * @return The DataType or null if the java type is not supported by this databinding
      */
     DataType introspect(Object value);
+    
+    /**
+     * Provide a WrapperHandler for this databinding
+     * @return A wrapper handler which can handle wrapping/wrapping for this databinding
+     */
+    WrapperHandler getWrapperHandler();
 }

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java Tue Sep 12 21:39:40 2006
@@ -19,6 +19,7 @@
 
 import org.apache.tuscany.databinding.DataBinding;
 import org.apache.tuscany.databinding.DataBindingRegistry;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.model.DataType;
 import org.osoa.sca.annotations.Init;
@@ -86,5 +87,12 @@
 
     public final String getName() {
         return name;
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.DataBinding#getWrapperHandler()
+     */
+    public WrapperHandler getWrapperHandler() {
+        return null;
     }
 }

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java Tue Sep 12 21:39:40 2006
@@ -23,13 +23,17 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.databinding.DataBinding;
+import org.apache.tuscany.databinding.DataBindingRegistry;
 import org.apache.tuscany.databinding.Mediator;
 import org.apache.tuscany.databinding.PullTransformer;
 import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.TransformationException;
 import org.apache.tuscany.databinding.Transformer;
 import org.apache.tuscany.databinding.extension.TransformerExtension;
 import org.apache.tuscany.idl.wsdl.WSDLOperation;
 import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
 import org.apache.tuscany.spi.model.DataType;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaSimpleType;
@@ -40,21 +44,27 @@
  * This is a special transformer to transform the input from one IDL to the other one
  */
 @Service(Transformer.class)
-public abstract class Input2InputTransformer<T> extends TransformerExtension<Object[], Object[]> implements
+public class Input2InputTransformer extends TransformerExtension<Object[], Object[]> implements
         PullTransformer<Object[], Object[]> {
 
-    protected WrapperHandler<T> wrapperHandler;
-
+    private static final String IDL_INPUT = "idl:input";
+    protected DataBindingRegistry dataBindingRegistry;         
     protected Mediator mediator;
 
-    /**
-     * @param wrapperHandler
-     */
-    protected Input2InputTransformer(WrapperHandler<T> wrapperHandler) {
+    public Input2InputTransformer() {
         super();
-        this.wrapperHandler = wrapperHandler;
     }
 
+    @Override
+    public String getSourceBinding() {
+        return IDL_INPUT;
+    }
+
+    @Override
+    public String getTargetBinding() {
+        return IDL_INPUT;
+    }
+    
     /**
      * @param mediator the mediator to set
      */
@@ -64,6 +74,15 @@
     }
 
     /**
+     * @param dataBindingRegistry the dataBindingRegistry to set
+     */
+    @Autowire
+    public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
+        this.dataBindingRegistry = dataBindingRegistry;
+    }
+
+
+    /**
      * @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
      */
     @Override
@@ -91,15 +110,24 @@
         DataType<List<DataType<?>>> sourceType = context.getSourceDataType();
         WSDLOperation sourceOp = (WSDLOperation) sourceType.getMetadata(WSDLOperation.class.getName());
         boolean sourceWrapped = (sourceOp != null && sourceOp.isWrapperStyle());
+        
+        WrapperHandler sourceWrapperHandler = null;
+        if(sourceWrapped) {
+            sourceWrapperHandler = getWapperHandler(sourceOp);
+        }
 
         DataType<List<DataType<QName>>> targetType = context.getTargetDataType();
         WSDLOperation targetOp = (WSDLOperation) targetType.getMetadata(WSDLOperation.class.getName());
         boolean targetWrapped = (targetOp != null && targetOp.isWrapperStyle());
+        WrapperHandler targetWrapperHandler = null;
+        if(targetWrapped) {
+            targetWrapperHandler = getWapperHandler(targetOp);
+        }
 
         if ((!sourceWrapped) && targetWrapped) {
             // Unwrapped --> Wrapped
             WSDLOperation.Wrapper wrapper = targetOp.getWrapper();
-            T targetWrapper = wrapperHandler.create(wrapper.getInputWrapperElement());
+            Object targetWrapper = targetWrapperHandler.create(wrapper.getInputWrapperElement(), context);
             if (source == null) {
                 return new Object[] { targetWrapper };
             }
@@ -113,30 +141,30 @@
                 Object child = source[i];
                 if (!isSimpleType) {
                     child = mediator.mediate(source[i], sourceType.getLogical().get(i), argType);
-                    wrapperHandler.setChild(targetWrapper, i, argElement, child);
+                    targetWrapperHandler.setChild(targetWrapper, i, argElement, child);
                 } else {
-                    wrapperHandler.setChild(targetWrapper, i, argElement, child);
+                    targetWrapperHandler.setChild(targetWrapper, i, argElement, child);
                 }
             }
             return new Object[] { targetWrapper };
         } else if (sourceWrapped && (!targetWrapped)) {
             // Wrapped to Unwrapped
-            T sourceWrapper = (T) source[0];
+            Object sourceWrapper = source[0];
             List<XmlSchemaElement> childElements = sourceOp.getWrapper().getInputChildElements();
             Object[] newArgs = new Object[childElements.size()];
             for (int i = 0; i < childElements.size(); i++) {
                 XmlSchemaElement childElement = childElements.get(i);
                 if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
-                    Object child = wrapperHandler.getChild(sourceWrapper, i, childElement);
-                    newArgs[i] = child;
+                    newArgs[i] = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
                 } else {
-                    Object child = wrapperHandler.getChild(sourceWrapper, i, childElement);
+                    Object child = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
                     DataType<QName> childType = sourceOp.getWrapper().getUnwrappedInputType().getLogical().get(i);
                     newArgs[i] = mediator.mediate(child, childType, targetType.getLogical().get(i));
                 }
             }
             return newArgs;
         } else {
+            // Assuming wrapper to wrapper conversion can be handled here as well
             Object[] newArgs = new Object[source.length];
             for (int i = 0; i < source.length; i++) {
                 Object child =
@@ -145,6 +173,21 @@
             }
             return newArgs;
         }
+    }
+
+    private WrapperHandler getWapperHandler(WSDLOperation sourceOp) {
+        String dataBindingId;
+        try {
+            dataBindingId = sourceOp.getOperation().getDataBinding();
+        } catch (InvalidServiceContractException e) {
+            throw new TransformationException(e);
+        }
+        DataBinding dataBinding = dataBindingRegistry.getDataBinding(dataBindingId);
+        WrapperHandler wrapperHandler = dataBinding==null? null : dataBinding.getWrapperHandler();
+        if (wrapperHandler == null) {
+            throw new TransformationException("No wrapper handler is provided for databinding: "+dataBindingId);
+        }
+        return wrapperHandler;
     }
 
 }

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java Tue Sep 12 21:39:40 2006
@@ -23,6 +23,8 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.databinding.DataBinding;
+import org.apache.tuscany.databinding.DataBindingRegistry;
 import org.apache.tuscany.databinding.Mediator;
 import org.apache.tuscany.databinding.PullTransformer;
 import org.apache.tuscany.databinding.TransformationContext;
@@ -31,6 +33,7 @@
 import org.apache.tuscany.databinding.extension.TransformerExtension;
 import org.apache.tuscany.idl.wsdl.WSDLOperation;
 import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
 import org.apache.tuscany.spi.model.DataType;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaSimpleType;
@@ -41,18 +44,17 @@
  * This is a special transformer to transform the output from one IDL to the other one
  */
 @Service(Transformer.class)
-public abstract class Output2OutputTransformer<T> extends TransformerExtension<Object, Object> implements
+public class Output2OutputTransformer extends TransformerExtension<Object, Object> implements
         PullTransformer<Object, Object> {
-
-    protected WrapperHandler<T> wrapperHandler;
+    private static final String IDL_OUTPUT = "idl:output";
+    protected DataBindingRegistry dataBindingRegistry;
     protected Mediator mediator;
 
     /**
      * @param wrapperHandler
      */
-    protected Output2OutputTransformer(WrapperHandler<T> wrapperHandler) {
+    public Output2OutputTransformer() {
         super();
-        this.wrapperHandler = wrapperHandler;
     }
 
     /**
@@ -64,6 +66,24 @@
     }
 
     /**
+     * @param dataBindingRegistry the dataBindingRegistry to set
+     */
+    @Autowire
+    public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
+        this.dataBindingRegistry = dataBindingRegistry;
+    }  
+    
+    @Override
+    public String getSourceBinding() {
+        return IDL_OUTPUT;
+    }
+
+    @Override
+    public String getTargetBinding() {
+        return IDL_OUTPUT;
+    }
+    
+    /**
      * @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
      */
     @Override
@@ -85,22 +105,46 @@
     public int getWeight() {
         return 10;
     }
+    
+    private WrapperHandler getWapperHandler(WSDLOperation sourceOp) {
+        String dataBindingId;
+        try {
+            dataBindingId = sourceOp.getOperation().getDataBinding();
+        } catch (InvalidServiceContractException e) {
+            throw new TransformationException(e);
+        }
+        DataBinding dataBinding = dataBindingRegistry.getDataBinding(dataBindingId);
+        WrapperHandler wrapperHandler = dataBinding==null? null : dataBinding.getWrapperHandler();
+        if (wrapperHandler == null) {
+            throw new TransformationException("No wrapper handler is provided for databinding: "+dataBindingId);
+        }
+        return wrapperHandler;
+    }
+    
 
     @SuppressWarnings("unchecked")
     public Object transform(Object response, TransformationContext context) {
         try {
-            DataType<?> sourceType = context.getSourceDataType();
+            DataType<DataType> sourceType = context.getSourceDataType();
             WSDLOperation sourceOp = (WSDLOperation) sourceType.getMetadata(WSDLOperation.class.getName());
             boolean sourceWrapped = (sourceOp != null && sourceOp.isWrapperStyle());
+            WrapperHandler sourceWrapperHandler = null;
+            if(sourceWrapped) {
+                sourceWrapperHandler = getWapperHandler(sourceOp);
+            }
 
-            DataType<?> targetType = context.getTargetDataType();
+            DataType<DataType> targetType = context.getTargetDataType();
             WSDLOperation targetOp = (WSDLOperation) targetType.getMetadata(WSDLOperation.class.getName());
             boolean targetWrapped = (targetOp != null && targetOp.isWrapperStyle());
+            WrapperHandler targetWrapperHandler = null;
+            if(targetWrapped) {
+                targetWrapperHandler = getWapperHandler(targetOp);
+            }
 
             if ((!sourceWrapped) && targetWrapped) {
                 // Unwrapped --> Wrapped
                 WSDLOperation.Wrapper wrapper = targetOp.getWrapper();
-                T targetWrapper = wrapperHandler.create(wrapper.getOutputWrapperElement());
+                Object targetWrapper = targetWrapperHandler.create(wrapper.getOutputWrapperElement(), context);
                 if (response == null) {
                     return targetWrapper;
                 }
@@ -111,26 +155,27 @@
                 boolean isSimpleType = (argXSDType instanceof XmlSchemaSimpleType);
                 Object child = response;
                 if (!isSimpleType) {
-                    child = mediator.mediate(response, sourceType, argType);
-                    wrapperHandler.setChild(targetWrapper, 0, argElement, child);
+                    child = mediator.mediate(response, sourceType.getLogical(), argType);
+                    targetWrapperHandler.setChild(targetWrapper, 0, argElement, child);
                 } else {
-                    wrapperHandler.setChild(targetWrapper, 0, argElement, child);
+                    targetWrapperHandler.setChild(targetWrapper, 0, argElement, child);
                 }
                 return targetWrapper;
             } else if (sourceWrapped && (!targetWrapped)) {
                 // Wrapped to Unwrapped
-                T sourceWrapper = (T) response;
+                Object sourceWrapper = response;
                 List<XmlSchemaElement> childElements = sourceOp.getWrapper().getOutputChildElements();
                 XmlSchemaElement childElement = childElements.get(0);
                 if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
-                    return wrapperHandler.getChild(sourceWrapper, 0, childElement);
+                    return sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
                 } else {
-                    Object child = wrapperHandler.getChild(sourceWrapper, 0, childElement);
+                    Object child = sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
                     DataType<?> childType = sourceOp.getWrapper().getUnwrappedOutputType();
-                    return mediator.mediate(child, childType, targetType);
+                    return mediator.mediate(child, childType, targetType.getLogical());
                 }
             } else {
-                return mediator.mediate(response, sourceType, targetType);
+                // FIXME: Do we want to handle wrapped to wrapped?
+                return mediator.mediate(response, sourceType.getLogical(), targetType.getLogical());
             }
         } catch (Exception e) {
             throw new TransformationException(e);

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java Tue Sep 12 21:39:40 2006
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.databinding.idl;
 
+import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 
 /**
@@ -29,9 +30,10 @@
      * Create a wrapper element
      * 
      * @param element The XSD element
-     * @return
+     * @param context The transformation context
+     * @return An object representing the wrapper element
      */
-    T create(XmlSchemaElement element);
+    T create(XmlSchemaElement element, TransformationContext context);
 
     /**
      * Set child element for the wrapper

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java Tue Sep 12 21:39:40 2006
@@ -20,6 +20,7 @@
 package org.apache.tuscany.databinding.impl;
 
 import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.idl.wsdl.WSDLOperation;
 import org.apache.tuscany.spi.model.DataType;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.Interceptor;
@@ -72,7 +73,13 @@
             // We need to figure out what fault type it is and then transform it back the source fault type
             throw new InvocationRuntimeException((Throwable) result);
         } else if (result != null) {
-            result = transform(result, targetOperation.getOutputType(), sourceOperation.getOutputType());
+            // FIXME: Should we fix the Operation model so that getOutputType returns DataType<DataType<T>>?
+            DataType<DataType> targetType = new DataType<DataType>("idl:output", Object.class, targetOperation.getOutputType());
+            targetType.setMetadata(WSDLOperation.class.getName(), targetOperation.getOutputType().getMetadata(WSDLOperation.class.getName()));
+            DataType<DataType> sourceType = new DataType<DataType>("idl:output", Object.class, sourceOperation.getOutputType());
+            sourceType.setMetadata(WSDLOperation.class.getName(), sourceOperation.getOutputType().getMetadata(WSDLOperation.class.getName()));
+
+            result = transform(result, targetType, sourceType);
             resultMsg.setBody(result);
         }
         return resultMsg;

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java Tue Sep 12 21:39:40 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.databinding.xml;
 
+import java.io.StringWriter;
+
 import org.apache.tuscany.databinding.PullTransformer;
 import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.TransformationException;
@@ -26,6 +28,7 @@
 import org.osoa.sca.annotations.Service;
 import org.w3c.dom.Node;
 import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSOutput;
 import org.w3c.dom.ls.LSSerializer;
 
 /**
@@ -39,7 +42,12 @@
         try {
             DOMImplementationLS impl = (DOMImplementationLS) DOMHelper.newDocumentBuilder().getDOMImplementation();
             LSSerializer serializer = impl.createLSSerializer();
-            return serializer.writeToString(source);
+            LSOutput output = impl.createLSOutput();
+            output.setEncoding("UTF-8");
+            StringWriter writer = new StringWriter();
+            output.setCharacterStream(writer);
+            serializer.write(source, output);
+            return writer.toString();
         } catch (Exception e) {
             throw new TransformationException(e);
         }

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl Tue Sep 12 21:39:40 2006
@@ -59,16 +59,12 @@
         <system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
     </component>
 
-    <component name="transformer.JavaParametersTransformer">
-        <system:implementation.system class="org.apache.tuscany.databinding.impl.JavaParametersTransformer" />
+    <component name="transformer.Input2InputTransformer">
+        <system:implementation.system class="org.apache.tuscany.databinding.idl.Input2InputTransformer" />
     </component>
 
-    <component name="transformer.WSDL2JavaTransformer">
-        <system:implementation.system class="org.apache.tuscany.databinding.impl.WSDL2JavaTransformer" />
-    </component>
-
-    <component name="transformer.Java2WSDLTransformer">
-        <system:implementation.system class="org.apache.tuscany.databinding.impl.Java2WSDLTransformer" />
+    <component name="transformer.Output2OutputTransformer">
+        <system:implementation.system class="org.apache.tuscany.databinding.idl.Output2OutputTransformer" />
     </component>
     
 </composite>

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java Tue Sep 12 21:39:40 2006
@@ -69,6 +69,10 @@
 
         Operation<Class> operation1 = new Operation<Class>("call", inputType1, type1, null, false, "xml:string");
         Operation<Class> operation2 = new Operation<Class>("call", inputType2, type2, null, false, "org.w3c.dom.Node");
+        
+        DataType<DataType> outputType1 = new DataType<DataType>("idl:output", Object.class, operation1.getOutputType());
+        DataType<DataType> outputType2 = new DataType<DataType>("idl:output", Object.class, operation2.getOutputType());
+                
         interceptor = new DataBindingInteceptor(null, operation1, null, operation2);
         Mediator mediator = createMock(Mediator.class);
         Object[] source = new Object[] { "<foo>bar</foo>" };
@@ -76,7 +80,8 @@
         foo.bar = "bar";
         Object[] target = new Object[] { foo };
         expect(mediator.mediate(source, inputType1, inputType2)).andReturn(target);
-        expect(mediator.mediate(target[0], type2, type1)).andReturn(source[0]);
+        // expect(mediator.mediate(target[0], type2, type1)).andReturn(source[0]);
+        expect(mediator.mediate(EasyMock.same(target[0]), EasyMock.eq(outputType2), EasyMock.eq(outputType1))).andReturn(source[0]);
         replay(mediator);
         interceptor.setMediator(mediator);
         Message msg = createMock(Message.class);

Added: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=auto&rev=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java Tue Sep 12 21:39:40 2006
@@ -0,0 +1,79 @@
+/*
+ * 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.databinding.sdo;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
+import org.apache.tuscany.sdo.util.SDOUtil;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+
+/**
+ * SDO Wrapper Handler
+ */
+public class SDOWrapperHandler implements WrapperHandler<XMLDocument> {
+
+    /**
+     * @see org.apache.tuscany.databinding.idl.WrapperHandler#create(org.apache.ws.commons.schema.XmlSchemaElement,
+     *      TransformationContext)
+     */
+    public XMLDocument create(XmlSchemaElement element, TransformationContext context) {
+        TypeHelper typeHelper = TypeHelper.INSTANCE;
+        if (context != null) {
+            DataType targetType = context.getTargetDataType();
+            if (targetType != null) {
+                typeHelper = (TypeHelper) targetType.getMetadata(TypeHelper.class.getName());
+                if (typeHelper == null) {
+                    typeHelper = TypeHelper.INSTANCE;
+                }
+            }
+        }
+        QName typeName = element.getSchemaTypeName();
+        DataFactory dataFactory = SDOUtil.createDataFactory(typeHelper);
+        DataObject root = dataFactory.create(typeName.getNamespaceURI(), typeName.getLocalPart());
+        XMLHelper xmlHelper = SDOUtil.createXMLHelper(typeHelper);
+        return xmlHelper.createDocument(root, element.getQName().getNamespaceURI(), element.getQName().getLocalPart());
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.idl.WrapperHandler#getChild(java.lang.Object, int,
+     *      org.apache.ws.commons.schema.XmlSchemaElement)
+     */
+    public Object getChild(XMLDocument wrapper, int i, XmlSchemaElement element) {
+        return wrapper.getRootObject().get(element.getName());
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.idl.WrapperHandler#setChild(java.lang.Object, int,
+     *      org.apache.ws.commons.schema.XmlSchemaElement, java.lang.Object)
+     */
+    public void setChild(XMLDocument wrapper, int i, XmlSchemaElement childElement, Object value) {
+        wrapper.getRootObject().set(childElement.getName(), value);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java Tue Sep 12 21:39:40 2006
@@ -50,7 +50,7 @@
 
     protected Operation operation;
 
-    private String defaultDataBinding;
+    private String dataBinding;
 
     protected org.apache.tuscany.spi.model.Operation<QName> operationModel;
 
@@ -60,15 +60,18 @@
 
     protected List<DataType<QName>> faultTypes;
 
+    // Keep a list of types so that the databindings can be reset
+    private List<DataType<?>> types = new ArrayList<DataType<?>>();
+
     /**
      * @param operation The WSDL4J operation
-     * @param defaultDataBinding The default databinding
+     * @param dataBinding The default databinding
      * @param schemaRegistry The XML Schema registry
      */
-    public WSDLOperation(Operation operation, String defaultDataBinding, XMLSchemaRegistry schemaRegistry) {
+    public WSDLOperation(Operation operation, String dataBinding, XMLSchemaRegistry schemaRegistry) {
         super();
         this.operation = operation;
-        this.defaultDataBinding = defaultDataBinding;
+        this.dataBinding = dataBinding;
         this.schemaRegistry = schemaRegistry;
         this.wrapper = new Wrapper();
     }
@@ -101,7 +104,7 @@
 
     /**
      * @return
-     * @throws InvalidServiceContractException 
+     * @throws InvalidServiceContractException
      */
     public DataType<List<DataType<QName>>> getInputType() throws InvalidServiceContractException {
         if (inputType == null) {
@@ -109,6 +112,7 @@
             Message message = (input == null) ? null : input.getMessage();
             inputType = getMessageType(message);
             inputType.setMetadata(WSDLOperation.class.getName(), this);
+            inputType.setDataBinding("idl:input");
         }
         return inputType;
     }
@@ -165,10 +169,12 @@
             Collection parts = message.getOrderedParts(null);
             for (Object p : parts) {
                 WSDLPart part = new WSDLPart((Part) p);
-                partTypes.add(part.getDataType());
+                DataType<QName> partType = part.getDataType();
+                partTypes.add(partType);
+                types.add(partType);
             }
         }
-        return new DataType<List<DataType<QName>>>(defaultDataBinding, Object[].class, partTypes);
+        return new DataType<List<DataType<QName>>>(dataBinding, Object[].class, partTypes);
     }
 
     /**
@@ -180,7 +186,7 @@
             boolean oneway = (operation.getOutput() == null);
             operationModel =
                     new org.apache.tuscany.spi.model.Operation<QName>(operation.getName(), getInputType(),
-                            getOutputType(), getFaultTypes(), oneway, defaultDataBinding);
+                            getOutputType(), getFaultTypes(), oneway, dataBinding);
             operationModel.addMetaData(WSDLOperation.class.getName(), this);
         }
         return operationModel;
@@ -219,7 +225,7 @@
                     element.setSchemaTypeName(type.getQName());
                 }
             }
-            dataType = new DataType<QName>(defaultDataBinding, Object.class, element.getQName());
+            dataType = new DataType<QName>(dataBinding, Object.class, element.getQName());
             dataType.setMetadata(WSDLPart.class.getName(), this);
         }
 
@@ -402,13 +408,15 @@
 
         public DataType<List<DataType<QName>>> getUnwrappedInputType() {
             if (unwrappedInputType == null) {
-                List<DataType<QName>> types = new ArrayList<DataType<QName>>();
+                List<DataType<QName>> childTypes = new ArrayList<DataType<QName>>();
                 for (XmlSchemaElement element : getInputChildElements()) {
-                    DataType<QName> type = new DataType<QName>(defaultDataBinding, Object.class, element.getQName());
+                    DataType<QName> type = new DataType<QName>(dataBinding, Object.class, element.getQName());
                     type.setMetadata(XmlSchemaElement.class.getName(), element);
+                    childTypes.add(type);
                     types.add(type);
                 }
-                unwrappedInputType = new DataType<List<DataType<QName>>>("idl:unwrapped.input", Object[].class, types);
+                unwrappedInputType =
+                        new DataType<List<DataType<QName>>>("idl:unwrapped.input", Object[].class, childTypes);
             }
             return unwrappedInputType;
         }
@@ -422,11 +430,32 @@
                         throw new NotSupportedWSDLException("Multi-part output is not supported");
                     }
                     XmlSchemaElement element = elements.get(0);
-                    unwrappedOutputType = new DataType<QName>(defaultDataBinding, Object.class, element.getQName());
+                    unwrappedOutputType = new DataType<QName>(dataBinding, Object.class, element.getQName());
                     unwrappedOutputType.setMetadata(XmlSchemaElement.class.getName(), element);
+                    types.add(unwrappedOutputType);
                 }
             }
             return unwrappedOutputType;
+        }
+    }
+
+    /**
+     * @return the dataBinding
+     */
+    public String getDataBinding() {
+        return dataBinding;
+    }
+
+    /**
+     * @param dataBinding the dataBinding to set
+     */
+    public void setDataBinding(String dataBinding) {
+        String oldDataBinding = this.dataBinding;
+        this.dataBinding = dataBinding;
+        if (!dataBinding.equals(oldDataBinding)) {
+            for (DataType<?> d : types) {
+                d.setDataBinding(this.dataBinding);
+            }
         }
     }
 



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