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/18 23:38:32 UTC

svn commit: r447579 - in /incubator/tuscany/java: samples/sca/echo.databinding/src/test/resources/META-INF/sca/ sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/ sca/services/databinding/databinding-framework/src/main/java/org/apache/tusc...

Author: rfeng
Date: Mon Sep 18 14:38:30 2006
New Revision: 447579

URL: http://svn.apache.org/viewvc?view=rev&rev=447579
Log:
Add DataTypeLoader to load "databinding" definition from SCDLs
Add more test cases

Added:
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java   (with props)
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java   (with props)
Removed:
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerRegistrarExtension.java
Modified:
    incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/sca/default.scdl
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/InterfaceJavaLoader.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Transformer.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataTypeLoader.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformerRegistryImpl.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/PipedTransformer.java
    incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/TransformerRegistryImplTestCase.java
    incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
    incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/DataObject2StringTestCase.java
    incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLLoader.java

Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/sca/default.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/sca/default.scdl?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/sca/default.scdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/sca/default.scdl Mon Sep 18 14:38:30 2006
@@ -39,7 +39,9 @@
         <!-- 
             <interface.java interface="echo.Echo"/>
         -->
-        <interface.wsdl interface="http://example.com/echo.wsdl#wsdl.interface(EchoPortType)" wsdli:wsdlLocation="http://example.com/echo.wsdl wsdl/echo.wsdl" />
+        <interface.wsdl interface="http://example.com/echo.wsdl#wsdl.interface(EchoPortType)" wsdli:wsdlLocation="http://example.com/echo.wsdl wsdl/echo.wsdl">
+            <db:databinding xmlns:db="http://tuscany.apache.org/xmlns/sca/databinding/1.0" name="org.apache.axiom.om.OMElement"/>
+        </interface.wsdl>
         <binding.echo />
     </reference>
 

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/InterfaceJavaLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/InterfaceJavaLoader.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/InterfaceJavaLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/InterfaceJavaLoader.java Mon Sep 18 14:38:30 2006
@@ -18,7 +18,11 @@
  */
 package org.apache.tuscany.core.idl.java;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -37,7 +41,9 @@
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.LoaderUtil;
+import org.apache.tuscany.spi.model.DataType;
 import org.apache.tuscany.spi.model.InteractionScope;
+import org.apache.tuscany.spi.model.ModelObject;
 
 /**
  * Loads a Java interface definition from an XML-based assembly file
@@ -79,8 +85,21 @@
 
         name = reader.getAttributeValue(null, "callbackInterface");
         Class<?> callbackClass = (name != null) ? LoaderUtil.loadClass(name, deploymentContext.getClassLoader()) : null;
-        LoaderUtil.skipToEndElement(reader);
-
+        
+        Map<Class<?>, ModelObject> extensions = new HashMap<Class<?>, ModelObject>();
+        while (true) {
+            int event = reader.next();
+            if (event == XMLStreamConstants.START_ELEMENT) {
+                ModelObject mo = registry.load(parent, reader, deploymentContext);
+                if (mo != null) {
+                    extensions.put(mo.getClass(), mo);
+                }
+            } else if (event == XMLStreamConstants.END_ELEMENT) {
+                if (reader.getName().equals(INTERFACE_JAVA)) {
+                    break;
+                }
+            }
+        }        
         JavaServiceContract serviceContract;
         try {
             serviceContract = interfaceRegsitry.introspect(interfaceClass, callbackClass);
@@ -89,6 +108,14 @@
             le.setIdentifier(interfaceClass.getName());
             throw le;
         }
+
+        // Set databinding from the SCDL extension <databinding>
+        DataType<?> dataType = (DataType<?>) extensions.get(DataType.class);
+        if (dataType != null) {
+            serviceContract.setDataBinding(dataType.getDataBinding());
+        }
+        serviceContract.getExtensions().putAll(extensions);
+        
         serviceContract.setInteractionScope(interactionScope);
         return serviceContract;
     }

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Transformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Transformer.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Transformer.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Transformer.java Mon Sep 18 14:38:30 2006
@@ -32,7 +32,7 @@
      *  
      * @return A key indentifying the source type
      */
