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 2008/06/05 18:54:28 UTC

svn commit: r663657 [1/2] - in /incubator/tuscany/java/sca: itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/ itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/ modules/core-databinding/src/main/jav...

Author: rfeng
Date: Thu Jun  5 09:54:27 2008
New Revision: 663657

URL: http://svn.apache.org/viewvc?rev=663657&view=rev
Log:
Refactor the DataBinding introspction, wrapper processing and XMLTypeHelper for J2W

Modified:
    incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java
    incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
    incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java
    incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
    incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
    incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StAXDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLGroupDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStringDataBinding.java
    incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DataBindingRegistryImplTestCase.java
    incubator/tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/invocation/OSGiRemotableInvoker.java
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
    incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
    incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/FaultExceptionMapper.java

Modified: incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java Thu Jun  5 09:54:27 2008
@@ -41,8 +41,9 @@
     public void setUp() throws Exception {
         try { 
             domain = SCADomain.newInstance("primitivesservice.composite");
-        } catch(Exception e) {
+        } catch(Throwable e) {
             e.printStackTrace();
+            Assert.fail();
         }
     }
 

Modified: incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java Thu Jun  5 09:54:27 2008
@@ -158,7 +158,11 @@
 
     @BeforeClass
     public static void setUp() throws Exception {
+        try {
         domain = SCADomain.newInstance("SDOWSDLTest.composite");
+        }catch(Throwable e) {
+            e.printStackTrace();
+        }
     }
 
     @AfterClass

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java Thu Jun  5 09:54:27 2008
@@ -27,6 +27,7 @@
 import java.util.Map;
 
 import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
+import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.databinding.annotation.DataBinding;
 import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
 import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
