Author: rfeng
Date: Wed May 28 10:36:29 2008
New Revision: 661026

URL: http://svn.apache.org/viewvc?rev=661026&view=rev
Log:
Enhance the wrapper processing by adding wrapper bean classes

Added:
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/
    
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/
    
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/
    
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
   (with props)
Modified:
    
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/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/JAXBContextCache.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/JAXBWrapperHandlerTestCase.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/SDOWrapperHandlerTestCase.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/xml/DOMWrapperHandler.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/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
    
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
    
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
    
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java

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=661026&r1=661025&r2=661026&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
 Wed May 28 10:36:29 2008
@@ -117,16 +117,18 @@
             ElementInfo wrapperElement = wrapper.getInputWrapperElement();
 
             if (source == null) {
-                Object targetWrapper = 
targetWrapperHandler.create(wrapperElement, context);
+                Object targetWrapper = 
targetWrapperHandler.create(wrapperElement, null, context);
                 return new Object[] {targetWrapper};
             }
 
             // 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, 
wrapper.getInputChildElements(), context);
+                    sourceWrapperHandler.getWrapperType(wrapperElement, 
sourceWrapperClass, context);
                 if (sourceWrapperType != null) {
-                    Object sourceWrapper = 
sourceWrapperHandler.create(wrapperElement, context);
+                    Object sourceWrapper = 
sourceWrapperHandler.create(wrapperElement, null, context);
                     if (sourceWrapper != null) {
                         for (int i = 0; i < source.length; i++) {
                             ElementInfo argElement = 
wrapper.getInputChildElements().get(i);
@@ -140,7 +142,7 @@
                 }
             }
             // Fall back to child by child transformation
-            Object targetWrapper = targetWrapperHandler.create(wrapperElement, 
context);
+            Object targetWrapper = targetWrapperHandler.create(wrapperElement, 
null, context);
             List<DataType> argTypes = 
wrapper.getUnwrappedInputType().getLogical();
 
             for (int i = 0; i < source.length; i++) {
@@ -163,8 +165,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().getInputWrapperClass() : null;
+
                     DataType targetWrapperType =
-                        targetWrapperHandler.getWrapperType(wrapperElement, 
childElements, context);
+                        targetWrapperHandler.getWrapperType(wrapperElement, 
targetWrapperClass, context);
                     if (targetWrapperType != null) {
                         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=661026&r1=661025&r2=661026&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
 Wed May 28 10:36:29 2008
@@ -136,10 +136,11 @@
 
                 // If the source can be wrapped, wrapped it first
                 if (sourceWrapperHandler != null) {
-                    DataType sourceWrapperType =
-                        sourceWrapperHandler.getWrapperType(wrapperElement, 
childElements, context);
+                    Class<?> sourceWrapperClass =
+                        sourceOp.getWrapper() != null ? 
sourceOp.getWrapper().getOutputWrapperClass() : null;
+                    DataType sourceWrapperType = 
sourceWrapperHandler.getWrapperType(wrapperElement, null, context);
                     if (sourceWrapperType != null) {
-                        Object sourceWrapper = 
sourceWrapperHandler.create(wrapperElement, context);
+                        Object sourceWrapper = 
sourceWrapperHandler.create(wrapperElement, null, context);
                         if (sourceWrapper != null) {
                             if (!childElements.isEmpty()) {
                                 // Set the return value
@@ -153,7 +154,7 @@
                         }
                     }
                 }
-                Object targetWrapper = 
targetWrapperHandler.create(wrapper.getOutputWrapperElement(), context);
+                Object targetWrapper = 
targetWrapperHandler.create(wrapper.getOutputWrapperElement(), null, context);
 
                 if (childElements.isEmpty()) {
                     // void output
@@ -179,8 +180,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;
+
                         DataType targetWrapperType =
-                            
targetWrapperHandler.getWrapperType(wrapperElement, childElements, context);
+                            
targetWrapperHandler.getWrapperType(wrapperElement, targetWrapperClass, 
context);
                         if (targetWrapperType != null) {
                             Object targetWrapper =
                                 mediator.mediate(sourceWrapper, 
sourceType.getLogical(), targetWrapperType, context

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=661026&r1=661025&r2=661026&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
 Wed May 28 10:36:29 2008
@@ -55,7 +55,7 @@
         this.factory = OMAbstractFactory.getOMFactory();
     }
 
-    public OMElement create(ElementInfo element, TransformationContext 
context) {
+    public OMElement create(ElementInfo element, Class<? extends OMElement> 
wrapperClass, TransformationContext context) {
         OMElement wrapper = AxiomHelper.createOMElement(factory, 
element.getQName());
         return wrapper;
     }
@@ -101,9 +101,9 @@
     }
 
     /**
-     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 List, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 Class, org.apache.tuscany.sca.databinding.TransformationContext)
      */
-    public DataType getWrapperType(ElementInfo element, List<ElementInfo> 
childElements, TransformationContext context) {
+    public DataType getWrapperType(ElementInfo element, Class<? extends 
OMElement> wrapperClass, TransformationContext context) {
         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/JAXBContextCache.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
 Wed May 28 10:36:29 2008
@@ -43,6 +43,7 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlSchema;
 import javax.xml.datatype.Duration;
 import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.namespace.QName;
@@ -163,7 +164,7 @@
         try {
             Class<?> cls = forName(p + ".package-info", false, cl);
             if (cls != null) {
-                return true;
+                return cls.isAnnotationPresent(XmlSchema.class);
             }
             //Catch Throwable as ClassLoader can throw an NoClassDefFoundError 
that
             //does not extend Exception. So we will absorb any Throwable 
exception here.

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=661026&r1=661025&r2=661026&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
 Wed May 28 10:36:29 2008
@@ -20,14 +20,13 @@
 package org.apache.tuscany.sca.databinding.jaxb;
 
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.annotation.XmlElementDecl;
-import javax.xml.bind.annotation.XmlRegistry;
 import javax.xml.bind.annotation.XmlType;
-import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
@@ -42,45 +41,25 @@
  *
  * @version $Rev$ $Date$
  */
-public class JAXBWrapperHandler implements WrapperHandler<JAXBElement<?>> {
+public class JAXBWrapperHandler implements WrapperHandler<Object> {
 
-    public JAXBElement<?> create(ElementInfo element, TransformationContext 
context) {
+    public Object create(ElementInfo element, final Class<? extends Object> 
wrapperClass, TransformationContext context) {
         try {
-            // FIXME: How do we map the global element to a factory?
-            String packageName = null;
-            String factoryClassName = packageName + ".ObjectFactory";
-            ClassLoader classLoader = context != null ? 
context.getClassLoader() : null;
-            if (classLoader == null) {
-                //FIXME Understand why we need this, the ClassLoader should be 
passed in
-                classLoader = Thread.currentThread().getContextClassLoader();
+            if (wrapperClass == null) {
+                return null;
             }
-            Class<?> factoryClass = Class.forName(factoryClassName, true, 
classLoader);
-            assert factoryClass.isAnnotationPresent(XmlRegistry.class);
-            Object factory = factoryClass.newInstance();
-            QName elementName = element.getQName();
-            Method method = null;
-            for (Method m : factoryClass.getMethods()) {
-                XmlElementDecl xmlElement = 
m.getAnnotation(XmlElementDecl.class);
-                QName name = new QName(xmlElement.namespace(), 
xmlElement.name());
-                if (xmlElement != null && name.equals(elementName)) {
-                    method = m;
-                    break;
+            return AccessController.doPrivileged(new 
PrivilegedExceptionAction<Object>() {
+                public Object run() throws Exception {
+                    return wrapperClass.newInstance();
                 }
-            }
-            if (method != null) {
-                Class typeClass = method.getParameterTypes()[0];
-                Object value = typeClass.newInstance();
-                return (JAXBElement<?>)method.invoke(factory, new Object[] 
{value});
-            } else {
-                throw new TransformationException("ObjectFactory cannot be 
resolved.");
-            }
-        } catch (Exception e) {
+            });
+        } catch (PrivilegedActionException e) {
             throw new TransformationException(e);
         }
     }
 
-    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo 
childElement, Object value) {
-        Object wrapperValue = wrapper.getValue();
+    public void setChild(Object wrapper, int i, ElementInfo childElement, 
Object value) {
+        Object wrapperValue = wrapper;
         Class<?> wrapperClass = wrapperValue.getClass();
 
         XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
@@ -107,8 +86,8 @@
     /**
      * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getChildren(java.lang.Object, 
List, TransformationContext)
      */
-    public List getChildren(JAXBElement<?> wrapper, List<ElementInfo> 
childElements, TransformationContext context) {
-        Object wrapperValue = wrapper.getValue();
+    public List getChildren(Object wrapper, List<ElementInfo> childElements, 
TransformationContext context) {
+        Object wrapperValue = wrapper;
         Class<?> wrapperClass = wrapperValue.getClass();
 
         XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
@@ -127,40 +106,15 @@
     }
 
     /**
-     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 List, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 Class, org.apache.tuscany.sca.databinding.TransformationContext)
      */
-    public DataType getWrapperType(ElementInfo element, List<ElementInfo> 
childElements, TransformationContext context) {
-        try {
-            // FIXME: How do we map the global element to a factory?
-            String packageName = null;
-            String factoryClassName = packageName + ".ObjectFactory";
-            ClassLoader classLoader = context != null ? 
context.getClassLoader() : null;
-            if (classLoader == null) {
-                //FIXME Understand why we need this, the ClassLoader should be 
passed in
-                classLoader = Thread.currentThread().getContextClassLoader();
-            }
-            Class<?> factoryClass = Class.forName(factoryClassName, true, 
classLoader);
-            assert factoryClass.isAnnotationPresent(XmlRegistry.class);
-            QName elementName = element.getQName();
-            Method method = null;
-            for (Method m : factoryClass.getMethods()) {
-                XmlElementDecl xmlElement = 
m.getAnnotation(XmlElementDecl.class);
-                QName name = new QName(xmlElement.namespace(), 
xmlElement.name());
-                if (xmlElement != null && name.equals(elementName)) {
-                    method = m;
-                    break;
-                }
-            }
-            if (method != null) {
-                Class typeClass = method.getParameterTypes()[0];
-                DataType<XMLType> wrapperType =
-                    new DataTypeImpl<XMLType>(JAXBDataBinding.NAME, typeClass, 
new XMLType(element));
-                return wrapperType;
-            }
-
-            return null;
-        } catch (Throwable e) {
+    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));
         }
     }
 

Added: 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java?rev=661026&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
 Wed May 28 10:36:29 2008
@@ -0,0 +1,45 @@
+/*
+ * 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 com.example.stock;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * <p>Java class for anonymous complex type.
+ * 
+ */
[EMAIL PROTECTED](XmlAccessType.FIELD)
[EMAIL PROTECTED](name = "", propOrder = {"input"})
[EMAIL PROTECTED](name = "stockQuoteOffer")
+public class StockQuoteOffer {
+
+    protected String input;
+
+    public String getInput() {
+        return this.input;
+    }
+
+    public void setInput(String input) {
+        this.input = input;
+    }
+
+}

Propchange: 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/com/example/stock/StockQuoteOffer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
 Wed May 28 10:36:29 2008
@@ -21,14 +21,15 @@
 
 import java.util.List;
 
-import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
 
+import junit.framework.Assert;
 import junit.framework.TestCase;
 
 import org.apache.tuscany.sca.databinding.jaxb.JAXBWrapperHandler;
+import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
 
-import com.example.ipo.jaxb.ObjectFactory;
-import com.example.ipo.jaxb.PurchaseOrderType;
+import com.example.stock.StockQuoteOffer;
 
 /**
  * Test case for JAXBExceptionHandler
@@ -36,7 +37,7 @@
  * @version $Rev$ $Date$
  */
 public class JAXBWrapperHandlerTestCase extends TestCase {
-    // private static final QName ELEMENT = new 
QName("http://www.example.com/IPO";, "purchaseOrder");
+    private static final QName ELEMENT = new 
QName("http://www.example.com/stock";, "stockQuoteOffer");
     private JAXBWrapperHandler handler;
 
     /**
@@ -49,26 +50,23 @@
     }
 
     public void testCreate() {
-        // ElementInfo element = new ElementInfo(ELEMENT, null);
-        // JAXBElement<?> jaxbElement = handler.create(element, null);
+        ElementInfo element = new ElementInfo(ELEMENT, null);
+        Object offer = handler.create(element, StockQuoteOffer.class, null);
+        Assert.assertTrue(offer instanceof StockQuoteOffer);
     }
 
     public void testSetChild() {
-        ObjectFactory factory = new ObjectFactory();
-        PurchaseOrderType po = factory.createPurchaseOrderType();
-        JAXBElement<PurchaseOrderType> wrapper = 
factory.createPurchaseOrder(po);
-        handler.setChild(wrapper, 2, null, "Comment");
+        StockQuoteOffer wrapper = new StockQuoteOffer();
+        handler.setChild(wrapper, 0, null, "IBM");
+        Assert.assertEquals("IBM", wrapper.getInput());
     }
 
     public void testGetChildren() {
-        ObjectFactory factory = new ObjectFactory();
-        PurchaseOrderType po = factory.createPurchaseOrderType();
-        po.setComment("Comment");
-        JAXBElement<PurchaseOrderType> wrapper = 
factory.createPurchaseOrder(po);
+        StockQuoteOffer wrapper = new StockQuoteOffer();
+        wrapper.setInput("IBM");
         List children = handler.getChildren(wrapper, null, null);
         assertNotNull(children);
-        assertEquals(4, children.size());
-        assertEquals("Comment", children.get(2));
-        assertNull(children.get(0));
+        assertEquals(1, children.size());
+        assertEquals("IBM", children.get(0));
     }
 }

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=661026&r1=661025&r2=661026&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
 Wed May 28 10:36:29 2008
@@ -50,9 +50,9 @@
 public class SDOWrapperHandler implements WrapperHandler<Object> {
 
     /**
-     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#create(ElementInfo, 
TransformationContext)
+     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#create(ElementInfo, Class, 
TransformationContext)
      */
-    public Object create(ElementInfo element, TransformationContext context) {
+    public Object create(ElementInfo element, Class<? extends Object> 
wrapperClass, TransformationContext context) {
         DataObject wrapper = null;
         HelperContext helperContext = 
SDOContextHelper.getHelperContext(context);
         Type sdoType = getSDOType(helperContext, element);
@@ -105,23 +105,13 @@
     }
 
     /**
-     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 List, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 Class, org.apache.tuscany.sca.databinding.TransformationContext)
      */
-    public DataType getWrapperType(ElementInfo element, List<ElementInfo> 
childElements, TransformationContext context) {
-        // FIXME: [rfeng] Temporarily disable the wrapping support for SDO to 
work around a few issues
-        // in the WSDL-less story: 
https://issues.apache.org/jira/browse/TUSCANY-1713
-//        if (true) {
-//            return null;
-//        }
+    public DataType getWrapperType(ElementInfo element, Class<? extends 
Object> wrapperClass, TransformationContext context) {
         HelperContext helperContext = 
SDOContextHelper.getHelperContext(context);
         Type sdoType = getSDOType(helperContext, element);
         if (sdoType != null) {
             // Check if child elements matches
-            for (ElementInfo child : childElements) {
-                if (sdoType.getProperty(child.getQName().getLocalPart()) == 
null) {
-                    return null;
-                }
-            }
             Class physical = sdoType.getInstanceClass();
             DataType<XMLType> wrapperType =
                 new DataTypeImpl<XMLType>(SDODataBinding.NAME, physical, new 
XMLType(element));

Modified: 
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandlerTestCase.java
 Wed May 28 10:36:29 2008
@@ -68,7 +68,7 @@
         XSDHelper xsdHelper = context.getXSDHelper();
         xsdHelper.define(getClass().getResourceAsStream("/wrapper.xsd"), null);
         ElementInfo element = new ElementInfo(new 
QName("http://www.example.com/wrapper";, "op"), null);
-        DataObject wrapper = (DataObject) handler.create(element, null);
+        DataObject wrapper = (DataObject) handler.create(element, null, null);
         assertNotNull(wrapper);
     }
 

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=661026&r1=661025&r2=661026&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
 Wed May 28 10:36:29 2008
@@ -32,21 +32,21 @@
 public interface WrapperHandler<T> {
     /**
      * Create a wrapper element
-     * 
      * @param element The XSD element
+     * @param wrapperClass The Wrapper class
      * @param context The transformation context
      * @return An object representing the wrapper element
      */
-    T create(ElementInfo element, TransformationContext context);
+    T create(ElementInfo element, Class<? extends T> wrapperClass, 
TransformationContext context);
 
     /**
      * Get the data type for the wrapper
      * @param element The wrapper element
-     * @param childElements A list of child elements
+     * @param wrapperClass Wrapper class
      * @param context The transformation context
      * @return The data type of the wrapper, null if it's not a wrapper type
      */
-    DataType getWrapperType(ElementInfo element, List<ElementInfo> 
childElements, TransformationContext context);
+    DataType getWrapperType(ElementInfo element, Class<? extends T> 
wrapperClass, TransformationContext context);
 
     /**
      * 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/xml/DOMWrapperHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
 Wed May 28 10:36:29 2008
@@ -45,7 +45,7 @@
         super();
     }
 
-    public Node create(ElementInfo element, TransformationContext context) {
+    public Node create(ElementInfo element, Class<? extends Node> 
wrapperClass, TransformationContext context) {
         try {
             Document document = DOMHelper.newDocument();
             QName name = element.getQName();
@@ -80,9 +80,9 @@
     }
 
     /**
-     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 List, org.apache.tuscany.sca.databinding.TransformationContext)
+     * @see 
org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo,
 Class, org.apache.tuscany.sca.databinding.TransformationContext)
      */
-    public DataType getWrapperType(ElementInfo element, List<ElementInfo> 
childElements, TransformationContext context) {
+    public DataType getWrapperType(ElementInfo element, Class<? extends Node> 
wrapperClass, TransformationContext context) {
         DataType<XMLType> wrapperType =
             new DataTypeImpl<XMLType>(DOMDataBinding.NAME, Node.class, new 
XMLType(element));
         return wrapperType;

Modified: 
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
 Wed May 28 10:36:29 2008
@@ -22,6 +22,9 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -74,10 +77,18 @@
     public JAXWSJavaInterfaceProcessor() {
         super();
     }
+    
+    private static String capitalize(String name) {
+        if (name == null || name.length() == 0) {
+            return name;
+        } else {
+            return Character.toUpperCase(name.charAt(0)) + name.substring(1);
+        }
+    }
 
     public void visitInterface(JavaInterface contract) throws 
InvalidInterfaceException {
 
-        Class<?> clazz = contract.getJavaClass();
+        final Class<?> clazz = contract.getJavaClass();
         WebService webService = clazz.getAnnotation(WebService.class);
         String tns = JavaXMLMapper.getNamespace(clazz);
         String localName = clazz.getSimpleName();
@@ -171,6 +182,21 @@
                 String ns = requestWrapper == null ? tns : 
getValue(requestWrapper.targetNamespace(), tns);
                 String name =
                     requestWrapper == null ? operationName : 
getValue(requestWrapper.localName(), operationName);
+                String wrapperBeanName = requestWrapper == null ? "" : 
requestWrapper.className();
+                if ("".equals(wrapperBeanName)) {
+                    wrapperBeanName = clazz.getPackage().getName() + ".jaxws." 
+ capitalize(method.getName());
+                }
+                Class<?> inputWrapperClass = null;
+                try {
+                    final String className = wrapperBeanName;
+                    inputWrapperClass = AccessController.doPrivileged(new 
PrivilegedExceptionAction<Class<?>>() {
+                        public Class<?> run() throws ClassNotFoundException {
+                            return Class.forName(className, false, 
clazz.getClassLoader());
+                        }
+                    });
+                } catch (PrivilegedActionException e) {
+                    // Ignore
+                }
                 QName inputWrapper = new QName(ns, name);
 
                 ResponseWrapper responseWrapper = 
method.getAnnotation(ResponseWrapper.class);
@@ -178,6 +204,22 @@
                 name =
                     responseWrapper == null ? operationName + "Response" : 
getValue(responseWrapper.localName(),
                                                                                
     operationName + "Response");
+                wrapperBeanName = responseWrapper == null ? "" : 
responseWrapper.className();
+                if ("".equals(wrapperBeanName)) {
+                    wrapperBeanName =
+                        clazz.getPackage().getName() + ".jaxws." + 
capitalize(method.getName()) + "Response";
+                }
+                Class<?> outputWrapperClass = null;
+                try {
+                    final String className = wrapperBeanName;
+                    outputWrapperClass = AccessController.doPrivileged(new 
PrivilegedExceptionAction<Class<?>>() {
+                        public Class<?> run() throws ClassNotFoundException {
+                            return Class.forName(className, false, 
clazz.getClassLoader());
+                        }
+                    });
+                } catch (PrivilegedActionException e) {
+                    // Ignore
+                }
                 QName outputWrapper = new QName(ns, name);
 
                 List<ElementInfo> inputElements = new ArrayList<ElementInfo>();
@@ -216,6 +258,8 @@
                 WrapperInfo wrapperInfo =
                     new WrapperInfo(JAXB_DATABINDING, new 
ElementInfo(inputWrapper, null),
                                     new ElementInfo(outputWrapper, null), 
inputElements, outputElements);
+                wrapperInfo.setInputWrapperClass(inputWrapperClass);
+                wrapperInfo.setOutputWrapperClass(outputWrapperClass);
                 operation.setWrapper(wrapperInfo);
             }
         }

Modified: 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/DataType.java
 Wed May 28 10:36:29 2008
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.sca.interfacedef;
 
+import java.lang.reflect.Type;
 
 /**
  * Representation of the type of data associated with an operation. Data is
@@ -41,14 +42,26 @@
      * Set the java type for the data
      * @param cls
      */
-    void setPhysical(Class cls);
+    void setPhysical(Class<?> cls);
 
     /**
      * Returns the physical type used by the runtime.
      * 
      * @return the physical type used by the runtime
      */
-    Class getPhysical();
+    Class<?> getPhysical();
+
+    /**
+     * Get the java generic type
+     * @return The java generic type
+     */
+    Type getGenericType();
+
+    /**
+     * Set the java generic type
+     * @param genericType
+     */
+    void setGenericType(Type genericType);
 
     /**
      * Returns the logical identifier used by the assembly. The type of this
@@ -66,22 +79,26 @@
     L getLogical();
 
     /**
-     * @return
+     * Get the databinding for the given data type
+     * @return the databinding
      */
     String getDataBinding();
 
     /**
+     * Set the databinding for the given data type
      * @param dataBinding the dataBinding to set
      */
     void setDataBinding(String dataBinding);
 
     /**
-     * @return
+     * Clone a data type
+     * @return The cloned data type
      * @throws CloneNotSupportedException
      */
     Object clone() throws CloneNotSupportedException;
 
     /**
+     * Set the logical type of the data type
      * @param logical the logical to set
      */
     void setLogical(L logical);

Modified: 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/DataTypeImpl.java
 Wed May 28 10:36:29 2008
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.sca.interfacedef.impl;
 
+import java.lang.reflect.Type;
+
 import org.apache.tuscany.sca.interfacedef.DataType;
 
 /**
@@ -38,9 +40,9 @@
  * @version $Rev$ $Date$
  */
 public class DataTypeImpl<L> implements DataType<L> {
-    private boolean unresolved = true;
     private String dataBinding;
-    private Class physical;
+    private Class<?> physical;
+    private Type genericType;
     private L logical;
 
     /**
@@ -50,14 +52,30 @@
      * @param logical the logical type
      * @see #getLogical()
      */
-    public DataTypeImpl(Class physical, L logical) {
-        this.physical = physical;
-        this.logical = logical;
+    public DataTypeImpl(Class<?> physical, L logical) {
+        this(null, physical, physical, logical);
+    }
+
+    /**
+     * @param dataBinding
+     * @param physical
+     * @param logical
+     */
+    public DataTypeImpl(String dataBinding, Class<?> physical, L logical) {
+        this(dataBinding, physical, physical, logical);
     }
 
-    public DataTypeImpl(String dataBinding, Class physical, L logical) {
+    /**
+     * @param dataBinding
+     * @param physical
+     * @param genericType
+     * @param logical
+     */
+    public DataTypeImpl(String dataBinding, Class<?> physical, Type 
genericType, L logical) {
+        super();
         this.dataBinding = dataBinding;
         this.physical = physical;
+        this.genericType = genericType;
         this.logical = logical;
     }
 
@@ -66,11 +84,34 @@
      * 
      * @return the physical type used by the runtime
      */
-    public Class getPhysical() {
+    public Class<?> getPhysical() {
         return physical;
     }
 
     /**
+     * @param physical the physical to set
+     */
+    public void setPhysical(Class<?> physical) {
+        this.physical = physical;
+    }
+
+    /**
+     * Get the java generic type
+     * @return The java generic type
+     */
+    public Type getGenericType() {
+        return genericType;
+    }
+
+    /**
+     * Set the java generic type
+     * @param genericType
+     */
+    public void setGenericType(Type genericType) {
+        this.genericType = genericType;
+    }
+
+    /**
      * Returns the logical identifier used by the assembly. The type of this
      * value identifies the logical type system in use. Known values are:
      * <ul>
@@ -87,6 +128,13 @@
         return logical;
     }
 
+    /**
+     * @param logical the logical to set
+     */
+    public void setLogical(L logical) {
+        this.logical = logical;
+    }
+
     public String getDataBinding() {
         return dataBinding;
     }
@@ -112,78 +160,46 @@
         return copy;
     }
 
-    /**
-     * @param logical the logical to set
-     */
-    public void setLogical(L logical) {
-        this.logical = logical;
-    }
-
     @Override
     public int hashCode() {
-        final int PRIME = 31;
+        final int prime = 31;
         int result = 1;
-        result = PRIME * result + ((dataBinding == null) ? 0 : 
dataBinding.hashCode());
-        result = PRIME * result + ((logical == null) ? 0 : logical.hashCode());
-        result = PRIME * result + ((physical == null) ? 0 : 
physical.hashCode());
+        result = prime * result + ((dataBinding == null) ? 0 : 
dataBinding.hashCode());
+        result = prime * result + ((genericType == null) ? 0 : 
genericType.hashCode());
+        result = prime * result + ((logical == null) ? 0 : logical.hashCode());
+        result = prime * result + ((physical == null) ? 0 : 
physical.hashCode());
         return result;
     }
 
     @Override
     public boolean equals(Object obj) {
-        if (this == obj) {
+        if (this == obj)
             return true;
-        }
-        if (obj == null) {
+        if (obj == null)
             return false;
-        }
-        if (getClass() != obj.getClass()) {
+        if (getClass() != obj.getClass())
             return false;
-        }
         final DataTypeImpl other = (DataTypeImpl)obj;
         if (dataBinding == null) {
-            if (other.dataBinding != null) {
+            if (other.dataBinding != null)
                 return false;
-            }
-        } else if (!dataBinding.equals(other.dataBinding)) {
+        } else if (!dataBinding.equals(other.dataBinding))
+            return false;
+        if (genericType == null) {
+            if (other.genericType != null)
+                return false;
+        } else if (!genericType.equals(other.genericType))
             return false;
-        }
         if (logical == null) {
-            if (other.logical != null) {
+            if (other.logical != null)
                 return false;
-            }
-        } else if (!logical.equals(other.logical)) {
+        } else if (!logical.equals(other.logical))
             return false;
-        }
         if (physical == null) {
-            if (other.physical != null) {
+            if (other.physical != null)
                 return false;
-            }
-        } else if (!physical.equals(other.physical)) {
+        } else if (!physical.equals(other.physical))
             return false;
-        }
         return true;
     }
-
-    /**
-     * @return the unresolved
-     */
-    public boolean isUnresolved() {
-        return unresolved;
-    }
-
-    /**
-     * @param unresolved the unresolved to set
-     */
-    public void setUnresolved(boolean unresolved) {
-        this.unresolved = unresolved;
-    }
-
-    /**
-     * @param physical the physical to set
-     */
-    public void setPhysical(Class physical) {
-        this.physical = physical;
-    }
-
 }

Modified: 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/FaultException.java
 Wed May 28 10:36:29 2008
@@ -28,7 +28,7 @@
  */
 public class FaultException extends Exception {
     private static final long serialVersionUID = -8002583655240625792L;
-    private Object faultInfo;
+    private transient Object faultInfo; // FIXME: How to serialize it?
     private QName faultName;
 
     /**

Modified: 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java?rev=661026&r1=661025&r2=661026&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/util/WrapperInfo.java
 Wed May 28 10:36:29 2008
@@ -61,7 +61,10 @@
     private DataType<XMLType> unwrappedOutputType;
 
     private String dataBinding;
-
+    
+    private Class<?> inputWrapperClass;
+    private Class<?> outputWrapperClass;
+    
     public WrapperInfo(String dataBinding,
                        ElementInfo inputWrapperElement,
                        ElementInfo outputWrapperElement,
@@ -147,4 +150,20 @@
         }
         return unwrappedOutputType;
     }
+
+    public Class<?> getInputWrapperClass() {
+        return inputWrapperClass;
+    }
+
+    public void setInputWrapperClass(Class<?> inputWrapperClass) {
+        this.inputWrapperClass = inputWrapperClass;
+    }
+
+    public Class<?> getOutputWrapperClass() {
+        return outputWrapperClass;
+    }
+
+    public void setOutputWrapperClass(Class<?> outputWrapperClass) {
+        this.outputWrapperClass = outputWrapperClass;
+    }
 }


Reply via email to