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/08 23:37:45 UTC

svn commit: r441661 [1/2] - in /incubator/tuscany/java/sca: databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ databinding/databinding-axiom/src/main/resources/ databinding/databinding-axiom/src/main/resources/META-INF/ d...

Author: rfeng
Date: Fri Sep  8 14:37:43 2006
New Revision: 441661

URL: http://svn.apache.org/viewvc?view=rev&rev=441661
Log:
Integrate databinding with the core as interceptors (please see my mailing list post for more info)

Added:
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java   (with props)
    incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java   (with props)
Modified:
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java
    incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.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/DataBindingRegistry.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/extension/TransformerExtension.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.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/java/org/apache/tuscany/databinding/xml/String2Node.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/MediatorImplTestCase.java
    incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java
    incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java
    incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java
    incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InvocationChainImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireService.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorPostProcessTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImplTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/idl/java/JavaIDLUtils.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/Operation.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/ServiceContract.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InvocationChain.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/idl/java/JavaIDLUtilsTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/model/ServiceContractTestCase.java
    incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/ArtifactFactory.java

Added: 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=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,37 @@
+/*
+ * 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.axiom;
+
+import org.apache.axiom.om.OMNode;
+import org.apache.tuscany.databinding.DataBinding;
+import org.apache.tuscany.databinding.extension.DataBindingExtension;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * DataBinding for AXIOM
+ */
+@Service(DataBinding.class)
+public class AxiomDataBinding extends DataBindingExtension {
+
+    public AxiomDataBinding() {
+        super(OMNode.class);
+    }
+
+}

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

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

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2String.java Fri Sep  8 14:37:43 2006
@@ -26,8 +26,14 @@
 import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.TransformationException;
 import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
 import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
 