@@ -36,6 +37,7 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
 import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 
 /**
  * The databinding annotation processor for java interfaces
@@ -114,7 +116,7 @@
                         d.setDataBinding(value);
                     }
                 }
-                dataBindingRegistry.introspectType(d, method.getParameterAnnotations()[i]);
+                dataBindingRegistry.introspectType(d, operation);
                 i++;
             }
             if (operation.getOutputType() != null) {
@@ -127,14 +129,14 @@
                 if (dt != null) {
                     d.setDataBinding(dt.value());
                 }
-                dataBindingRegistry.introspectType(d, method.getAnnotations());
+                dataBindingRegistry.introspectType(d, operation);
             }
             for (org.apache.tuscany.sca.interfacedef.DataType<?> d : operation.getFaultTypes()) {
                 if (d.getDataBinding() == null) {
                     d.setDataBinding(dataBindingId);
                 }
                 // TODO: Handle exceptions
-                dataBindingRegistry.introspectType(d, method.getAnnotations(), true);
+                dataBindingRegistry.introspectType(d, operation);
             }
 
             // JIRA: TUSCANY-842
@@ -143,8 +145,17 @@
                 assignOperationDataBinding(operation);
             }
 
-            // FIXME: Do we want to heuristically check the wrapper style?
-            // introspectWrapperStyle(operation);
+            // Introspect the wrapper data type
+            if (operation.getWrapper() != null) {
+                org.apache.tuscany.sca.databinding.DataBinding dbObj =
+                    dataBindingRegistry.getDataBinding(operation.getDataBinding());
+                WrapperHandler handler = dbObj == null ? null : dbObj.getWrapperHandler();
+                if (handler != null) {
+                    WrapperInfo wrapper = operation.getWrapper();
+                    wrapper.setInputWrapperType(handler.getWrapperType(operation, true));
+                    wrapper.setOutputWrapperType(handler.getWrapperType(operation, false));
+                }
+            }
         }
     }
 
@@ -173,7 +184,7 @@
                 String dataBinding = d.getDataBinding();
                 // Assumes JavaBeans DB is default
                 if (dataBinding != null && !dataBinding.equals(JavaBeansDataBinding.NAME)
-                    && !dataBinding.equals(SimpleJavaDataBinding.NAME)) {
+                    && !dataBinding.equals(SimpleJavaDataBinding.NAME) && !dataBinding.startsWith("java:")) {
                     if (nonDefaultDataBindingName != null) {
                         if (!nonDefaultDataBindingName.equals(dataBinding)) {
                             // We've seen two different non-default DBs, e.g. SDO and JAXB

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java Thu Jun  5 09:54:27 2008
@@ -96,12 +96,12 @@
 
         DataType<DataType> targetType = context.getTargetDataType();
 
-        Object sourceFaultInfo = faultExceptionMapper.getFaultInfo(source, sourceType.getLogical().getPhysical());
+        Object sourceFaultInfo = faultExceptionMapper.getFaultInfo(source, sourceType.getLogical().getPhysical(), context.getSourceOperation());
         Object targetFaultInfo =
             mediator.mediate(sourceFaultInfo, sourceType.getLogical(), targetType.getLogical(), context.getMetadata());
 
         Throwable targetException =
-            faultExceptionMapper.wrapFaultInfo(targetType, source.getMessage(), targetFaultInfo, source.getCause());
+            faultExceptionMapper.wrapFaultInfo(targetType, source.getMessage(), targetFaultInfo, source.getCause(), context.getTargetOperation());
 
         // FIXME
         return targetException == null ? source : targetException;

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java Thu Jun  5 09:54:27 2008
@@ -165,14 +165,14 @@
 
             // If the source can be wrapped, wrapped it first
             if (sourceWrapperHandler != null) {
-                Class<?> sourceWrapperClass =
-                    sourceOp.getWrapper() != null ? sourceOp.getWrapper().getInputWrapperClass() : null;
-                DataType sourceWrapperType =
-                    sourceWrapperHandler.getWrapperType(wrapperElement, sourceWrapperClass, context);
+                WrapperInfo sourceWrapperInfo = sourceOp.getWrapper();
+                DataType sourceWrapperType = sourceWrapperInfo != null ? sourceWrapperInfo.getInputWrapperType() : null;
 
                 // We only do wrapper to wrapper transformation if the source has a wrapper and both sides
                 // match by XML structure
                 if (sourceWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
+                    Class<?> sourceWrapperClass = sourceWrapperType.getPhysical();
+
                     // Create the source wrapper
                     Object sourceWrapper = sourceWrapperHandler.create(wrapperElement, sourceWrapperClass, context);
 
@@ -215,11 +215,10 @@
                 // FIXME: This is a workaround for the wsdless support as it passes in child elements
                 // under the wrapper that only matches by position
                 if (sourceWrapperHandler.isInstance(sourceWrapper, wrapperElement, childElements, context)) {
-                    Class<?> targetWrapperClass =
-                        targetOp.getWrapper() != null ? targetOp.getWrapper().getInputWrapperClass() : null;
-
+           
+                    WrapperInfo targetWrapperInfo = targetOp.getWrapper();
                     DataType targetWrapperType =
-                        targetWrapperHandler.getWrapperType(wrapperElement, targetWrapperClass, context);
+                        targetWrapperInfo != null ? targetWrapperInfo.getInputWrapperType() : null;
                     if (targetWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
                         Object targetWrapper =
                             mediator.mediate(sourceWrapper, sourceType.getLogical().get(0), targetWrapperType, context

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java Thu Jun  5 09:54:27 2008
@@ -176,11 +176,13 @@
 
                 // If the source can be wrapped, wrapped it first
                 if (sourceWrapperHandler != null) {
-                    Class<?> sourceWrapperClass =
-                        sourceOp.getWrapper() != null ? sourceOp.getWrapper().getOutputWrapperClass() : null;
+                    WrapperInfo sourceWrapperInfo = sourceOp.getWrapper();
                     DataType sourceWrapperType =
-                        sourceWrapperHandler.getWrapperType(wrapperElement, sourceWrapperClass, context);
+                        sourceWrapperInfo != null ? sourceWrapperInfo.getOutputWrapperType() : null;
+
                     if (sourceWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
+                        Class<?> sourceWrapperClass = sourceWrapperType.getPhysical();
+
                         Object sourceWrapper = sourceWrapperHandler.create(wrapperElement, sourceWrapperClass, context);
                         if (sourceWrapper != null) {
                             if (!childElements.isEmpty()) {
@@ -224,11 +226,11 @@
                     // FIXME: This is a workaround for the wsdless support as it passes in child elements
                     // under the wrapper that only matches by position
                     if (sourceWrapperHandler.isInstance(sourceWrapper, wrapperElement, childElements, context)) {
-                        Class<?> targetWrapperClass =
-                            targetOp.getWrapper() != null ? targetOp.getWrapper().getOutputWrapperClass() : null;
 
+                        WrapperInfo targetWrapperInfo = targetOp.getWrapper();
                         DataType targetWrapperType =
-                            targetWrapperHandler.getWrapperType(wrapperElement, targetWrapperClass, context);
+                            targetWrapperInfo != null ? targetWrapperInfo.getOutputWrapperType() : null;
+
                         if (targetWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
                             Object targetWrapper =
                                 mediator.mediate(sourceWrapper, sourceType.getLogical(), targetWrapperType, context

Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java Thu Jun  5 09:54:27 2008
@@ -126,11 +126,11 @@
                 Throwable ex = (Throwable)fault;
                 DataType<DataType> exType =
                     new DataTypeImpl<DataType>(ex.getClass(), new DataTypeImpl<XMLType>(ex.getClass(), XMLType.UNKNOWN));
-                faultExceptionMapper.introspectFaultDataType(exType, false);
+                faultExceptionMapper.introspectFaultDataType(exType, operation, false);
                 DataType faultType = exType.getLogical();
-                Object faultInfo = faultExceptionMapper.getFaultInfo(ex, faultType.getPhysical());
+                Object faultInfo = faultExceptionMapper.getFaultInfo(ex, faultType.getPhysical(), operation);
                 faultInfo = copy(faultInfo, dataBindings.getDataBinding(faultType.getDataBinding()));
-                fault = faultExceptionMapper.wrapFaultInfo(exType, ex.getMessage(), faultInfo, ex.getCause());
+                fault = faultExceptionMapper.wrapFaultInfo(exType, ex.getMessage(), faultInfo, ex.getCause(), operation);
                 return fault;
             }
         }
@@ -180,7 +180,7 @@
         // If no databinding was specified, introspect the given arg to
         // determine its databinding
         if (dataBinding == null) {
-            DataType<?> dataType = dataBindings.introspectType(data);
+            DataType<?> dataType = dataBindings.introspectType(data, operation);
             if (dataType != null) {
                 String db = dataType.getDataBinding();
                 dataBinding = dataBindings.getDataBinding(db);

Modified: incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java Thu Jun  5 09:54:27 2008
@@ -34,9 +34,11 @@
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
@@ -109,11 +111,12 @@
     }
 
     /**
-     * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo, Class, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean)
      */