-    public String getSourceBinding();
+    public String getSourceDataBinding();
 
     /**
      * Get the target type that this transformer transforms data into. The type is used as the key when the
@@ -40,7 +40,7 @@
      * 
      * @return A key indentifying the target type
      */
-    public String getTargetBinding();
+    public String getTargetDataBinding();
 
     /**
      * Get the cost of the transformation. The weight can be used to choose the most efficient path if

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java Mon Sep 18 14:38:30 2006
@@ -49,11 +49,11 @@
     protected abstract Class getSourceType();
     protected abstract Class getTargetType();
     
-    public String getSourceBinding() {
+    public String getSourceDataBinding() {
         return getSourceType().getName();
     }
 
-    public String getTargetBinding() {
+    public String getTargetDataBinding() {
         return getTargetType().getName();
     }
 

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java Mon Sep 18 14:38:30 2006
@@ -57,12 +57,12 @@
     }
 
     @Override
-    public String getSourceBinding() {
+    public String getSourceDataBinding() {
         return IDL_INPUT;
     }
 
     @Override
-    public String getTargetBinding() {
+    public String getTargetDataBinding() {
         return IDL_INPUT;
     }
 

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java Mon Sep 18 14:38:30 2006
@@ -76,12 +76,12 @@
     }
 
     @Override
-    public String getSourceBinding() {
+    public String getSourceDataBinding() {
         return IDL_OUTPUT;
     }
 
     @Override
-    public String getTargetBinding() {
+    public String getTargetDataBinding() {
         return IDL_OUTPUT;
     }
 

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataTypeLoader.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataTypeLoader.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataTypeLoader.java Mon Sep 18 14:38:30 2006
@@ -25,8 +25,10 @@
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.LoaderExtension;
+import org.apache.tuscany.spi.loader.InvalidValueException;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.LoaderUtil;
 import org.apache.tuscany.spi.model.DataType;
 import org.osoa.sca.annotations.Constructor;
 
@@ -34,9 +36,9 @@
  * The StAX loader for data type
  */
 public class DataTypeLoader extends LoaderExtension<DataType> {
-    public static final QName DATA_BINDING = new QName("http://tuscany.apache.org/xmlns/databinding/1.0", "databinding");
+    public static final QName DATA_BINDING = new QName("http://tuscany.apache.org/xmlns/sca/databinding/1.0", "databinding");
 
-    @Constructor({"registry"})
+    @Constructor( { "registry" })
     public DataTypeLoader(@Autowire LoaderRegistry registry) {
         super(registry);
     }
@@ -46,10 +48,15 @@
         return DATA_BINDING;
     }
 