+/**
+ * Transformer to convert data from an OMElement to XML String
+ */
+@Service(Transformer.class)
 public class OMElement2String extends TransformerExtension<OMElement, String> implements PullTransformer<OMElement, String> {
     // private XmlOptions options;
     

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElement2XMLStreamReader.java Fri Sep  8 14:37:43 2006
@@ -23,8 +23,11 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
 import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
 
+@Service(Transformer.class)
 public class OMElement2XMLStreamReader extends TransformerExtension<OMElement, XMLStreamReader> implements PullTransformer<OMElement, XMLStreamReader> {
     // private XmlOptions options;
     

Added: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/ObjectArray2OM.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,106 @@
+/*
+ * 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.axiom;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNode;
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.Transformer;
+import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.model.DataType;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * 
+ */
+@Service(Transformer.class)
+public class ObjectArray2OM extends TransformerExtension<Object[], OMElement> implements
+        PullTransformer<Object[], OMElement> {
+
+    private Mediator mediator;
+
+    /**
+     * 
+     */
+    public ObjectArray2OM() {
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
+     */
+    @Override
+    protected Class getSourceType() {
+        return Object[].class;
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.extension.TransformerExtension#getTargetType()
+     */
+    @Override
+    protected Class getTargetType() {
+        return OMElement.class;
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.Transformer#getWeight()
+     */
+    public int getWeight() {
+        return 10;
+    }
+
+    @SuppressWarnings("unchecked")
+    public OMElement transform(Object[] source, TransformationContext context) {
+        DataType<List<DataType<QName>>> targetType = context.getTargetDataType();
+        DataType<List<DataType<Class>>> sourceType = context.getSourceDataType();
+        OMFactory factory = OMAbstractFactory.getOMFactory();
+        QName elementName = (QName) targetType.getMetadata("element.name");
+        OMElement element = factory.createOMElement(elementName, null);
+        if (source == null)
+            return null;
+        for (int i = 0; i < source.length; i++) {
+            Object child = mediator.mediate(source[i], sourceType.getLogical().get(i), targetType.getLogical().get(i));
+            if (child instanceof OMNode) {
+                element.addChild((OMNode) child);
+            } else {
+                OMElement childElement = factory.createOMElement(targetType.getLogical().get(i).getLogical(), element);
+                factory.createOMText(childElement, child.toString());
+            }
+        }
+        return element;
+    }
+
+    /**
+     * @param mediator the mediator to set
+     */
+    @Autowire
+    public void setMediator(Mediator mediator) {
+        this.mediator = mediator;
+    }
+
+}

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

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

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java Fri Sep  8 14:37:43 2006
@@ -25,8 +25,11 @@
 import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.TransformationException;
 import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
 import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
 
+@Service(Transformer.class)
 public class String2OMElement extends TransformerExtension<String, OMElement> implements PullTransformer<String, OMElement> {
 
     public OMElement transform(String source, TransformationContext context) {

Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java Fri Sep  8 14:37:43 2006
@@ -25,9 +25,16 @@
 import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.TransformationException;
 import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
 import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.osoa.sca.annotations.Service;
 
+@Service(Transformer.class)
 public class XMLStreamReader2OMElement extends TransformerExtension<XMLStreamReader, OMElement> implements PullTransformer<XMLStreamReader, OMElement> {
+
+    public XMLStreamReader2OMElement() {
+        super();
+    }
 
     public OMElement transform(XMLStreamReader source, TransformationContext context) {
         try {

Added: 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=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl (added)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl Fri Sep  8 14:37:43 2006
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    *  Copyright (c) 2006 The Apache Software Foundation or its licensors, as applicable.
+    *
+    *  Licensed 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
+    name="org.apache.tuscany.databinding.Axiom">
+
+    <component name="databinding.axiom">
+        <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.ObjectArray2OM" />
+    </component>
+    
+    <component name="transformer.XMLStreamReader2OMElement">
+        <system:implementation.system class="org.apache.tuscany.databinding.axiom.XMLStreamReader2OMElement" />
+    </component>
+    
+    <component name="transformer.OMElement2XMLStreamReader">
+        <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElement2XMLStreamReader" />
+    </component>
+    
+    <component name="transformer.String2OMElement">
+        <system:implementation.system class="org.apache.tuscany.databinding.axiom.String2OMElement" />
+    </component>
+    
+    <component name="transformer.OMElement2String">
+        <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElement2String" />
+    </component>    
+</composite>
\ No newline at end of file

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=441661&r1=441660&r2=441661
==============================================================================
--- 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 Fri Sep  8 14:37:43 2006
@@ -22,20 +22,29 @@
 import org.apache.tuscany.spi.model.DataType;
 
 /**
- * DataBinding represents a data format provider, for example, SDO, JAXB and AXIOM
+ * DataBinding represents a data representation, for example, SDO, JAXB and AXIOM
  */
 public interface DataBinding {
     /**
      * The name of a databinding should be case-insensitive and unique
+     * 
      * @return The name of the databinding
      */
     String getName();
-    
+
     /**
      * Introspect a java class or interface to create a DataType model
+     * 
      * @param javaType The java class or interface to be introspected
-     * @return The newly created DataType or null if the java type is not supported 
-     * by this databinding
+     * @return The DataType or null if the java type is not supported by this databinding
      */
     DataType introspect(Class<?> javaType);
+
+    /**
+     * Introspect the data to figure out the corresponding data type
+     * 
+     * @param value The object to be checked
+     * @return The DataType or null if the java type is not supported by this databinding
+     */
+    DataType introspect(Object value);
 }

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBindingRegistry.java Fri Sep  8 14:37:43 2006
@@ -48,5 +48,6 @@
      * @param javaType The java class or interface
      * @return
      */
-    public DataType<?> introspectType(Class<?> javaType);
+    public DataType introspectType(Class<?> javaType);
+    public DataType introspectType(Object value);
 }

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=441661&r1=441660&r2=441661
==============================================================================
--- 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 Fri Sep  8 14:37:43 2006
@@ -22,11 +22,14 @@
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.model.DataType;
 import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
 
 /**
  * Base Implementation of DataBinding
  */
-@org.osoa.sca.annotations.Scope("MODULE")
+@Scope("MODULE")
+@Service(DataBinding.class)
 public abstract class DataBindingExtension implements DataBinding {
     protected DataBindingRegistry registry;
 
@@ -35,22 +38,19 @@
     protected String name = null;
 
     /**
-     * Create a databinding with the base java type whose name will be used as the name of 
-     * the databinding
+     * Create a databinding with the base java type whose name will be used as the name of the databinding
      * 
-     * @param baseType The base java class or interface representing the databinding, 
-     * for example, org.w3c.dom.Node
+     * @param baseType The base java class or interface representing the databinding, for example, org.w3c.dom.Node
      */
     protected DataBindingExtension(Class<?> baseType) {
         this(baseType.getName(), baseType);
     }
 
     /**
-     * Create a databinding with the name and base java type 
-     *
+     * Create a databinding with the name and base java type
+     * 
      * @param name The name of the databinding
-     * @param baseType The base java class or interface representing the databinding, 
-     * for example, org.w3c.dom.Node
+     * @param baseType The base java class or interface representing the databinding, for example, org.w3c.dom.Node
      */
     protected DataBindingExtension(String name, Class<?> baseType) {
         this.name = name;
@@ -73,6 +73,14 @@
             return dataType;
         } else {
             return null;
+        }
+    }
+
+    public DataType introspect(Object value) {
+        if (value == null) {
+            return null;
+        } else {
+            return introspect(value.getClass());
         }
     }
 

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/TransformerExtension.java Fri Sep  8 14:37:43 2006
@@ -21,11 +21,13 @@
 import org.apache.tuscany.databinding.TransformerRegistry;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Service;
 
 /**
  * Base Implementation of Transformer which provides the registration to the transformer registry
  */
 @org.osoa.sca.annotations.Scope("MODULE")
+@Service(Transformer.class)
 public abstract class TransformerExtension<S, T> implements Transformer {
 
     protected TransformerRegistry registry;
@@ -55,5 +57,9 @@
         return getTargetType().getName();
     }
 
+    public int getWeight() {
+        // default to 50
+        return 50;
+    }    
     
 }

Added: 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=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,109 @@
+/*
+ * 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 org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.RuntimeWire;
+
+/**
+ * An interceptor to transform data accross databindings on the wire
+ */
+public class DataBindingInteceptor implements Interceptor {
+    private Interceptor next;
+
+    private RuntimeWire<?> sourceWire; // NOPMD by rfeng on 8/29/06 10:15 AM
+
+    private RuntimeWire<?> targetWire; // NOPMD by rfeng on 8/29/06 10:15 AM
+
+    private Operation<?> sourceOperation;
+
+    private Operation<?> targetOperation;
+
+    private Mediator mediator;
+
+    public DataBindingInteceptor(RuntimeWire<?> sourceWire, Operation<?> sourceOperation, RuntimeWire<?> targetWire,
+            Operation<?> targetOperation) {
+        super();
+        this.sourceWire = sourceWire;
+        this.sourceOperation = sourceOperation;
+        this.targetWire = targetWire;
+        this.targetOperation = targetOperation;
+    }
+
+    /**
+     * @see org.apache.tuscany.spi.wire.Interceptor#getNext()
+     */
+    public Interceptor getNext() {
+        return next;
+    }
+
+    /**
+     * @see org.apache.tuscany.spi.wire.Interceptor#invoke(org.apache.tuscany.spi.wire.Message)
+     */
+    @SuppressWarnings("unchecked")
+    public Message invoke(Message msg) {
+        Object input = transform(msg.getBody(), sourceOperation.getInputType(), targetOperation.getInputType());
+        msg.setBody(input);
+        Message resultMsg = next.invoke(msg);
+        Object result = resultMsg.getBody();
+        if (result != null) {
+            result = transform(result, targetOperation.getOutputType(), sourceOperation.getOutputType());
+            resultMsg.setBody(result);
+        }
+        return resultMsg;
+    }
+
+    private Object transform(Object source, DataType sourceType, DataType targetType) {
+        if (source == null) {
+            // Shortcut for null value
+            return null;
+        }
+        if (sourceType == targetType || (sourceType != null && sourceType.equals(targetType))) {
+            return source;
+        }
+        return mediator.mediate(source, sourceType, targetType);
+    }
+
+    /**
+     * @see org.apache.tuscany.spi.wire.Interceptor#isOptimizable()
+     */
+    public boolean isOptimizable() {
+        return false;
+    }
+
+    /**
+     * @see org.apache.tuscany.spi.wire.Interceptor#setNext(org.apache.tuscany.spi.wire.Interceptor)
+     */
+    public void setNext(Interceptor next) {
+        this.next = next;
+    }
+
+    /**
+     * @param mediator the mediator to set
+     */
+    public void setMediator(Mediator mediator) {
+        this.mediator = mediator;
+    }
+
+}

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

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

Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,74 @@
+/*
+ * 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 java.lang.reflect.Method;
+
+import org.apache.tuscany.api.annotation.DataContext;
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+
+/**
+ * The databinding annotation processor for java interfaces
+ */
+public class DataBindingJavaInterfaceProcessor extends JavaInterfaceProcessorExtension {
+
+    /**
+     * @see org.apache.tuscany.spi.idl.java.JavaInterfaceProcessor#visitInterface(java.lang.Class,
+     *      org.apache.tuscany.spi.idl.java.JavaServiceContract)
+     */
+    public void visitInterface(Class<?> clazz, JavaServiceContract contract) throws InvalidServiceContractException {
+        DataType interfaceDataType = clazz.getAnnotation(DataType.class);
+        if (interfaceDataType != null) {
+            contract.setDataBinding(interfaceDataType.name());
+            // FIXME: [rfeng] Keep data context as metadata?
+            for (DataContext c : interfaceDataType.context()) {
+                contract.addMetaData(c.key(), c.value());
+            }
+        }
+        for (Method method : clazz.getMethods()) {
+            DataType operationDataType = method.getAnnotation(DataType.class);
+            if (operationDataType == null) {
+                operationDataType = interfaceDataType;
+            }
+            if (operationDataType != null) {
+                Operation<?> operation = contract.getOperations().get(method.getName());
+                String dataBinding = operationDataType.name();
+                operation.setDataBinding(dataBinding);
+                // FIXME: [rfeng] Keep data context as metadata?
+                for (DataContext c : operationDataType.context()) {
+                    operation.addMetaData(c.key(), c.value());
+                }
+                for (org.apache.tuscany.spi.model.DataType<?> d : operation.getInputType().getLogical()) {
+                    d.setDataBinding(dataBinding);
+                }
+                if (operation.getOutputType() != null) {
+                    operation.getOutputType().setDataBinding(dataBinding);
+                }
+                for (org.apache.tuscany.spi.model.DataType<?> d : operation.getFaultTypes()) {
+                    d.setDataBinding(dataBinding);
+                }
+            }
+        }
+    }
+}

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

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

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java Fri Sep  8 14:37:43 2006
@@ -56,9 +56,8 @@
     public void init() {
     }
 
-    @SuppressWarnings("unchecked")
-    public DataType<?> introspectType(Class<?> javaType) {
-        DataType<?> dataType = null;
+    public DataType introspectType(Class<?> javaType) {
+        DataType dataType = null;
         for (DataBinding binding : bindings.values()) {
             dataType = binding.introspect(javaType);
             if (dataType != null) {
@@ -67,5 +66,15 @@
         }
         return null;
     }
+
+    public DataType introspectType(Object value) {
+        DataType dataType = null;
+        for (DataBinding binding : bindings.values()) {
+            dataType = binding.introspect(value);
+            if (dataType != null) {
+                return dataType;
+            }
+        }
+        return null;    }
 
 }

Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,112 @@
+/*
+ * 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 java.util.Map;
+import java.util.Set;
+
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.builder.WirePostProcessorExtension;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
+import org.osoa.sca.annotations.Constructor;
+
+/**
+ * This processor is responsible to add an interceptor to invocation chain if the
+ * source and target operations have different databinding requirements 
+ */
+public class DataBindingWirePostProcessor extends WirePostProcessorExtension {
+    private Mediator mediator;
+
+    @Constructor( {"mediator" })
+    public DataBindingWirePostProcessor(@Autowire Mediator mediator) {
+        super();
+        this.mediator = mediator;
+    }
+
+    /**
+     * @see org.apache.tuscany.spi.builder.WirePostProcessor#process(org.apache.tuscany.spi.wire.OutboundWire,
+     *      org.apache.tuscany.spi.wire.InboundWire)
+     */
+    public <T> void process(OutboundWire<T> source, InboundWire<T> target) {
+        Map<Operation<?>, OutboundInvocationChain> chains = source.getInvocationChains();
+        for (Map.Entry<Operation<?>, OutboundInvocationChain> entry : chains.entrySet()) {
+            Operation<?> sourceOperation = entry.getKey();
+            Operation<?> targetOperation =
+                    getTargetOperation(target.getInvocationChains().keySet(), sourceOperation.getName());
+            String sourceDataBinding = getDataBinding(sourceOperation);
+            String targetDataBinding = getDataBinding(targetOperation);
+            if (!sourceDataBinding.equals(targetDataBinding)) {
+                // Add the interceptor to the source side because multiple references can be wired
+                // to the same service
+                DataBindingInteceptor interceptor =
+                        new DataBindingInteceptor(source, sourceOperation, target, targetOperation);
+                interceptor.setMediator(mediator);
+                entry.getValue().addInterceptor(0, interceptor);
+            }
+        }
+    }
+
+    /**
+     * @see org.apache.tuscany.spi.builder.WirePostProcessor#process(org.apache.tuscany.spi.wire.InboundWire,
+     *      org.apache.tuscany.spi.wire.OutboundWire)
+     */
+    public <T> void process(InboundWire<T> source, OutboundWire<T> target) {
+        Map<Operation<?>, InboundInvocationChain> chains = source.getInvocationChains();
+        for (Map.Entry<Operation<?>, InboundInvocationChain> entry : chains.entrySet()) {
+            Operation<?> sourceOperation = entry.getKey();
+            Operation<?> targetOperation =
+                getTargetOperation(target.getInvocationChains().keySet(), sourceOperation.getName());
+            String sourceDataBinding = getDataBinding(sourceOperation);
+            String targetDataBinding = getDataBinding(targetOperation);
+            if (!sourceDataBinding.equals(targetDataBinding)) {
+                // Add the interceptor to the source side
+                DataBindingInteceptor interceptor =
+                        new DataBindingInteceptor(source, sourceOperation, target, targetOperation);
+                interceptor.setMediator(mediator);
+                entry.getValue().addInterceptor(0, interceptor);
+            }
+        }
+    }
+
+    private Operation getTargetOperation(Set<Operation<?>> operations, String operationName) {
+        for (Operation<?> op : operations) {
+            if (op.getName().equals(operationName)) {
+                return op;
+            }
+        }
+        return null;
+    }
+
+    private String getDataBinding(Operation<?> operation) {
+        String dataBinding = operation.getDataBinding();
+        if (dataBinding == null) {
+            ServiceContract<?> serviceContract = operation.getServiceContract();
+            dataBinding = serviceContract.getDataBinding();
+        }
+        return dataBinding;
+    }
+
+}

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

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

Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,104 @@
+/*
+ * 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 java.util.List;
+
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.Transformer;
+import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.model.DataType;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * This is a special transformer to convert java parameters by the inputType 
+ */
+@Service(Transformer.class)
+public class JavaParametersTransformer extends TransformerExtension<Object[], Object[]> implements
+        PullTransformer<Object[], Object[]> {
+
+    @Override
+    public String getSourceBinding() {
+        return "java:parameters";
+    }
+
+    @Override
+    public String getTargetBinding() {
+        return "java:parameters";
+    }
+
+    private Mediator mediator;
+
+    /**
+     * 
+     */
+    public JavaParametersTransformer() {
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
+     */
+    @Override
+    protected Class getSourceType() {
+        return Object[].class;
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.extension.TransformerExtension#getTargetType()
+     */
+    @Override
+    protected Class getTargetType() {
+        return Object[].class;
+    }
+
+    /**
+     * @see org.apache.tuscany.databinding.Transformer#getWeight()
+     */
+    public int getWeight() {
+        return 10;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Object[] transform(Object[] source, TransformationContext context) {
+        List sourceParameterTypes = (List) context.getSourceDataType().getLogical();
+        List targetParameterTypes = (List) context.getTargetDataType().getLogical();
+        Object[] args = source;
+        if (args != null) {
+            Object[] newArgs = new Object[args.length];
+            for (int i = 0; i < sourceParameterTypes.size(); i++) {
+                newArgs[i] = mediator.mediate(args[i], (DataType) sourceParameterTypes.get(i), (DataType) targetParameterTypes.get(i));
+            }
+            return newArgs;
+        }
+        return null;
+    }
+
+    /**
+     * @param mediator the mediator to set
+     */
+    @Autowire
+    public void setMediator(Mediator mediator) {
+        this.mediator = mediator;
+    }
+
+}

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

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

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java Fri Sep  8 14:37:43 2006
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.tuscany.databinding.DataBindingRegistry;
 import org.apache.tuscany.databinding.DataPipe;
 import org.apache.tuscany.databinding.Mediator;
 import org.apache.tuscany.databinding.PullTransformer;
@@ -39,6 +40,8 @@
 @Scope("MODULE")
 public class MediatorImpl implements Mediator {
 
+    private DataBindingRegistry dataBindingRegistry;
+
     private TransformerRegistry transformerRegistry;
 
     @Autowire
@@ -47,25 +50,48 @@
     }
 
     /**
+     * @param dataBindingRegistry the dataBindingRegistry to set
+     */
+    @Autowire
+    public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
+        this.dataBindingRegistry = dataBindingRegistry;
+    }
+
+    /**
      * @see org.apache.tuscany.databinding.Mediator#mediate(java.lang.Object, org.apache.tuscany.spi.model.DataType,
      *      org.apache.tuscany.spi.model.DataType)
      */
     @SuppressWarnings("unchecked")
     public Object mediate(Object source, DataType sourceDataType, DataType targetDataType) {
+        if (source == null) {
+            // Shortcut for null value
+            return null;
+        }
+        if (sourceDataType == null) {
+            sourceDataType = dataBindingRegistry.introspectType(source);
+        }
+        if (sourceDataType == null) {
+            return source;
+        } else if (sourceDataType.equals(targetDataType)) {
+            return source;
+        }
+
         List<Transformer> path = getTransformerChain(sourceDataType, targetDataType);
-        
+
         Object result = source;
         for (Iterator<Transformer> i = path.iterator(); i.hasNext();) {
             Transformer transformer = i.next();
             // FIXME: We probably need to reset the context for each transformation on the path to reflect
             // the source and target type
             if (transformer instanceof PullTransformer) {
-                TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
-                        .getContextClassLoader());
+                TransformationContext context =
+                        new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+                                .getContextClassLoader());
                 result = ((PullTransformer) transformer).transform(result, context);
             } else if (transformer instanceof PushTransformer) {
-                TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
-                        .getContextClassLoader());
+                TransformationContext context =
+                        new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+                                .getContextClassLoader());
                 DataPipe dataPipe = i.hasNext() ? (DataPipe) i.next() : null;
                 ((PushTransformer) transformer).transform(result, dataPipe.getSink(), context);
                 result = dataPipe.getResult();
@@ -77,18 +103,33 @@
 
     @SuppressWarnings("unchecked")
     public void mediate(Object source, Object target, DataType sourceDataType, DataType targetDataType) {
+        if (source == null) {
+            // Shortcut for null value
+            return;
+        }
+        if (sourceDataType == null) {
+            sourceDataType = dataBindingRegistry.introspectType(source);
+        }
+        if (sourceDataType == null) {
+            return;
+        } else if (sourceDataType.equals(targetDataType)) {
+            return;
+        }
+
         List<Transformer> path = getTransformerChain(sourceDataType, targetDataType);
 
         Object result = source;
         for (Iterator<Transformer> i = path.iterator(); i.hasNext();) {
             Transformer transformer = i.next();
             if (transformer instanceof PullTransformer) {
-                TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
-                        .getContextClassLoader());
+                TransformationContext context =
+                        new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+                                .getContextClassLoader());
                 result = ((PullTransformer) transformer).transform(result, context);
             } else if (transformer instanceof PushTransformer) {
-                TransformationContext context = new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
-                        .getContextClassLoader());
+                TransformationContext context =
+                        new TransformationContextImpl(sourceDataType, targetDataType, Thread.currentThread()
+                                .getContextClassLoader());
                 DataPipe dataPipe = i.hasNext() ? (DataPipe) i.next() : null;
                 Object sink = dataPipe != null ? dataPipe.getSink() : target;
                 ((PushTransformer) transformer).transform(result, sink, context);
@@ -109,5 +150,4 @@
         }
         return path;
     }
-
 }

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/util/DirectedGraph.java Fri Sep  8 14:37:43 2006
@@ -229,6 +229,17 @@
         VertexPair pair = new VertexPair(source, target);
         if (paths.containsKey(pair))
             return paths.get(pair);
+        
+        // HACK: To support same vertex
+        if (source == target) {
+            Path path = new Path();
+            Edge edge = getEdge(source, target);
+            if (edge != null) {
+                path.addEdge(edge);
+            }
+            paths.put(pair, path);
+            return path;
+        }
 
         Map<Vertex, Node> nodes = new HashMap<Vertex, Node>();
         for (Vertex v : vertices.values()) {

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=441661&r1=441660&r2=441661
==============================================================================
--- 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 Fri Sep  8 14:37:43 2006
@@ -21,7 +21,9 @@
 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.osoa.sca.annotations.Service;
 import org.w3c.dom.Node;
 import org.w3c.dom.ls.DOMImplementationLS;
 import org.w3c.dom.ls.LSSerializer;
@@ -30,6 +32,7 @@
  * Transform DOM Node to XML String
  *
  */
+@Service(Transformer.class)
 public class Node2String extends TransformerExtension<Node, String> implements PullTransformer<Node, String> {
 
     public String transform(Node source, TransformationContext context) {

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/String2Node.java Fri Sep  8 14:37:43 2006
@@ -25,10 +25,13 @@
 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.osoa.sca.annotations.Service;
 import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
 
+@Service(Transformer.class)
 public class String2Node extends TransformerExtension<String, Node> implements PullTransformer<String, Node> {
 
     public Node transform(String source, TransformationContext context) {

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=441661&r1=441660&r2=441661
==============================================================================
--- 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 Fri Sep  8 14:37:43 2006
@@ -15,15 +15,28 @@
     *  limitations under the License.
 -->
 <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
-    name="org.apache.tuscany.launcher.DataBinding">
+    name="org.apache.tuscany.databinding.Framework">
+
+    <component name="databinding.wirePostProcessor">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingWirePostProcessor"/>
+    </component>    
+
+    <component name="databinding.javaInterfaceProcessor">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingJavaInterfaceProcessor"/>
+    </component>    
 
     <!-- DataBinding registry -->
-    <component name="dataBindingRegistry">
+    <component name="databinding.registry">
         <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingRegistryImpl" />
     </component>
 
+    <!-- DataBinding registry -->
+    <component name="databinding.mediator">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.MediatorImpl" />
+    </component>    
+
     <!-- Transformer registry -->
-    <component name="transformerRegistry">
+    <component name="databinding.transformerRegistry" initLevel="90">
         <system:implementation.system class="org.apache.tuscany.databinding.impl.TransformerRegistryImpl" />
     </component>
 
@@ -35,6 +48,19 @@
     <component name="databinding.dom">
         <system:implementation.system class="org.apache.tuscany.databinding.impl.SimpleDataBinding" />
         <property name="className">org.w3c.dom.Node</property>
+    </component>
+    
+    <!-- Transformers -->
+    <component name="transformer.Node2String">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2String" />
+    </component>
+    
+    <component name="transformer.String2Node">
+        <system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
+    </component>
+
+    <component name="transformer.ObjectArray2ObjectArray">
+        <system:implementation.system class="org.apache.tuscany.databinding.impl.JavaParametersTransformer" />
     </component>
 
 </composite>

Added: 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=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,99 @@
+/*
+ * 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 static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.easymock.EasyMock;
+
+/**
+ * 
+ */
+public class DataBindingInterceptorTestCase extends TestCase {
+    private DataBindingInteceptor interceptor;
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    /**
+     * Test method for
+     * {@link org.apache.tuscany.databinding.impl.DataBindingInteceptor#invoke(org.apache.tuscany.spi.wire.Message)}.
+     */
+    public final void testInvoke() {
+        DataType<Class> type1 = new DataType<Class>("xml:string", String.class, String.class);
+        List<DataType<Class>> types1 = new ArrayList<DataType<Class>>();
+        types1.add(type1);
+        DataType<List<DataType<Class>>> inputType1 =
+                new DataType<List<DataType<Class>>>("xml:string", Object[].class, types1);
+
+        DataType<Class> type2 = new DataType<Class>("foo", Foo.class, Foo.class);
+        List<DataType<Class>> types2 = new ArrayList<DataType<Class>>();
+        types2.add(type2);
+        DataType<List<DataType<Class>>> inputType2 = new DataType<List<DataType<Class>>>("foo", Object[].class, types2);
+
+        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");
+        interceptor = new DataBindingInteceptor(null, operation1, null, operation2);
+        Mediator mediator = createMock(Mediator.class);
+        Object[] source = new Object[] { "<foo>bar</foo>" };
+        Foo foo = new Foo();
+        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]);
+        replay(mediator);
+        interceptor.setMediator(mediator);
+        Message msg = createMock(Message.class);
+        msg.setBody(EasyMock.anyObject());
+        expectLastCall().anyTimes();
+        expect(msg.getBody()).andReturn(source).once().andReturn(target[0]).once().andReturn(source[0]);
+        replay(msg);
+        Interceptor next = createMock(Interceptor.class);
+        expect(next.invoke(msg)).andReturn(msg);
+        replay(next);
+        interceptor.setNext(next);
+        interceptor.invoke(msg);
+        String result = (String) msg.getBody();
+        Assert.assertEquals(source[0], result);
+        EasyMock.verify(mediator, msg, next);
+    }
+
+    private static class Foo {
+        private String bar;
+    }
+}

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

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

Added: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=auto&rev=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java Fri Sep  8 14:37:43 2006
@@ -0,0 +1,78 @@
+/*
+ * 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 java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.api.annotation.DataContext;
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+import org.osoa.sca.annotations.Remotable;
+import org.w3c.dom.Node;
+
+/**
+ * 
+ */
+public class DataBindingJavaInterfaceProcessorTestCase extends TestCase {
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    /**
+     * 
+     * @throws InvalidServiceContractException
+     */
+    public final void testVisitInterface() throws InvalidServiceContractException {
+        DataBindingJavaInterfaceProcessor processor = new DataBindingJavaInterfaceProcessor();
+        JavaServiceContract contract = new JavaServiceContract(MockInterface.class);
+        Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>();
+        Operation<Type> operation = new Operation<Type>("call", null, null, null, false, "dummy");
+        Operation<Type> operation1 = new Operation<Type>("call1", null, null, null, false, "dummy");
+        operations.put("call", operation);
+        operations.put("call1", operation1);
+        contract.setOperations(operations);
+        processor.visitInterface(MockInterface.class, contract);
+        Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding());
+        Assert.assertEquals("element", (String) contract.getMetaData().get("nodeType")); 
+        Assert.assertEquals("org.w3c.dom.Node", contract.getOperations().get("call").getDataBinding());
+        Assert.assertEquals("xml:string", contract.getOperations().get("call1").getDataBinding());
+    }
+
+    @DataType(name = "org.w3c.dom.Node", context={@DataContext(key="nodeType", value="element")})
+    @Remotable
+    public static interface MockInterface {
+        Node call(Node msg);
+
+        @DataType(name = "xml:string")
+        String call1(String msg);
+    }
+
+}

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

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

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java Fri Sep  8 14:37:43 2006
@@ -24,6 +24,7 @@
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
+import org.apache.tuscany.databinding.DataBindingRegistry;
 import org.apache.tuscany.databinding.TransformationContext;
 import org.apache.tuscany.databinding.TransformerRegistry;
 import org.apache.tuscany.databinding.trax.Node2String;
@@ -63,6 +64,9 @@
 
         mediator = new MediatorImpl();
         mediator.setTransformerRegistry(registry);
+        
+        DataBindingRegistry dataBindingRegistry = new DataBindingRegistryImpl();
+        mediator.setDataBindingRegistry(dataBindingRegistry);
     }
 
     @SuppressWarnings("unchecked")

Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/util/DirectedGraphTestCase.java Fri Sep  8 14:37:43 2006
@@ -41,6 +41,7 @@
         graph.addEdge("c", "d", null, 2);
         graph.addEdge("d", "b", null, 1);
         graph.addEdge("a", "e", null, 8);
+        graph.addEdge("c", "c", null, 2);
     }
 
     public void testGraph() {
@@ -67,13 +68,16 @@
         Assert.assertEquals(edges.get(1), graph.getEdge("b", "c"));
 
         Assert.assertEquals(path.getWeight(), 4);
-        
+
         DirectedGraph<String, Object>.Path path2 = graph.getShortestPath("b", "e");
         Assert.assertNull(path2);
 
         DirectedGraph<String, Object>.Path path3 = graph.getShortestPath("a", "a");
-        Assert.assertTrue(path3.getWeight()==0 && path3.getEdges().isEmpty());
-        
+        Assert.assertTrue(path3.getWeight() == 0 && path3.getEdges().isEmpty());
+
+        DirectedGraph<String, Object>.Path path4 = graph.getShortestPath("c", "c");
+        Assert.assertTrue(path4.getWeight() == 2 && path4.getEdges().size() == 1);
+
         // System.out.println(path);
 
     }

Modified: incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImpl.java Fri Sep  8 14:37:43 2006
@@ -24,6 +24,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.wsdl.Fault;
 import javax.wsdl.Input;
 import javax.wsdl.Message;
@@ -52,21 +53,21 @@
 
             Input input = wsdlOp.getInput();
             Message inputMsg = (input == null) ? null : input.getMessage();
-            List<DataType<QName>> parameterTypes = introspectTypes(inputMsg);
+            DataType<List<DataType<QName>>> inputType = introspectType(inputMsg);
 
             Message outputMsg;
             Output output = wsdlOp.getOutput();
             outputMsg = (output == null) ? null : output.getMessage();
 
             List outputParts = (outputMsg == null) ? null : outputMsg.getOrderedParts(null);
-            DataType<QName> returnType = null;
+            DataType<QName> outputType = null;
             if (outputParts != null || outputParts.size() > 0) {
                 if (outputParts.size() > 1) {
                     // We don't support output with multiple parts
                     throw new NotSupportedWSDLException("Multi-part output is not supported");
                 }
                 Part part = (Part) outputParts.get(0);
-                returnType = introspectType(part);
+                outputType = introspectType(part);
             }
 
             Collection faults = wsdlOp.getFaults().values();
@@ -86,14 +87,13 @@
 
             // FIXME: [rfeng] How to figure the nonBlocking and dataBinding?
             org.apache.tuscany.spi.model.Operation<QName> operation =
-                new org.apache.tuscany.spi.model.Operation<QName>(name, returnType, parameterTypes, faultTypes,
-                    true, null);
+                new org.apache.tuscany.spi.model.Operation<QName>(name, inputType, outputType, faultTypes);
             operations.put(name, operation);
         }
         return operations;
     }
 
-    protected List<DataType<QName>> introspectTypes(Message message) {
+    protected DataType<List<DataType<QName>>> introspectType(Message message) {
         List<DataType<QName>> dataTypes = new ArrayList<DataType<QName>>();
         if (message != null) {
             List parts = message.getOrderedParts(null);
@@ -103,7 +103,8 @@
                 dataTypes.add(dataType);
             }
         }
-        return dataTypes;
+        DataType<List<DataType<QName>>> msgType = new DataType<List<DataType<QName>>>(Object.class, dataTypes);
+        return msgType;
     }
 
     protected DataType<QName> introspectType(Part part) {
@@ -138,7 +139,7 @@
         contract.setOperations(introspectOperations(portType));
         contract.setCallbackPortType(callbackPortType);
         contract.setCallbackName(callbackPortType.getQName().getLocalPart());
-        contract.setCallbacksOperations(introspectOperations(callbackPortType));
+        contract.setCallbackOperations(introspectOperations(callbackPortType));
         return contract;
     }
 

Modified: incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLServiceContract.java Fri Sep  8 14:37:43 2006
@@ -32,6 +32,15 @@
     private PortType portType;
     private PortType callbackPortType;
 
+    /**
+     * 
+     */
+    public WSDLServiceContract() {
+        super();
+        this.remotable = true; // WSDL interface is always remotable by the SCA spec
+    }
+
+    
     public PortType getPortType() {
         return portType;
     }

Modified: incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/test/java/org/apache/tuscany/idl/wsdl/InterfaceWSDLIntrospectorImplTestCase.java Fri Sep  8 14:37:43 2006
@@ -65,9 +65,9 @@
         Assert.assertEquals(1, operations.size());
         Operation<QName> operation = operations.get("getLastTradePrice");
         Assert.assertNotNull(operation);
-        List<DataType<QName>> inputTypes = operation.getParameterTypes();
-        Assert.assertEquals(1, inputTypes.size());
-        DataType<QName> returnType = operation.getReturnType();
+        DataType<List<DataType<QName>>> inputType = operation.getInputType();
+        Assert.assertEquals(1, inputType.getLogical().size());
+        DataType<QName> returnType = operation.getOutputType();
         Assert.assertNotNull(returnType);
         Assert.assertEquals(0, operation.getFaultTypes().size());
     }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Fri Sep  8 14:37:43 2006
@@ -22,8 +22,12 @@
 import java.util.List;
 import java.util.Map;
 
-import org.osoa.sca.annotations.Constructor;
-
+import org.apache.tuscany.core.wire.BridgingInterceptor;
+import org.apache.tuscany.core.wire.InvokerInterceptor;
+import org.apache.tuscany.core.wire.MessageChannelImpl;
+import org.apache.tuscany.core.wire.MessageDispatcher;
+import org.apache.tuscany.core.wire.OutboundAutowire;
+import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
 import org.apache.tuscany.spi.QualifiedName;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
@@ -46,13 +50,8 @@
 import org.apache.tuscany.spi.wire.OutboundInvocationChain;
 import org.apache.tuscany.spi.wire.OutboundWire;
 import org.apache.tuscany.spi.wire.TargetInvoker;
-
-import org.apache.tuscany.core.wire.BridgingInterceptor;
-import org.apache.tuscany.core.wire.InvokerInterceptor;
-import org.apache.tuscany.core.wire.MessageChannelImpl;
-import org.apache.tuscany.core.wire.MessageDispatcher;
-import org.apache.tuscany.core.wire.OutboundAutowire;
-import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
+import org.apache.tuscany.spi.wire.WireService;
+import org.osoa.sca.annotations.Constructor;
 
 /**
  * The default connector implmentation
@@ -62,13 +61,16 @@
 public class ConnectorImpl implements Connector {
 
     private WirePostProcessorRegistry postProcessorRegistry;
+    private WireService wireService;
 
     public ConnectorImpl() {
     }
 
-    @Constructor
-    public ConnectorImpl(@Autowire WirePostProcessorRegistry postProcessorRegistry) {
+    @Constructor({"wireService", "postProcessorRegistry"})
+    public ConnectorImpl(@Autowire WireService wireService, 
+            @Autowire WirePostProcessorRegistry postProcessorRegistry) {
         this.postProcessorRegistry = postProcessorRegistry;
+        this.wireService = wireService;
     }
 
     public <T> void connect(SCAObject<T> source) {
@@ -352,9 +354,14 @@
                 e.setIdentifier(targetName.getPortName());
                 throw e;
             }
-            Class sourceInterface = sourceWire.getServiceContract().getInterfaceClass();
-            Class targetInterface = targetWire.getServiceContract().getInterfaceClass();
-            if (!sourceInterface.isAssignableFrom(targetInterface)) {
+            if (wireService == null) {
+                // FIXME: [rfeng] wireService won't be injected for the system connector?
+                Class sourceInterface = sourceWire.getServiceContract().getInterfaceClass();
+                Class targetInterface = targetWire.getServiceContract().getInterfaceClass();
+                if (!sourceInterface.isAssignableFrom(targetInterface)) {
+                    throw new BuilderConfigException("Incompatible source and target interfaces");
+                }
+            } else if (!wireService.isWireable(sourceWire.getServiceContract(), targetWire.getServiceContract())) {
                 throw new BuilderConfigException("Incompatible source and target interfaces");
             }
             boolean optimizable = isOptimizable(source.getScope(), target.getScope());

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java?view=diff&rev=441661&r1=441660&r2=441661
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/idl/java/JavaInterfaceProcessorRegistryImpl.java Fri Sep  8 14:37:43 2006
@@ -80,12 +80,13 @@
         contract.setInterfaceName(getBaseName(type));
         contract.setInterfaceClass(type);
         boolean remotable = type.isAnnotationPresent(Remotable.class);
+        contract.setRemotable(remotable);
         contract.setOperations(getOperations(type, remotable));
 
         if (callback != null) {
             contract.setCallbackName(getBaseName(callback));
             contract.setCallbackClass(callback);
-            contract.setCallbacksOperations(getOperations(callback, remotable));
+            contract.setCallbackOperations(getOperations(callback, remotable));
         }
 
         Scope interactionScope = type.getAnnotation(Scope.class);
@@ -129,12 +130,10 @@
                 faultDataTypes.add(new DataType<Type>(faultType, faultType));
             }
 
-            org.apache.tuscany.api.annotation.DataType dataType =
-                method.getAnnotation(org.apache.tuscany.api.annotation.DataType.class);
-            String dataBinding = (dataType != null) ? dataType.name() : Object.class.getName();
-
+            String dataBinding = "java.lang.Object";
+            DataType<List<DataType<Type>>> inputType = new DataType<List<DataType<Type>>>("java:parameters", Object[].class, paramDataTypes);
             Operation<Type> operation =
-                new Operation<Type>(name, returnDataType, paramDataTypes, faultDataTypes, nonBlocking, dataBinding);
+                new Operation<Type>(name, inputType, returnDataType, faultDataTypes, nonBlocking, dataBinding);
             operations.put(name, operation);
         }
         return operations;



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