-    public DataType getWrapperType(ElementInfo element,
-                                   Class<? extends OMElement> wrapperClass,
-                                   TransformationContext context) {
+    public DataType getWrapperType(Operation operation,
+                                   boolean input) {
+        WrapperInfo wrapper = operation.getWrapper();
+        ElementInfo element = input? wrapper.getInputWrapperElement(): wrapper.getOutputWrapperElement();
         DataType<XMLType> wrapperType =
             new DataTypeImpl<XMLType>(AxiomDataBinding.NAME, OMElement.class, new XMLType(element));
         return wrapperType;

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java Thu Jun  5 09:54:27 2008
@@ -43,6 +43,8 @@
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
 import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
+import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
+import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
 import org.apache.tuscany.sca.databinding.jaxb.JAXBContextCache.LRUCache;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Interface;
@@ -177,7 +179,7 @@
      * @return
      * @throws JAXBException
      */
-    public static JAXBContext createJAXBContext(Interface intf) throws JAXBException {
+    public static JAXBContext createJAXBContext(Interface intf, boolean useWrapper) throws JAXBException {
         synchronized (cache) {
             LRUCache<Object, JAXBContext> map = cache.getCache();
             Integer key = new Integer(System.identityHashCode(intf));
@@ -185,22 +187,44 @@
             if (context != null) {
                 return context;
             }
-            Set<Class<?>> classes = new HashSet<Class<?>>();
-            for(DataType d: getDataTypes(intf)) {
-                classes.add(d.getPhysical());
-            }
-
-            context = createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
+            List<DataType> dataTypes = getDataTypes(intf, useWrapper);
+            context = createJAXBContext(dataTypes);
             map.put(key, context);
             return context;
         }
     }
 
-    private static List<DataType> getDataTypes(Interface intf) {
+    public static JAXBContext createJAXBContext(List<DataType> dataTypes) throws JAXBException {
+        JAXBContext context;
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        for (DataType d : dataTypes) {
+            if (JAXBDataBinding.NAME.equals(d.getDataBinding()) || JavaBeansDataBinding.NAME.equals(d
+                .getDataBinding())
+                || SimpleJavaDataBinding.NAME.equals(d.getDataBinding())) {
+                if (!d.getPhysical().isInterface()) {
+                    classes.add(d.getPhysical());
+                }
+            }
+        }
+
+        context = createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
+        return context;
+    }
+
+    public static JAXBContext createJAXBContext(Interface intf) throws JAXBException {
+        return createJAXBContext(intf, true);
+    }
+
+    /**
+     * @param intf
+     * @param useWrapper Use wrapper classes?
+     * @return
+     */
+    private static List<DataType> getDataTypes(Interface intf, boolean useWrapper) {
         List<DataType> dataTypes = new ArrayList<DataType>();
         for (Operation op : intf.getOperations()) {
             WrapperInfo wrapper = op.getWrapper();
-            if (wrapper != null) {
+            if (useWrapper && wrapper != null) {
                 DataType dt1 = wrapper.getInputWrapperType();
                 if (dt1 != null) {
                     dataTypes.add(dt1);
@@ -217,11 +241,11 @@
                 if (dt2 != null) {
                     dataTypes.add(dt2);
                 }
-                for (DataType<DataType> dt3 : op.getFaultTypes()) {
-                    DataType dt4 = dt3.getLogical();
-                    if (dt4 != null) {
-                        dataTypes.add(dt4);
-                    }
+            }
+            for (DataType<DataType> dt3 : op.getFaultTypes()) {
+                DataType dt4 = dt3.getLogical();
+                if (dt4 != null) {
+                    dataTypes.add(dt4);
                 }
             }
         }

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java Thu Jun  5 09:54:27 2008
@@ -19,7 +19,6 @@
 
 package org.apache.tuscany.sca.databinding.jaxb;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 
@@ -32,6 +31,7 @@
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.databinding.impl.DOMHelper;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.w3c.dom.Document;
 
@@ -57,7 +57,7 @@
     }
 
     @Override
-    public boolean introspect(DataType dataType, Annotation[] annotations) {
+    public boolean introspect(DataType dataType, Operation operation) {
         Class javaType = dataType.getPhysical();
         if (JAXBElement.class.isAssignableFrom(javaType)) {
             Type type = javaType.getGenericSuperclass();

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java Thu Jun  5 09:54:27 2008
@@ -37,13 +37,15 @@
 
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.apache.tuscany.sca.xsd.XSDFactory;
 import org.apache.tuscany.sca.xsd.XSDefinition;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.apache.ws.commons.schema.resolver.URIResolver;
+import org.osoa.sca.ServiceRuntimeException;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 
@@ -52,7 +54,7 @@
     private static final String ANYTYPE_NAME = "anyType";
     private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
 
-    private List<Class<?>> types = new ArrayList<Class<?>>();
+    // private List<Class<?>> types = new ArrayList<Class<?>>();
 
     public JAXBTypeHelper() {
         super();
@@ -65,7 +67,7 @@
         } else if (javaType.isInterface()) {
             return new TypeInfo(ANYTYPE_QNAME, true, null);
         } else {
-            types.add(javaType);
+            // types.add(javaType);
             if (logical instanceof XMLType) {
                 xmlType = ((XMLType)logical).getTypeName();
             }
@@ -77,11 +79,13 @@
         }
     }
 
+    /*
     public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver) {
         List<XSDefinition> definitions = new ArrayList<XSDefinition>();
         generateJAXBSchemas(definitions, factory);
         return definitions;
     }
+    */
 
     public static Map<String, String> generateSchema(JAXBContext context) throws IOException {
         StringResolverImpl resolver = new StringResolverImpl();
@@ -113,6 +117,7 @@
 
     }
 
+    /*
     private void generateJAXBSchemas1(List<XSDefinition> definitions, XSDFactory factory) {
         if (types.size() > 0) {
             try {
@@ -122,12 +127,12 @@
                 JAXBContext context = JAXBContextHelper.createJAXBContext(typesArray);
                 Map<String, String> results = generateSchema(context);
                 collection.setSchemaResolver(new XSDResolver(results));
-                
+
                 for (Map.Entry<String, String> entry : results.entrySet()) {
                     XSDefinition definition = factory.createXSDefinition();
                     int index = entry.getKey().lastIndexOf('#');
                     String ns = entry.getKey().substring(0, index);
-                    String file = entry.getKey().substring(index+1);
+                    String file = entry.getKey().substring(index + 1);
                     definition.setUnresolved(true);
                     definition.setNamespace(ns);
                     definition.setSchema(collection.read(new StringReader(entry.getValue()), null));
@@ -140,6 +145,7 @@
             }
         }
     }
+    */
 
     private static class DOMResolverImpl extends SchemaOutputResolver {
         private Map<String, DOMResult> results = new HashMap<String, DOMResult>();
@@ -156,28 +162,35 @@
             return results;
         }
     }
-    
+
+    /*
     private void generateJAXBSchemas(List<XSDefinition> definitions, XSDFactory factory) {
         if (types.size() > 0) {
             try {
                 Class<?>[] typesArray = new Class<?>[types.size()];
                 typesArray = types.toArray(typesArray);
                 JAXBContext context = JAXBContext.newInstance(typesArray);
-                DOMResolverImpl resolver = new DOMResolverImpl();
-                context.generateSchema(resolver);
-                Map<String, DOMResult> results = resolver.getResults();
-                for (Map.Entry<String, DOMResult> entry: results.entrySet()) {
-                    XSDefinition definition = factory.createXSDefinition();
-                    definition.setUnresolved(true);
-                    definition.setDocument((Document)entry.getValue().getNode());
-                    definition.setNamespace(entry.getKey());
-                    definitions.add(definition);
-                }
+                generateSchemas(definitions, factory, context);
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
         }
     }
+    */
+
+    private void generateSchemas(List<XSDefinition> definitions, XSDFactory factory, JAXBContext context)
+        throws IOException {
+        DOMResolverImpl resolver = new DOMResolverImpl();
+        context.generateSchema(resolver);
+        Map<String, DOMResult> results = resolver.getResults();
+        for (Map.Entry<String, DOMResult> entry : results.entrySet()) {
+            XSDefinition definition = factory.createXSDefinition();
+            definition.setUnresolved(true);
+            definition.setDocument((Document)entry.getValue().getNode());
+            definition.setNamespace(entry.getKey());
+            definitions.add(definition);
+        }
+    }
 
     private static class StringResolverImpl extends SchemaOutputResolver {
         private Map<String, StreamResult> results = new HashMap<String, StreamResult>();
@@ -197,4 +210,27 @@
         }
     }
 
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf) {
+        try {
+            JAXBContext context = JAXBContextHelper.createJAXBContext(intf, false);
+            List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+            generateSchemas(definitions, factory, context);
+            return definitions;
+        } catch (Throwable e) {
+            throw new ServiceRuntimeException(e);
+        }
+    }
+
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes) {
+        try {
+
+            JAXBContext context = JAXBContextHelper.createJAXBContext(dataTypes);
+            List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+            generateSchemas(definitions, factory, context);
+            return definitions;
+        } catch (Throwable e) {
+            throw new ServiceRuntimeException(e);
+        }
+    }
+
 }

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java Thu Jun  5 09:54:27 2008
@@ -34,9 +34,9 @@
 import org.apache.tuscany.sca.databinding.TransformationException;
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.interfacedef.DataType;
-import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
-import org.apache.tuscany.sca.interfacedef.util.XMLType;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 
 /**
  * JAXB WrapperHandler implementation
@@ -128,16 +128,12 @@
     }
 
     /**
-     * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo, Class, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean)
      */
-    public DataType getWrapperType(ElementInfo element,
-                                   Class<? extends Object> wrapperClass,
-                                   TransformationContext context) {
-        if (wrapperClass == null) {
-            return null;
-        } else {
-            return new DataTypeImpl<XMLType>(JAXBDataBinding.NAME, wrapperClass, new XMLType(element));
-        }
+    public DataType getWrapperType(Operation operation, boolean input) {
+        WrapperInfo wrapper = operation.getWrapper();
+        DataType dt = input ? wrapper.getInputWrapperType() : wrapper.getOutputWrapperType();
+        return dt;
     }
 
     /**

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java Thu Jun  5 09:54:27 2008
@@ -26,6 +26,7 @@
 
 import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
@@ -52,28 +53,29 @@
 
     /**
      * Test method for
-     * {@link org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class, java.lang.annotation.Annotation)}.
+     * {@link org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class, Operation)}.
      */
     public final void testIntrospect() {
         DataType dataType = new DataTypeImpl<Class>(JAXBElement.class, null);
-        boolean yes = binding.introspect(dataType, null);
+        Operation op = null;
+        boolean yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertTrue(dataType.getDataBinding().equals(binding.getName()));
         assertTrue(dataType.getPhysical() == JAXBElement.class && dataType.getLogical() == XMLType.UNKNOWN);
         dataType = new DataTypeImpl<Class>(MockJAXBElement.class, null);
-        yes = binding.introspect(dataType, null);
+        yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertEquals(MockJAXBElement.class, dataType.getPhysical());
         assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), ((XMLType)dataType.getLogical())
             .getTypeName());
         dataType = new DataTypeImpl<Class>(USAddress.class, null);
-        yes = binding.introspect(dataType, null);
+        yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertEquals(USAddress.class, dataType.getPhysical());
         assertEquals(new QName("http://www.example.com/IPO", "USAddress"), ((XMLType)dataType.getLogical())
             .getTypeName());
         dataType = new DataTypeImpl<Class>(USState.class, null);
-        yes = binding.introspect(dataType, null);
+        yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertTrue(dataType.getDataBinding().equals(binding.getName()));
         assertEquals(USState.class, dataType.getPhysical());

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java Thu Jun  5 09:54:27 2008
@@ -19,12 +19,12 @@
 
 package org.apache.tuscany.sca.databinding.json;
 
-import java.lang.annotation.Annotation;
 
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.codehaus.jettison.json.JSONObject;
 
@@ -44,7 +44,7 @@
         super(NAME, ALIASES, org.json.JSONObject.class);
     }
 
-    public boolean introspect(DataType type, Annotation[] annotations) {
+    public boolean introspect(DataType type, Operation operation) {
         assert type != null;
         Class cls = type.getPhysical();
         if (JSONObject.class.isAssignableFrom(cls) || org.json.JSONObject.class.isAssignableFrom(cls)) {

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java Thu Jun  5 09:54:27 2008
@@ -18,12 +18,12 @@
  */
 package org.apache.tuscany.sca.databinding.saxon;
 
-import java.lang.annotation.Annotation;
 
 import net.sf.saxon.om.NodeInfo;
 
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 
 /**
  * Represents data binding for parameters of type NodeInfo.
@@ -43,8 +43,8 @@
     }
 
     @Override
-    public boolean introspect(DataType type, Annotation[] annotations) {
-        if (super.introspect(type, annotations)) {
+    public boolean introspect(DataType type, Operation operation) {
+        if (super.introspect(type, operation)) {
             // type.setLogical(XMLType.UNKNOWN);
             return true;
         } else {

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java Thu Jun  5 09:54:27 2008
@@ -18,12 +18,12 @@
  */
 package org.apache.tuscany.sca.databinding.saxon;
 
-import java.lang.annotation.Annotation;
 
 import net.sf.saxon.value.Value;
 
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 
 /**
  * Represents data binding for parameters of type Value.
@@ -42,8 +42,8 @@
     }
 
     @Override
-    public boolean introspect(DataType type, Annotation[] annotations) {
-        if (super.introspect(type, annotations)) {
+    public boolean introspect(DataType type, Operation operation) {
+        if (super.introspect(type, operation)) {
             // type.setLogical(XMLType.UNKNOWN);
             return true;
         } else {

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java Thu Jun  5 09:54:27 2008
@@ -94,6 +94,32 @@
         return helperContext;
 
     }
+    
+    public static HelperContext getHelperContext(Operation op) {
+        if (op == null) {
+            return getDefaultHelperContext();
+        }
+
+        HelperContext helperContext = SDOUtil.createHelperContext();
+
+        boolean found = false;
+        if (op != null) {
+            found = register(helperContext, op.getInputType()) || found;
+            found = register(helperContext, op.getOutputType()) || found;
+            WrapperInfo wrapper = op.getWrapper();
+            if (wrapper != null) {
+                found = register(helperContext, wrapper.getInputWrapperClass()) || found;
+                found = register(helperContext, wrapper.getOutputWrapperClass()) || found;
+            }
+        }
+        if (!found) {
+            helperContext = getDefaultHelperContext();
+        }
+
+        return helperContext;
+
+    }
+
 
     /**
      * @param helperContext

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java Thu Jun  5 09:54:27 2008
@@ -19,7 +19,6 @@
 
 package org.apache.tuscany.sca.databinding.sdo;
 
-import java.lang.annotation.Annotation;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
@@ -30,6 +29,7 @@
 import org.apache.tuscany.sca.databinding.XMLTypeHelper;
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 import commonj.sdo.DataObject;
@@ -61,7 +61,7 @@
     }
 
     @Override
-    public boolean introspect(DataType dataType, Annotation[] annotations) {
+    public boolean introspect(DataType dataType, Operation operation) {
         Class javaType = dataType.getPhysical();
         // Allow privileged access to read system properties. Requires PropertyPermission
         // java.specification.version read in security policy.

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java Thu Jun  5 09:54:27 2008
@@ -30,11 +30,16 @@
 
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.apache.tuscany.sca.xsd.XSDFactory;
 import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.osoa.sca.ServiceRuntimeException;
 import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Document;
 import org.w3c.dom.bootstrap.DOMImplementationRegistry;
@@ -51,9 +56,9 @@
 
     private TypeHelper typeHelper;
     private XSDHelper xsdHelper;
-    private Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
-    private Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
-    
+    // private Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
+    // private Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
+
     public SDOTypeHelper() {
         super();
         typeHelper = SDOContextHelper.getDefaultHelperContext().getTypeHelper();
@@ -65,69 +70,84 @@
         if (xmlType != null) {
             return new TypeInfo(xmlType, true, null);
         } else {
-            Type type = typeHelper.getType(javaType);
-            if (xsdHelper.isXSD(type)) {
-                List<Type> xsdTypes = xsdTypesMap.get(type.getURI());
-                if (xsdTypes == null) {
-                    xsdTypes = new ArrayList<Type>();
-                    xsdTypesMap.put(type.getURI(), xsdTypes);
-                }
-                if (!xsdTypes.contains(type)) {
-                    xsdTypes.add(type);
-                }
-            } else {
-                List<Type> types = typesMap.get(type.getURI());
-                if (types == null) {
-                    types = new ArrayList<Type>();
-                    typesMap.put(type.getURI(), types);
-                }
-                if (!types.contains(type)) {
-                    types.add(type);
-                }
-            }
+            // introspect(javaType, xsdTypesMap, typesMap);
             if (logical instanceof XMLType) {
                 xmlType = ((XMLType)logical).getTypeName();
             }
             if (xmlType == null) {
-                xmlType = new QName(JavaXMLMapper.getNamespace(javaType),
-                                    Introspector.decapitalize(javaType.getSimpleName()));
+                xmlType =
+                    new QName(JavaXMLMapper.getNamespace(javaType), Introspector.decapitalize(javaType.getSimpleName()));
             }
             return new TypeInfo(xmlType, false, null);
         }
     }
 
+    private void introspect(Class javaType, Map<String, List<Type>> xsdTypesMap, Map<String, List<Type>> typesMap) {
+        Type type = typeHelper.getType(javaType);
+        if (type == null) {
+            return;
+        }
+        if (xsdHelper.isXSD(type)) {
+            addToMap(xsdTypesMap, type);
+        } else {
+            addToMap(typesMap, type);
+        }
+    }
+
+    private void addToMap(Map<String, List<Type>> map, Type type) {
+        List<Type> types = map.get(type.getURI());
+        if (types == null) {
+            types = new ArrayList<Type>();
+            map.put(type.getURI(), types);
+        }
+        if (!types.contains(type)) {
+            types.add(type);
+        }
+    }
+
+    /*
     public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver) {
         List<XSDefinition> definitions = new ArrayList<XSDefinition>();
-        generateSDOSchemas(definitions, factory);
-        addResolvedXSDs(definitions, factory, resolver);
+        generateSDOSchemas(definitions, factory, typesMap);
+        addResolvedXSDs(definitions, factory, resolver, xsdTypesMap);
         return definitions;
     }
+    */
 
-    private void generateSDOSchemas(List<XSDefinition> definitions, XSDFactory factory) {
-        for (Map.Entry<String, List<Type>> entry: typesMap.entrySet()) {
-            String schema = xsdHelper.generate(entry.getValue());
-            DOMImplementationRegistry registry = null;
-            try {
-                registry = DOMImplementationRegistry.newInstance();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            DOMImplementation impl = registry.getDOMImplementation("XML 3.0");
-            DOMImplementationLS ls = (DOMImplementationLS)impl.getFeature("LS", "3.0");
-            LSParser parser = ls.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, SCHEMA_NS);
-            LSInput input = ls.createLSInput();
-            input.setCharacterStream(new StringReader(schema));
-            Document document = parser.parse(input);
-            XSDefinition definition = factory.createXSDefinition();
-            definition.setUnresolved(true);
-            definition.setDocument(document);
-            definition.setNamespace(entry.getKey());
-            definitions.add(definition);
+    private void generateSDOSchemas(List<XSDefinition> definitions, XSDFactory factory, Map<String, List<Type>> map) {
+        for (Map.Entry<String, List<Type>> entry : map.entrySet()) {
+            List<Type> types = entry.getValue();
+            String ns = entry.getKey();
+            generateSchema(definitions, factory, types, ns);
+        }
+    }
+
+    private void generateSchema(List<XSDefinition> definitions, XSDFactory factory, List<Type> types, String ns) {
+        String schema = xsdHelper.generate(types);
+        DOMImplementationRegistry registry = null;
+        try {
+            registry = DOMImplementationRegistry.newInstance();
+        } catch (Exception e) {
+            throw new ServiceRuntimeException(e);
         }
+        DOMImplementation impl = registry.getDOMImplementation("XML 3.0");
+        DOMImplementationLS ls = (DOMImplementationLS)impl.getFeature("LS", "3.0");
+        LSParser parser = ls.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, SCHEMA_NS);
+        LSInput input = ls.createLSInput();
+        input.setCharacterStream(new StringReader(schema));
+        Document document = parser.parse(input);
+        XSDefinition definition = factory.createXSDefinition();
+        definition.setUnresolved(true);
+        definition.setDocument(document);
+        definition.setNamespace(ns);
+        definitions.add(definition);
     }
 
-    private void addResolvedXSDs(List<XSDefinition> definitions, XSDFactory factory, ModelResolver resolver) {
-        for (Map.Entry<String, List<Type>> entry: xsdTypesMap.entrySet()) {
+    private void addResolvedXSDs(List<XSDefinition> definitions,
+                                 XSDFactory factory,
+                                 ModelResolver resolver,
+                                 Map<String, List<Type>> map) {
+        for (Map.Entry<String, List<Type>> entry : map.entrySet()) {
             XSDefinition definition = factory.createXSDefinition();
             definition.setUnresolved(true);
             definition.setNamespace(entry.getKey());
@@ -138,7 +158,7 @@
                 throw new RuntimeException("No XSD found for namespace " + entry.getKey());
             }
             // make sure all the required types are defined in the resolved schema
-            for (Type type: entry.getValue()) {
+            for (Type type : entry.getValue()) {
                 QName typeName = new QName(type.getURI(), type.getName());
                 if (resolved.getXmlSchemaType(typeName) == null) {
                     //FIXME: create a checked exception and propagate it back up to the activator
@@ -149,4 +169,54 @@
         }
     }
 
+    private static List<DataType> getDataTypes(Interface intf) {
+        List<DataType> dataTypes = new ArrayList<DataType>();
+        for (Operation op : intf.getOperations()) {
+            WrapperInfo wrapper = op.getWrapper();
+            if (wrapper != null) {
+                DataType dt1 = wrapper.getInputWrapperType();
+                if (dt1 != null) {
+                    dataTypes.add(dt1);
+                }
+                DataType dt2 = wrapper.getOutputWrapperType();
+                if (dt2 != null) {
+                    dataTypes.add(dt2);
+                }
+            } else {
+                for (DataType dt1 : op.getInputType().getLogical()) {
+                    dataTypes.add(dt1);
+                }
+                DataType dt2 = op.getOutputType();
+                if (dt2 != null) {
+                    dataTypes.add(dt2);
+                }
+                for (DataType<DataType> dt3 : op.getFaultTypes()) {
+                    DataType dt4 = dt3.getLogical();
+                    if (dt4 != null) {
+                        dataTypes.add(dt4);
+                    }
+                }
+            }
+        }
+        return dataTypes;
+    }
+
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf) {
+        return getSchemaDefinitions(factory, resolver, getDataTypes(intf));
+    }
+
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes) {
+        Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
+        Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
+        for (DataType d : dataTypes) {
+            if (SDODataBinding.NAME.equals(d.getDataBinding())) {
+                introspect(d.getPhysical(), xsdTypesMap, typesMap);
+            }
+        }
+        List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+        generateSDOSchemas(definitions, factory, typesMap);
+        addResolvedXSDs(definitions, factory, resolver, xsdTypesMap);
+        return definitions;
+    }
+
 }

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java Thu Jun  5 09:54:27 2008
@@ -28,9 +28,11 @@
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 import commonj.sdo.DataObject;
@@ -53,7 +55,6 @@
      * @see org.apache.tuscany.sca.databinding.WrapperHandler#create(ElementInfo, Class, TransformationContext)
      */
     public Object create(ElementInfo element, Class<? extends Object> wrapperClass, TransformationContext context) {
-        DataObject wrapper = null;
         HelperContext helperContext = SDOContextHelper.getHelperContext(context);
         Type sdoType = getSDOType(helperContext, element);
         if (sdoType != null) {
@@ -121,12 +122,13 @@
     }
 
     /**
-     * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo, Class, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean)
      */
-    public DataType getWrapperType(ElementInfo element,
-                                   Class<? extends Object> wrapperClass,
-                                   TransformationContext context) {
-        HelperContext helperContext = SDOContextHelper.getHelperContext(context);
+    public DataType getWrapperType(Operation operation,
+                                   boolean input) {
+        WrapperInfo wrapper = operation.getWrapper();
+        ElementInfo element = input? wrapper.getInputWrapperElement(): wrapper.getOutputWrapperElement();
+        HelperContext helperContext = SDOContextHelper.getHelperContext(operation);
         Type sdoType = getSDOType(helperContext, element);
         if (sdoType != null) {
             // Check if child elements matches

Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java Thu Jun  5 09:54:27 2008
@@ -24,6 +24,7 @@
 import junit.framework.TestCase;
 
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
@@ -56,19 +57,20 @@
     }
 
     public final void testIntrospect() {
+        Operation op = null;
         DataType dataType = new DataTypeImpl<Class>(DataObject.class, null);
-        boolean yes = binding.introspect(dataType, null);
+        boolean yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertTrue(dataType.getDataBinding().equals(binding.getName()));
         assertTrue(dataType.getPhysical() == DataObject.class && dataType.getLogical() == XMLType.UNKNOWN);
         dataType = new DataTypeImpl<Class>(PurchaseOrderType.class, null);
-        yes = binding.introspect(dataType, null);
+        yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertEquals(PurchaseOrderType.class, dataType.getPhysical());
         assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), ((XMLType)dataType.getLogical())
             .getTypeName());
         dataType = new DataTypeImpl<Class>(USAddress.class, null);
-        yes = binding.introspect(dataType, null);
+        yes = binding.introspect(dataType, op);
         assertTrue(yes);
         assertEquals(USAddress.class, dataType.getPhysical());
         assertEquals(new QName("http://www.example.com/IPO", "USAddress"), ((XMLType)dataType.getLogical())

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java Thu Jun  5 09:54:27 2008
@@ -19,9 +19,9 @@
 
 package org.apache.tuscany.sca.databinding;
 
-import java.lang.annotation.Annotation;
 
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 
 /**
  * DataBinding represents a data representation, for example, SDO, JAXB and AXIOM
@@ -59,10 +59,10 @@
      * Introspect and populate information to a DataType model
      * 
      * @param dataType The data type to be introspected
-     * @param annotations The java annotations
+     * @param operation The operation
      * @return true if the databinding has recognized the given data type
      */
-    boolean introspect(DataType dataType, Annotation[] annotations);
+    boolean introspect(DataType dataType, Operation operation);
 
     /**
      * Introspect the data to figure out the corresponding data type

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java Thu Jun  5 09:54:27 2008
@@ -18,9 +18,9 @@
  */
 package org.apache.tuscany.sca.databinding;
 
-import java.lang.annotation.Annotation;
 
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 
 /**
  * An extension point for data binding extensions.
@@ -56,29 +56,19 @@
      * Introspect the java class to figure out what DataType supports it.
      * 
      * @param dataType The initial data type
-     * @param annotations The java annotations
+     * @param operation TODO
      * @return A DataType representing the java type or null if no databinding
      *         recognizes the java type
      */
-    boolean introspectType(DataType dataType, Annotation[] annotations);
-
-    /**
-     * Introspect the java class to figure out what DataType supports it.
-     * 
-     * @param dataType The initial data type
-     * @param annotations The java annotations
-     * @param isFaultType Should be set to true if DataType parameter represents an Exception
-     * @return A DataType representing the java type or null if no databinding
-     *         recognizes the java type
-     */
-    boolean introspectType(DataType dataType, Annotation[] annotations, boolean isFaultType);
+    boolean introspectType(DataType dataType, Operation operation);
 
     /**
      * Introspect the value to figure out the corresponding DataType
      * 
      * @param value The object value
+     * @param operation TODO
      * @return A DataType representing the value or null if no databinding
      *         recognizes the value
      */
-    DataType introspectType(Object value);
+    DataType introspectType(Object value, Operation operation);
 }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java Thu Jun  5 09:54:27 2008
@@ -19,7 +19,6 @@
 package org.apache.tuscany.sca.databinding;
 
 import java.io.IOException;
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -34,6 +33,7 @@
 import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
 import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 
 /**
@@ -191,8 +191,8 @@
             return getDataBinding().getWrapperHandler();
         }
 
-        public boolean introspect(DataType dataType, Annotation[] annotations) {
-            return getDataBinding().introspect(dataType, annotations);
+        public boolean introspect(DataType dataType, Operation operation) {
+            return getDataBinding().introspect(dataType, operation);
         }
 
         public DataType introspect(Object value) {
@@ -202,27 +202,7 @@
 
     //FIXME The following methods should not be on the extension point
     // they should be on a separate class
-    public boolean introspectType(DataType dataType, Annotation[] annotations) {
-        return introspectType(dataType, annotations, false);
-    }
-
-    private boolean introspectArray(DataType dataType, Annotation[] annotations) {
-        Class physical = dataType.getPhysical();
-        if (!physical.isArray() || physical == byte[].class) {
-            return false;
-        }
-        Class componentType = physical.getComponentType();
-        DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
-        introspectType(logical, annotations);
-        dataType.setDataBinding("java:array");
-        dataType.setLogical(logical);
-        return true;
-    }
-
-    //
-    // Leverage the DataBinding ExceptionHandler to calculate the DataType of an exception DataType
-    //
-    public boolean introspectType(DataType dataType, Annotation[] annotations, boolean isException) {
+    public boolean introspectType(DataType dataType, Operation operation) {
         loadDataBindings();
         for (DataBinding binding : databindings) {
             // don't introspect for JavaBeansDatabinding as all javatypes will
@@ -230,26 +210,8 @@
             // which is java.lang.Object. Default to this only if no databinding
             // results
             if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
-                /*
-                if (isException) {
-                    // Next look to see if the DB's exceptionHandler handles this exception
-                    ExceptionHandler excHandler = binding.getExceptionHandler();
-                    if (excHandler != null) {
-                        // Asymmetric to have the introspect() methods set the DataBindings themselves
-                        // whereas we're setting it ourselves here.   
-                        DataType faultType = excHandler.getFaultType(dataType);
-                        if (faultType != null) {
-                            dataType.setDataBinding(binding.getName());
-                            dataType.setLogical(faultType);
-                            return true;
-                        }
-                    }
-                } else
-                */ 
-                {
-                    if (binding.introspect(dataType, annotations)) {
-                        return true;
-                    }
+                if (binding.introspect(dataType, operation)) {
+                    return true;
                 }
             }
         }
@@ -260,18 +222,30 @@
             return false;
         }
         if (dataType.getPhysical().isArray()) {
-            introspectArray(dataType, annotations);
+            introspectArray(dataType, operation);
             return true;
-        } else if (isException) {
+        } else if (Throwable.class.isAssignableFrom(physical)) {
             dataType.setDataBinding(JavaExceptionDataBinding.NAME);
             return true;
         } else {
             dataType.setDataBinding(JavaBeansDataBinding.NAME);
             return false;
+        }    }
+
+    private boolean introspectArray(DataType dataType, Operation operation) {
+        Class physical = dataType.getPhysical();
+        if (!physical.isArray() || physical == byte[].class) {
+            return false;
         }
+        Class componentType = physical.getComponentType();
+        DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
+        introspectType(logical, operation);
+        dataType.setDataBinding("java:array");
+        dataType.setLogical(logical);
+        return true;
     }
 
-    public DataType introspectType(Object value) {
+    public DataType introspectType(Object value, Operation operation) {
         loadDataBindings();
         DataType dataType = null;
         for (DataBinding binding : databindings) {

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java Thu Jun  5 09:54:27 2008
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
 
 /**
@@ -41,12 +42,11 @@
 
     /**
      * Get the data type for the wrapper
-     * @param element The wrapper element
-     * @param wrapperClass Wrapper class
-     * @param context The transformation context
+     * @param operation The operation
+     * @param input Is it for input or output?
      * @return The data type of the wrapper, null if it's not a wrapper type
      */
-    DataType getWrapperType(ElementInfo element, Class<? extends T> wrapperClass, TransformationContext context);
+    DataType getWrapperType(Operation operation, boolean input);
 
     /**
      * Check if the given data is an instance of the wrapper

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java Thu Jun  5 09:54:27 2008
@@ -22,15 +22,18 @@
 import java.util.List;
 
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
-import org.apache.tuscany.sca.xsd.XSDefinition;
 import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.XSDefinition;
 
 /**
  * XML and schema helper for Java types
  */
 public interface XMLTypeHelper {
 
+    // FIXME: This method seems to require the XMLHelper instance to be stateful
     /**
      * Convert a Java type into XML type information 
      * @param javaType the physical Java class
@@ -43,6 +46,23 @@
      * Get schema definitions for the Java types known to this helper
      * @return A list of schema definitions
      */
-    List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver);
+    // List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver);
+    
+    /**
+     * Get a list of XML schemas for the given data types
+     * @param factory
+     * @param resolver
+     * @param dataTypes
+     * @return
+     */
+    List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes);
+    /**
+     * Get a list of XML schemas for the given interface
+     * @param factory
+     * @param resolver
+     * @param intf
+     * @return
+     */
+    List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf);
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java Thu Jun  5 09:54:27 2008
@@ -18,13 +18,13 @@
  */
 package org.apache.tuscany.sca.databinding.impl;
 
-import java.lang.annotation.Annotation;
 
 import org.apache.tuscany.sca.databinding.DataBinding;
 import org.apache.tuscany.sca.databinding.SimpleTypeMapper;
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.databinding.XMLTypeHelper;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
@@ -77,7 +77,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public boolean introspect(DataType type, Annotation[] annotations) {
+    public boolean introspect(DataType type, Operation operation) {
         assert type != null;
         Class cls = type.getPhysical();
         if (baseType != null && baseType.isAssignableFrom(cls)) {
@@ -95,7 +95,7 @@
             return null;
         } else {
             DataType<Class> dataType = new DataTypeImpl<Class>(value.getClass(), value.getClass());
-            if (introspect(dataType, null)) {
+            if (introspect(dataType, (Operation) null)) {
                 return dataType;
             } else {
                 return null;

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java Thu Jun  5 09:54:27 2008
@@ -19,11 +19,11 @@
 
 package org.apache.tuscany.sca.databinding.impl;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
 /**
@@ -46,7 +46,7 @@
 
     @SuppressWarnings("unchecked")
     @Override
-    public boolean introspect(DataType type, Annotation[] annotations) {
+    public boolean introspect(DataType type, Operation operation) {
         if (markerTypes == null) {
             return false;
         }
@@ -61,9 +61,9 @@
         for (Class<?> c : markerTypes) {
             if (isTypeOf(c, cls)) {
                 type.setDataBinding(getDataBinding(c));
-                Object logical = getLogical(cls, annotations);
+                Object logical = getLogical(cls, null);
                 if (logical != null) {
-                    type.setLogical(getLogical(cls, annotations));
+                    type.setLogical(getLogical(cls, null));
                 } else {
                     type.setLogical(XMLType.UNKNOWN);
                 }
@@ -95,9 +95,9 @@
     /**
      * Get the logical type
      * @param type The java type
-     * @param annotations
+     * @param operation TODO
      * @return
      */
-    protected abstract Object getLogical(Class<?> type, Annotation[] annotations);
+    protected abstract Object getLogical(Class<?> type, Operation operation);
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java Thu Jun  5 09:54:27 2008
@@ -34,6 +34,7 @@
 import org.apache.tuscany.sca.databinding.Transformer;
 import org.apache.tuscany.sca.databinding.TransformerExtensionPoint;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 
 /**
@@ -55,7 +56,8 @@
     public Object mediate(Object source, DataType sourceDataType, DataType targetDataType, Map<String, Object> metadata) {
         if (sourceDataType == null || sourceDataType.getDataBinding() == null) {
             if (source != null) {
-                sourceDataType = dataBindings.introspectType(source);
+                Operation operation = (Operation) metadata.get("source.operation");
+                sourceDataType = dataBindings.introspectType(source, operation);
             }
         }
         if (sourceDataType == null || targetDataType == null) {
@@ -126,7 +128,8 @@
             return;
         }
         if (sourceDataType == null || sourceDataType.getDataBinding() == null) {
-            sourceDataType = dataBindings.introspectType(source);
+            Operation operation = (Operation) metadata.get("source.operation");
+            sourceDataType = dataBindings.introspectType(source, operation);
         }
         if (sourceDataType == null) {
             return;

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java Thu Jun  5 09:54:27 2008
@@ -19,7 +19,6 @@
 
 package org.apache.tuscany.sca.databinding.javabeans;
 
-import java.lang.annotation.Annotation;
 
 import javax.xml.namespace.QName;
 
@@ -27,6 +26,7 @@
 import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
 import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
@@ -48,7 +48,7 @@
     }
 
     @Override
-    public boolean introspect(DataType type, Annotation[] annotations) {
+    public boolean introspect(DataType type, Operation operation) {
         Class<?> cls = type.getPhysical();
         if (cls == Object.class) {
             return false;

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java Thu Jun  5 09:54:27 2008
@@ -18,13 +18,13 @@
  */
 package org.apache.tuscany.sca.databinding.xml;
 
-import java.lang.annotation.Annotation;
 
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.databinding.WrapperHandler;
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.w3c.dom.Node;
 
@@ -59,7 +59,7 @@
     }
 
     @Override
-    public boolean introspect(DataType type, Annotation[] annotations) {
+    public boolean introspect(DataType type, Operation operation) {
         if (Node.class.isAssignableFrom(type.getPhysical())) {
             if (type.getLogical() == null) {
                 type.setLogical(new XMLType(ROOT_ELEMENT, null));