-    public DataType load(CompositeComponent parent, XMLStreamReader reader, DeploymentContext deploymentContext) throws XMLStreamException, LoaderException {
+    public DataType load(CompositeComponent parent, XMLStreamReader reader, DeploymentContext deploymentContext)
+        throws XMLStreamException, LoaderException {
         assert DATA_BINDING.equals(reader.getName());
         String name = reader.getAttributeValue(null, "name");
+        LoaderUtil.skipToEndElement(reader);
+        if (name == null) {
+            throw new InvalidValueException("The 'name' attrbiute is required");
+        }
         DataType dataType = new DataType<Class>(name, Object.class, Object.class);
         return dataType;
-    }    
+    }
 }

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java Mon Sep 18 14:38:30 2006
@@ -111,9 +111,9 @@
             Map<Class<?>, Object> metadata) {
         DataType sourceType =
                 (index == 0) ? sourceDataType
-                        : new DataType<Object>(transformer.getSourceBinding(), Object.class, null);
+                        : new DataType<Object>(transformer.getSourceDataBinding(), Object.class, null);
         DataType targetType =
-                (index == size - 1) ? targetDataType : new DataType<Object>(transformer.getTargetBinding(),
+                (index == size - 1) ? targetDataType : new DataType<Object>(transformer.getTargetDataBinding(),
                         Object.class, null);
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         TransformationContext context = new TransformationContextImpl(sourceType, targetType, classLoader, metadata);

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformerRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformerRegistryImpl.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformerRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformerRegistryImpl.java Mon Sep 18 14:38:30 2006
@@ -39,7 +39,7 @@
     }
 
     public void registerTransformer(Transformer transformer) {
-        graph.addEdge(transformer.getSourceBinding(), transformer.getTargetBinding(), transformer, transformer.getWeight());
+        graph.addEdge(transformer.getSourceDataBinding(), transformer.getTargetDataBinding(), transformer, transformer.getWeight());
     }
 
     public boolean unregisterTransformer(String sourceType, String resultType) {

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/PipedTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/PipedTransformer.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/PipedTransformer.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/PipedTransformer.java Mon Sep 18 14:38:30 2006
@@ -24,10 +24,10 @@
 import org.apache.tuscany.databinding.PullTransformer;
 
 /**
- *
- * @param <S>
- * @param <I>
- * @param <R>
+ * A utility class to connect PushTransformer and DataPipe to create a PullTransformer
+ * @param <S> Source type
+ * @param <I> Intermidate type
+ * @param <R> Result type
  */
 public class PipedTransformer<S, I, R> implements PullTransformer<S, R> {
     private PushTransformer<S, I> pusher;
@@ -49,12 +49,12 @@
         return pipe.getResult();
     }
 
-    public String getSourceBinding() {
-        return pusher.getSourceBinding();
+    public String getSourceDataBinding() {
+        return pusher.getSourceDataBinding();
     }
 
-    public String getTargetBinding() {
-        return pipe.getTargetBinding();
+    public String getTargetDataBinding() {
+        return pipe.getTargetDataBinding();
     }
 
     public int getWeight() {

Added: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java?view=auto&rev=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java (added)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java Mon Sep 18 14:38:30 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.impl;
+
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.spi.loader.InvalidValueException;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.easymock.EasyMock;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+/**
+ * Testcase for DataBindingLoader
+ */
+public class DataBindingLoaderTestCase extends TestCase {
+    private XMLStreamReader reader;
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public final void testLoad() throws LoaderException, XMLStreamException {
+        reader = EasyMock.createMock(XMLStreamReader.class);
+        // EasyMock.expect(reader.getEventType()).andReturn(XMLStreamConstants.START_ELEMENT);
+        EasyMock.expect(reader.hasNext()).andReturn(true).anyTimes();
+        EasyMock.expect(reader.getName()).andReturn(DataTypeLoader.DATA_BINDING);
+        EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("ABC");
+        EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
+        EasyMock.replay(reader);
+
+        ModelObject mo = new DataTypeLoader(null).load(null, reader, null);
+        Assert.assertTrue(mo instanceof DataType);
+        Assert.assertEquals("ABC", ((DataType<?>) mo).getDataBinding());
+        EasyMock.verify(reader);
+
+        EasyMock.reset(reader);
+        
+        // EasyMock.expect(reader.getEventType()).andReturn(XMLStreamConstants.START_ELEMENT);
+        EasyMock.expect(reader.hasNext()).andReturn(true).anyTimes();
+        EasyMock.expect(reader.getName()).andReturn(DataTypeLoader.DATA_BINDING);
+        EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn(null);
+        EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
+        EasyMock.replay(reader);        
+        try {
+            mo = new DataTypeLoader(null).load(null, reader, null);
+            Assert.fail("InvalidValueException should have been thrown");
+        } catch (InvalidValueException e) {
+            Assert.assertTrue(true);
+        }
+        EasyMock.verify(reader);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingLoaderTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/TransformerRegistryImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/TransformerRegistryImplTestCase.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/TransformerRegistryImplTestCase.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/TransformerRegistryImplTestCase.java Mon Sep 18 14:38:30 2006
@@ -54,8 +54,8 @@
 
     public void testRegisterTransformerTransformer() {
         Transformer transformer = createMock(Transformer.class);
-        expect(transformer.getSourceBinding()).andReturn("a");
-        expect(transformer.getTargetBinding()).andReturn("b");
+        expect(transformer.getSourceDataBinding()).andReturn("a");
+        expect(transformer.getTargetDataBinding()).andReturn("b");
         expect(transformer.getWeight()).andReturn(10);
         replay(transformer);
         registry.registerTransformer(transformer);
@@ -74,19 +74,19 @@
 
     public void testGetTransformerChain() {
         Transformer t1 = createMock(Transformer.class);
-        expect(t1.getSourceBinding()).andReturn("a");
-        expect(t1.getTargetBinding()).andReturn("b");
+        expect(t1.getSourceDataBinding()).andReturn("a");
+        expect(t1.getTargetDataBinding()).andReturn("b");
         expect(t1.getWeight()).andReturn(10);
         replay(t1);
         Transformer t2 = createMock(Transformer.class);
-        expect(t2.getSourceBinding()).andReturn("b");
-        expect(t2.getTargetBinding()).andReturn("c");
+        expect(t2.getSourceDataBinding()).andReturn("b");
+        expect(t2.getTargetDataBinding()).andReturn("c");
         expect(t2.getWeight()).andReturn(20);
         replay(t2);
 
         Transformer t3 = createMock(Transformer.class);
-        expect(t3.getSourceBinding()).andReturn("a");
-        expect(t3.getTargetBinding()).andReturn("c");
+        expect(t3.getSourceDataBinding()).andReturn("a");
+        expect(t3.getTargetDataBinding()).andReturn("c");
         expect(t3.getWeight()).andReturn(120);
         replay(t3);
 

Added: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java?view=auto&rev=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java (added)
+++ incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java Mon Sep 18 14:38:30 2006
@@ -0,0 +1,89 @@
+/*
+ * 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.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.databinding.trax.Node2Writer;
+import org.apache.tuscany.databinding.xml.DOMHelper;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * Test case for DataPipe
+ */
+public class DataPipeTestCase extends TestCase {
+
+    public final void testStreamPipe() throws IOException {
+        byte[] bytes = new byte[] { 1, 2, 3 };
+        StreamDataPipe pipe = new StreamDataPipe();
+        Assert.assertSame(OutputStream.class, pipe.getSourceType());
+        Assert.assertSame(InputStream.class, pipe.getTargetType());
+        OutputStream os = pipe.getSink();
+        os.write(bytes);
+        byte[] newBytes = new byte[16];
+        int count = pipe.getResult().read(newBytes);
+        Assert.assertEquals(3, count);
+        for (int i = 0; i < bytes.length; i++) {
+            Assert.assertEquals(bytes[i], newBytes[i]);
+        }
+    }
+
+    public final void testWriter2ReaderPipe() throws IOException {
+        String str = "ABC";
+        Writer2ReaderDataPipe pipe = new Writer2ReaderDataPipe();
+        Assert.assertSame(Writer.class, pipe.getSourceType());
+        Assert.assertSame(Reader.class, pipe.getTargetType());
+        pipe.getSink().write(str);
+        char[] buf = new char[16];
+        int count = pipe.getResult().read(buf);
+        Assert.assertEquals(3, count);
+        for (int i = 0; i < str.length(); i++) {
+            Assert.assertEquals(str.charAt(i), buf[i]);
+        }
+    }
+
+    public final void testPiped() throws Exception {
+        Node2Writer node2Writer = new Node2Writer();
+        Writer2ReaderDataPipe pipe = new Writer2ReaderDataPipe();
+        PipedTransformer<Node, Writer, Reader> transformer =
+                new PipedTransformer<Node, Writer, Reader>(node2Writer, pipe);
+        Document document = DOMHelper.newDocument();
+        Element element = document.createElementNS("http://ns1", "root");
+        document.appendChild(element);
+        Reader reader = transformer.transform(document, null);
+        Assert.assertEquals(transformer.getWeight(), node2Writer.getWeight() + pipe.getWeight());
+        Assert.assertEquals(transformer.getSourceDataBinding(), node2Writer.getSourceDataBinding());
+        Assert.assertEquals(transformer.getTargetDataBinding(), pipe.getTargetDataBinding());
+        char[] buf = new char[120];
+        int count = reader.read(buf);
+        String xml = new String(buf, 0, count);
+        Assert.assertTrue(xml.contains("<root xmlns=\"http://ns1\"/>"));
+    }
+
+}

Propchange: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DataPipeTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java Mon Sep 18 14:38:30 2006
@@ -36,6 +36,8 @@
 public class DataObject2String extends TransformerExtension<DataObject, String> implements
         PullTransformer<DataObject, String> {
 
+    private static final String TUSCANY_SDO = "http://tuscany.apache.org/xmlns/sdo/1.0-SNAPSHOT";
+
     public String transform(DataObject source, TransformationContext context) {
         try {
             TypeHelper typeHelper = SDODataTypeHelper.getTypeHelper(context);
@@ -45,7 +47,7 @@
                 QName elementName = (QName) logicalType;
                 return xmlHelper.save(source, elementName.getNamespaceURI(), elementName.getLocalPart());
             } else {
-                return xmlHelper.save(source, "commonj.sdo", "dataObject");
+                return xmlHelper.save(source, TUSCANY_SDO, "dataObject");
             }
         } catch (Exception e) {
             throw new TransformationException(e);

Modified: incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/DataObject2StringTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/DataObject2StringTestCase.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/DataObject2StringTestCase.java (original)
+++ incubator/tuscany/java/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/DataObject2StringTestCase.java Mon Sep 18 14:38:30 2006
@@ -51,4 +51,13 @@
         Assert.assertEquals("San Jose", orderType.getBillTo().getCity());
     }
 
+    public final void testXML() {
+        String xml =
+                "<foo xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ipo=\"http://www.example.com/IPO\" xsi:type=\"ipo:USAddress\"/>";
+        DataObject dataObject = new String2DataObject().transform(xml, reversedContext);
+        context.setSourceDataType(new DataType<QName>(DataObject.class.getName(), DataObject.class, null));
+        xml = new DataObject2String().transform(dataObject, context);
+        Assert.assertTrue(xml.contains("xsi:type=\"ipo:USAddress\""));
+    }
+
 }

Modified: incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLLoader.java?view=diff&rev=447579&r1=447578&r2=447579
==============================================================================
--- incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLLoader.java (original)
+++ incubator/tuscany/java/sca/services/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLLoader.java Mon Sep 18 14:38:30 2006
@@ -19,9 +19,13 @@
 package org.apache.tuscany.idl.wsdl;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.wsdl.PortType;
 import javax.wsdl.WSDLException;
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -38,6 +42,9 @@
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.LoaderUtil;
 import org.apache.tuscany.spi.loader.MissingResourceException;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.apache.tuscany.spi.model.ServiceContract;
 
 /**
  * Loads a WSDL interface definition from an XML-based assembly file
@@ -81,9 +88,23 @@
 
         String callbackURI = reader.getAttributeValue(null, "callbackInterface");
         String wsdlLocation = reader.getAttributeValue(WSDLI, WSDLI_LOCATION);
+        
+        Map<Class<?>, ModelObject> extensions = new HashMap<Class<?>, ModelObject>();
+        while (true) {
+            int event = reader.next();
+            if (event == XMLStreamConstants.START_ELEMENT) {
+                ModelObject mo = registry.load(parent, reader, deploymentContext);
+                if (mo != null) {
+                    extensions.put(mo.getClass(), mo);
+                }
+            } else if (event == XMLStreamConstants.END_ELEMENT) {
+                if (reader.getName().equals(INTERFACE_WSDL)) {
+                    break;
+                }
+            }
+        }        
         // FIXME set the interaction scope
         // serviceContract.setInteractionScope(StAXUtil.interactionScope(reader.getAttributeValue(null, "scope")));
-        LoaderUtil.skipToEndElement(reader);
 
         if (wsdlLocation != null) {
             try {
@@ -108,7 +129,13 @@
             callback = getPortType(callbackURI);
         }
         try {
-            return introspector.introspect(portType, callback);
+            WSDLServiceContract contract = introspector.introspect(portType, callback);
+            DataType<?> dataType = (DataType<?>) extensions.get(DataType.class);
+            if (dataType != null) {
+                contract.setDataBinding(dataType.getDataBinding());
+            }
+            contract.getExtensions().putAll(extensions);
+            return contract;
         } catch (InvalidServiceContractException e) {
             LoaderException le = new LoaderException(e);
             le.setIdentifier(wsdlLocation);



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