You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by ant elder <an...@gmail.com> on 2007/02/23 13:51:13 UTC

Re: svn commit: r510671 - in /incubator/tuscany/branches/sca-java-integration/sca: extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ extensions/axis2/samples/helloworldwsclient/ kernel/api/src/main/java/org/apache/tusca

It looks like this change stops the databinding from working with interfaces
that mix SDO and non-SDO types. See the wsdl itest SDOWSDLTestCase for an
example, Client1a2a3a4a works before this change and not after. Is this
supposed to work like this or must you define all the types with @DataType
annotations now?

   ...ant

On 2/22/07, rfeng@apache.org <rf...@apache.org> wrote:
>
> Author: rfeng
> Date: Thu Feb 22 13:57:46 2007
> New Revision: 510671
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=510671
> Log:
> [sca-integration-branch] Improvements over databindings, adding more
> heuristic introspections
>
> Added:
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> (with props)
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> (with props)
> Modified:
>
>     incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>
>     incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> Thu Feb 22 13:57:46 2007
> @@ -19,7 +19,10 @@
>
> package org.apache.tuscany.databinding.axiom;
>
> +import java.util.ArrayList;
> +import java.util.Collections;
> import java.util.Iterator;
> +import java.util.List;
>
> import org.apache.axiom.om.OMAbstractFactory;
> import org.apache.axiom.om.OMElement;
> @@ -45,23 +48,16 @@
>          return wrapper;
>      }
>
> -    public Object getChild(OMElement wrapper, int i, ElementInfo element)
> {
> -        int index = 0;
> -        for (Iterator e = wrapper.getChildElements(); e.hasNext();) {
> -            OMElement child = (OMElement) e.next();
> -            if (index != i) {
> -                index++;
> -                continue;
> -            }
> -            if (child.getQName().equals(element.getQName())) {
> -                return child;
> -            }
> -        }
> -        return null;
> -    }
> -
>      public void setChild(OMElement wrapper, int i, ElementInfo
> childElement, Object value) {
>          wrapper.addChild((OMElement) value);
> +    }
> +
> +    public List getChildren(OMElement wrapper) {
> +        List<Object> elements = new ArrayList<Object>();
> +        for (Iterator i = wrapper.getChildElements(); i.hasNext();) {
> +            elements.add(i.next());
> +        }
> +        return elements;
>      }
>
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> Thu Feb 22 13:57:46 2007
> @@ -55,6 +55,20 @@
>                      </archive>
>                  </configuration>
>              </plugin>
> +                <plugin>
> +                    <groupId>org.apache.maven.plugins</groupId>
> +                    <artifactId>maven-surefire-plugin</artifactId>
> +                    <version>2.2</version>
> +                    <configuration>
> +                        <includes>
> +                            <include>**/*TestCase.java</include>
> +                        </includes>
> +                        <reportFormat>brief</reportFormat>
> +                        <useFile>false</useFile>
> +                        <forkMode>never</forkMode>
> +                        <argLine>-ea</argLine>
> +                    </configuration>
> +                </plugin>
>          </plugins>
>      </build>
>
>
> Added:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java?view=auto&rev=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> (added)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> Thu Feb 22 13:57:46 2007
> @@ -0,0 +1,42 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *   http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.tuscany.api.annotation;
> +
> +import static java.lang.annotation.ElementType.METHOD;
> +import static java.lang.annotation.ElementType.TYPE;
> +import static java.lang.annotation.RetentionPolicy.RUNTIME;
> +
> +import java.lang.annotation.Retention;
> +import java.lang.annotation.Target;
> +
> +/**
> + * Annotation that can be applied to interfaces or methods to indicate a
> wrapper
> + * style
> + *
> + * @version $Rev$ $Date$
> + */
> +@Target( {METHOD, TYPE})
> +@Retention(RUNTIME)
> +public @interface WrapperStyle {
> +
> +    /**
> +     * The name of the databinding for the wrapper
> +     */
> +    String value();
> +}
>
> Propchange:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>
> ------------------------------------------------------------------------------
>     svn:keywords = Rev Date
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,7 @@
>
> package org.apache.tuscany.core.databinding.impl;
>
> +import java.lang.annotation.Annotation;
> import java.lang.reflect.Method;
> import java.lang.reflect.Type;
> import java.math.BigDecimal;
> @@ -30,35 +31,46 @@
> import java.util.HashSet;
> import java.util.Map;
> import java.util.Set;
> +
> import javax.xml.datatype.Duration;
> import javax.xml.datatype.XMLGregorianCalendar;
>
> +import org.apache.tuscany.api.annotation.DataContext;
> +import org.apache.tuscany.api.annotation.DataType;
> +import org.apache.tuscany.api.annotation.WrapperStyle;
> +import org.apache.tuscany.spi.annotation.Autowire;
> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
> import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
> import org.apache.tuscany.spi.model.Operation;
>
> -import org.apache.tuscany.api.annotation.DataContext;
> -import org.apache.tuscany.api.annotation.DataType;
> -
> /**
>   * The databinding annotation processor for java interfaces
> - *
> + *
>   * @version $Rev$ $Date$
>   */
> public class DataBindingJavaInterfaceProcessor extends
> JavaInterfaceProcessorExtension {
> -
> -    private static final String SIMPLE_JAVA_OBJECTS = "java.lang.Object";
> -
>      private static final Class[] SIMPLE_JAVA_TYPES =
>          {Byte.class, Character.class, Short.class, Integer.class,
> Long.class, Float.class, Double.class, Date.class,
> -        Calendar.class, GregorianCalendar.class, Duration.class,
> XMLGregorianCalendar.class, BigInteger.class,
> -        BigDecimal.class};
> +         Calendar.class, GregorianCalendar.class, Duration.class,
> XMLGregorianCalendar.class, BigInteger.class,
> +         BigDecimal.class};
>
>      private static final Set<Class> SIMPLE_TYPE_SET = new HashSet<Class>(
> Arrays.asList(SIMPLE_JAVA_TYPES));
>
> +    private DataBindingRegistry dataBindingRegistry;
> +
> +    public DataBindingJavaInterfaceProcessor(@Autowire
> +    DataBindingRegistry dataBindingRegistry) {
> +        super();
> +        this.dataBindingRegistry = dataBindingRegistry;
> +    }
> +
>      public void visitInterface(Class<?> clazz, Class<?> callbackClass,
> JavaServiceContract contract)
>          throws InvalidServiceContractException {
> +        if (!contract.isRemotable()) {
> +            return;
> +        }
>          Map<String, Operation<Type>> operations = contract.getOperations
> ();
>          processInterface(clazz, contract, operations);
>          if (callbackClass != null) {
> @@ -67,9 +79,9 @@
>          }
>      }
>
> -    private void processInterface(Class<?> clazz,
> -                                  JavaServiceContract contract,
> +    private void processInterface(Class<?> clazz, JavaServiceContract
> contract,
>                                    Map<String, Operation<Type>>
> operations) {
> +        WrapperStyle interfaceWrapperStyle = clazz.getAnnotation(
> WrapperStyle.class);
>          DataType interfaceDataType = clazz.getAnnotation(DataType.class);
>          if (interfaceDataType != null) {
>              contract.setDataBinding(interfaceDataType.name());
> @@ -81,6 +93,9 @@
>          for (Method method : clazz.getMethods()) {
>              Operation<?> operation = operations.get(method.getName());
>              DataType operationDataType = method.getAnnotation(
> DataType.class);
> +            if (operationDataType == null) {
> +                operationDataType = interfaceDataType;
> +            }
>
>              if (operationDataType != null) {
>                  operation.setDataBinding(operationDataType.name());
> @@ -89,44 +104,31 @@
>                      operation.setMetaData(c.key(), c.value());
>                  }
>              }
> +            WrapperStyle operationWrapperStyle = clazz.getAnnotation(
> WrapperStyle.class);
> +            if (operationWrapperStyle == null) {
> +                operationWrapperStyle = interfaceWrapperStyle;
> +            }
> +
> +            if (operationWrapperStyle != null) {
> +                operation.setDataBinding(operationWrapperStyle.value());
> +                operation.setWrapperStyle(true);
> +            }
> +            // String dataBinding = operation.getDataBinding();
>
> -            String dataBinding = operation.getDataBinding();
> -
> +            Annotation[] annotations = null;
> +            if (operationDataType != null) {
> +                annotations = new Annotation[] {operationDataType};
> +            }
>              // FIXME: We need a better way to identify simple java types
>              for (org.apache.tuscany.spi.model.DataType<?> d :
> operation.getInputType().getLogical()) {
> -                adjustSimpleType(d, dataBinding);
> +                dataBindingRegistry.introspectType(d, annotations);
>              }
>              if (operation.getOutputType() != null) {
> -                adjustSimpleType(operation.getOutputType(), dataBinding);
> +                dataBindingRegistry.introspectType(
> operation.getOutputType(), annotations);
>              }
>              for (org.apache.tuscany.spi.model.DataType<?> d :
> operation.getFaultTypes()) {
> -                adjustSimpleType(d, dataBinding);
> +                dataBindingRegistry.introspectType(d, annotations);
>              }
> -        }
> -    }
> -
> -    private void adjustSimpleType(org.apache.tuscany.spi.model.DataType<?>
> dataType, String dataBinding) {
> -        Type type = dataType.getPhysical();
> -        if (!(type instanceof Class)) {
> -            return;
> -        }
> -        Class cls = (Class) dataType.getPhysical();
> -        if (cls.isPrimitive() || SIMPLE_TYPE_SET.contains(cls)) {
> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
> -        }
> -        /**
> -         * [rfeng] The following code hits a bug in IBM JDK 5.0
> -         * if (cls == String.class && (dataBinding == null ||
> !dataBinding.equals(String.class.getName()))) {
> -         *      // Identify the String as a simple type
> -         *      dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
> -         * }
> -         */
> -
> -        boolean plainString =
> -            cls == String.class && ((dataBinding == null) ||
> !dataBinding.equals(String.class.getName()));
> -        if (plainString) {
> -            // Identify the String as a simple type
> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>          }
>      }
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> Thu Feb 22 13:57:46 2007
> @@ -19,15 +19,17 @@
>
> package org.apache.tuscany.core.databinding.impl;
>
> +import java.lang.annotation.Annotation;
> import java.util.HashMap;
> +import java.util.HashSet;
> import java.util.Map;
> -
> -import org.osoa.sca.annotations.EagerInit;
> +import java.util.Set;
>
> import org.apache.tuscany.core.databinding.javabeans.JavaBeansDataBinding;
> import org.apache.tuscany.spi.databinding.DataBinding;
> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> import org.apache.tuscany.spi.model.DataType;
> +import org.osoa.sca.annotations.EagerInit;
>
> /**
>   * The default implementation of a data binding registry
> @@ -47,34 +49,53 @@
>
>      public void register(DataBinding dataBinding) {
>          bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
> +        String[] aliases = dataBinding.getAliases();
> +        if (aliases != null) {
> +            for (String alias : aliases) {
> +                bindings.put(alias.toLowerCase(), dataBinding);
> +            }
> +        }
>      }
>
>      public DataBinding unregister(String id) {
>          if (id == null) {
>              return null;
>          }
> -        return bindings.remove(id.toLowerCase());
> +        DataBinding dataBinding = bindings.remove(id.toLowerCase());
> +        if (dataBinding != null) {
> +            String[] aliases = dataBinding.getAliases();
> +            if (aliases != null) {
> +                for (String alias : aliases) {
> +                    bindings.remove(alias.toLowerCase());
> +                }
> +            }
> +        }
> +        return dataBinding;
> +    }
> +
> +    private Set<DataBinding> getDataBindings() {
> +        return new HashSet<DataBinding>(bindings.values());
>      }
>
> -    public DataType introspectType(Class<?> javaType) {
> -        DataType dataType = null;
> -        for (DataBinding binding : bindings.values()) {
> +    public boolean introspectType(DataType dataType, Annotation[]
> annotations) {
> +        for (DataBinding binding : getDataBindings()) {
>              //don't introspect for JavaBeansDatabinding as all javatypes
> will anyways match to its basetype
>              //which is java.lang.Object.  Default to this only if no
> databinding results
>              if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
> -                dataType = binding.introspect(javaType);
> -            }
> -
> -            if (dataType != null) {
> -                return dataType;
> +                if (binding.introspect(dataType, annotations)) {
> +                    return true;
> +                }
>              }
>          }
> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
> Object.class, javaType);
> +        if (dataType.getDataBinding() == null) {
> +            dataType.setDataBinding(JavaBeansDataBinding.NAME);
> +        }
> +        return false;
>      }
>
>      public DataType introspectType(Object value) {
>          DataType dataType = null;
> -        for (DataBinding binding : bindings.values()) {
> +        for (DataBinding binding : getDataBindings()) {
>              //don't introspect for JavaBeansDatabinding as all javatypes
> will anyways match to its basetype
>              //which is java.lang.Object.  Default to this only if no
> databinding results
>              if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
> @@ -84,7 +105,7 @@
>                  return dataType;
>              }
>          }
> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
> Object.class, value.getClass());
> +        return new DataType<Class>(JavaBeansDataBinding.NAME,
> value.getClass(), value.getClass());
>      }
>
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> Thu Feb 22 13:57:46 2007
> @@ -144,8 +144,8 @@
>          } else if (sourceWrapped && (!targetWrapped)) {
>              // Wrapped to Unwrapped
>              Object sourceWrapper = source[0];
> -            List<ElementInfo> childElements = sourceOp.getWrapper
> ().getInputChildElements();
> -            Object[] target = new Object[childElements.size()];
> +            // List<ElementInfo> childElements = sourceOp.getWrapper
> ().getInputChildElements();
> +            Object[] target = null;
>
>              targetWrapperHandler = getWapperHandler(
> targetType.getOperation().getDataBinding(), false);
>              if (targetWrapperHandler != null) {
> @@ -160,18 +160,15 @@
>                                       sourceType.getLogical().get(0),
>                                       targetWrapperType,
>                                       context.getMetadata());
> -                for (int i = 0; i < childElements.size(); i++) {
> -                    ElementInfo childElement = childElements.get(i);
> -                    target[i] = targetWrapperHandler.getChild(targetWrapper,
> i, childElement);
> -                }
> +                target = targetWrapperHandler.getChildren
> (targetWrapper).toArray();
>              } else {
> -                for (int i = 0; i < childElements.size(); i++) {
> -                    ElementInfo childElement = childElements.get(i);
> -                    Object child = sourceWrapperHandler.getChild(sourceWrapper,
> i, childElement);
> +                Object[] sourceChildren =
> sourceWrapperHandler.getChildren(sourceWrapper).toArray();
> +                target = new Object[sourceChildren.length];
> +                for (int i = 0; i < sourceChildren.length; i++) {
>                      DataType<QName> childType =
>                          sourceOp.getWrapper
> ().getUnwrappedInputType().getLogical().get(i);
>                      target[i] =
> -                        mediator.mediate(child, childType,
> targetType.getLogical().get(i), context
> +                        mediator.mediate(sourceChildren[i], childType,
> targetType.getLogical().get(i), context
>                              .getMetadata());
>                  }
>              }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> Thu Feb 22 13:57:46 2007
> @@ -157,8 +157,6 @@
>                      // The void output
>                      return null;
>                  }
> -                ElementInfo childElement = childElements.get(0);
> -
>                  targetWrapperHandler = getWapperHandler(
> targetType.getLogical().getDataBinding());
>                  if (targetWrapperHandler != null) {
>                      ElementInfo wrapperElement = sourceOp.getWrapper
> ().getInputWrapperElement();
> @@ -170,9 +168,9 @@
>                      Object targetWrapper =
>                          mediator.mediate(sourceWrapper,
> sourceType.getLogical(), targetWrapperType, context
>                              .getMetadata());
> -                    return targetWrapperHandler.getChild(targetWrapper,
> 0, childElement);
> +                    return targetWrapperHandler.getChildren
> (targetWrapper).get(0);
>                  } else {
> -                    Object child = sourceWrapperHandler.getChild(sourceWrapper,
> 0, childElement);
> +                    Object child = sourceWrapperHandler.getChildren
> (sourceWrapper).get(0);
>                      DataType<?> childType = sourceOp.getWrapper
> ().getUnwrappedOutputType();
>                      return mediator.mediate(child, childType,
> targetType.getLogical(), context.getMetadata());
>                  }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,9 @@
>
> package org.apache.tuscany.core.databinding.xml;
>
> +import java.util.ArrayList;
> +import java.util.List;
> +
> import javax.xml.namespace.QName;
> import javax.xml.parsers.ParserConfigurationException;
>
> @@ -49,31 +52,27 @@
>          return DOMHelper.createElement(document, name);
>      }
>
> -    public Object getChild(Node wrapper, int i, ElementInfo element) {
> -        int index = 0;
> -        NodeList nodes = wrapper.getChildNodes();
> -        for (int j = 0; j < nodes.getLength(); j++) {
> -            Node node = nodes.item(j);
> -            if (node.getNodeType() != Node.ELEMENT_NODE) {
> -                continue;
> -            }
> -            if (index != i) {
> -                index++;
> -            } else {
> -                QName name = DOMHelper.getQName(node);
> -                if (name.equals(element.getQName())) {
> -                    return node;
> -                }
> -            }
> -        }
> -        return null;
> -    }
> -
>      public void setChild(Node wrapper, int i, ElementInfo childElement,
> Object value) {
>          Node node = (Node) value;
>          if (node.getNodeType() == Node.DOCUMENT_NODE) {
>              node = ((Document) node).getDocumentElement();
>          }
>          wrapper.appendChild(wrapper.getOwnerDocument().importNode(node,
> true));
> +    }
> +
> +    public List getChildren(Node wrapper) {
> +        assert wrapper != null;
> +        if (wrapper.getNodeType() == Node.DOCUMENT_NODE) {
> +            wrapper = ((Document) wrapper).getDocumentElement();
> +        }
> +        List<Node> elements = new ArrayList<Node>();
> +        NodeList nodes = wrapper.getChildNodes();
> +        for (int j = 0; j < nodes.getLength(); j++) {
> +            Node node = nodes.item(j);
> +            if (node.getNodeType() == Node.ELEMENT_NODE) {
> +                elements.add(node);
> +            }
> +        }
> +        return elements;
>      }
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> Thu Feb 22 13:57:46 2007
> @@ -91,10 +91,8 @@
>              if (dataBinding != null) {
>                  targetDataType = new DataType<Class>(dataBinding,
> javaType, javaType);
>              } else {
> -                targetDataType = registry.introspectType(javaType);
> -                if (targetDataType == null) {
> -                    targetDataType = new DataType<Class>("
> java.lang.Object", javaType, javaType);
> -                }
> +                targetDataType = new DataType<Class>(dataBinding,
> javaType, javaType);
> +                registry.introspectType(targetDataType, null);
>              }
>          }
>
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> Thu Feb 22 13:57:46 2007
> @@ -30,6 +30,7 @@
>
> import org.apache.tuscany.api.annotation.DataContext;
> import org.apache.tuscany.api.annotation.DataType;
> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
> import org.apache.tuscany.spi.model.Operation;
> @@ -52,7 +53,8 @@
>       * @throws InvalidServiceContractException
>       */
>      public final void testVisitInterface() throws
> InvalidServiceContractException {
> -        DataBindingJavaInterfaceProcessor processor = new
> DataBindingJavaInterfaceProcessor();
> +        DataBindingRegistry registry = new DataBindingRegistryImpl();
> +        DataBindingJavaInterfaceProcessor processor = new
> DataBindingJavaInterfaceProcessor(registry);
>          JavaServiceContract contract = new JavaServiceContract(
> MockInterface.class);
>          Map<String, Operation<Type>> operations = new HashMap<String,
> Operation<Type>>();
>          Operation<Type> operation = new Operation<Type>("call", null,
> null, null, false, null, NO_CONVERSATION);
> @@ -60,6 +62,7 @@
>          operations.put("call", operation);
>          operations.put("call1", operation1);
>          contract.setOperations(operations);
> +        contract.setRemotable(true);
>          processor.visitInterface(MockInterface.class, null, contract);
>          Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding
> ());
>          Assert.assertEquals("element",
> (String)contract.getMetaData().get("nodeType"));
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> Thu Feb 22 13:57:46 2007
> @@ -22,6 +22,8 @@
> import static org.easymock.EasyMock.expect;
> import static org.easymock.EasyMock.replay;
>
> +import java.lang.annotation.Annotation;
> +
> import javax.xml.stream.XMLStreamReader;
>
> import junit.framework.Assert;
> @@ -49,19 +51,23 @@
>
>      public void testRegistry() {
>          DataBinding db1 = createMock(DataBinding.class);
> +        expect(db1.getAliases()).andReturn(new String[]
> {"db1"}).anyTimes();
>          expect(db1.getName()).andReturn(ContentHandler.class.getName
> ()).anyTimes();
>          DataType<Class> dataType1 = new DataType<Class>(
> ContentHandler.class, ContentHandler.class);
> -        expect(db1.introspect(ContentHandler.class
> )).andReturn(dataType1);
> -        expect(db1.introspect
> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
> +        expect(db1.introspect(dataType1, null)).andReturn(true);
> +        expect(db1.introspect(EasyMock.not(EasyMock.same(dataType1)),
> (Annotation[])EasyMock.isNull()))
> +            .andReturn(false).anyTimes();
>          replay(db1);
>
>          registry.register(db1);
>
>          DataBinding db2 = createMock(DataBinding.class);
> +        expect(db2.getAliases()).andReturn(new String[]
> {"db2"}).anyTimes();
>          expect(db2.getName()).andReturn(XMLStreamReader.class.getName
> ()).anyTimes();
>          DataType<Class> dataType2 = new DataType<Class>(
> XMLStreamReader.class, XMLStreamReader.class);
> -        expect(db2.introspect(XMLStreamReader.class
> )).andReturn(dataType2);
> -        expect(db2.introspect
> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
> +        expect(db2.introspect(dataType2, null)).andReturn(true);
> +        expect(db2.introspect(EasyMock.not(EasyMock.same(dataType2)),
> (Annotation[])EasyMock.isNull()))
> +            .andReturn(false).anyTimes();
>          replay(db2);
>
>          registry.register(db2);
> @@ -70,17 +76,17 @@
>          DataBinding db3 = registry.getDataBinding(name);
>          Assert.assertTrue(db1 == db3);
>
> -        DataType<?> dt = registry.introspectType(ContentHandler.class);
> -        Assert.assertEquals(dataType1, dt);
> +        DataType dt = new DataType(ContentHandler.class, null);
> +        registry.introspectType(dt, null);
> +        Assert.assertEquals(dataType1.getLogical(), ContentHandler.class
> );
>          Assert.assertTrue(dt.getDataBinding().equalsIgnoreCase(name));
>
>          registry.unregister(name);
>          DataBinding db4 = registry.getDataBinding(name);
>          Assert.assertNull(db4);
> -
> -
> -        dt = registry.introspectType(ContentHandler.class);
> -        Assert.assertNotNull(dt);
> +
> +        dt = new DataType(null, String.class, null);
> +        registry.introspectType(dt, null);
>          Assert.assertEquals("java.lang.Object", dt.getDataBinding());
>      }
>
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,8 @@
>
> package org.apache.tuscany.spi.databinding;
>
> +import java.lang.annotation.Annotation;
> +
> import org.apache.tuscany.spi.model.DataType;
>
> /**
> @@ -43,14 +45,22 @@
>       * @return The name of the databinding
>       */
>      String getName();
> +
> +    /**
> +     * Get the aliases for the databinding
> +     *
> +     * @return An array of aliases
> +     */
> +    String[] getAliases();
>
>      /**
> -     * Introspect a java class or interface to create a DataType model
> +     * Introspect and populate information to a DataType model
>       *
>       * @param javaType The java class or interface to be introspected
> -     * @return The DataType or null if the java type is not supported by
> this databinding
> +     * @param annotations The java annotations
> +     * @return true if the databinding has recognized the given data type
>       */
> -    DataType introspect(Class<?> javaType);
> +    boolean introspect(DataType dataType, Annotation[] annotations);
>
>      /**
>       * Introspect the data to figure out the corresponding data type
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> Thu Feb 22 13:57:46 2007
> @@ -18,6 +18,8 @@
>   */
> package org.apache.tuscany.spi.databinding;
>
> +import java.lang.annotation.Annotation;
> +
> import org.apache.tuscany.spi.model.DataType;
>
> /**
> @@ -50,11 +52,12 @@
>      /**
>       * Introspect the java class to figure out what DataType supports it
>       *
> -     * @param javaType The java class or interface
> +     * @param DataType The initial data type
> +     * @param annotations The java annotations
>       * @return A DataType representing the java type or null if no
> databinding
>       *         recognizes the java type
>       */
> -    DataType introspectType(Class<?> javaType);
> +    boolean introspectType(DataType dataType, Annotation[] annotations);
>
>      /**
>       * Introspect the value to figure out the corresponding DataType
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,8 @@
>
> package org.apache.tuscany.spi.databinding;
>
> +import java.util.List;
> +
> import org.apache.tuscany.spi.idl.ElementInfo;
>
> /**
> @@ -45,12 +47,9 @@
>      void setChild(T wrapper, int i, ElementInfo childElement, Object
> value);
>
>      /**
> -     * Get child element from the wrapper
> -     *
> -     * @param wrapper The wrapper
> -     * @param i The index
> -     * @param element The XSD element
> -     * @return The value of the child
> +     * Get a list of child elements from the wrapper
> +     * @param wrapper
> +     * @return child elements under the wrapper
>       */
> -    Object getChild(T wrapper, int i, ElementInfo element);
> +    List getChildren(T wrapper);
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> Thu Feb 22 13:57:46 2007
> @@ -27,6 +27,7 @@
> import java.io.ObjectStreamClass;
> import java.io.OutputStream;
> import java.io.Serializable;
> +import java.lang.annotation.Annotation;
>
> import org.osoa.sca.annotations.EagerInit;
> import org.osoa.sca.annotations.Init;
> @@ -43,7 +44,7 @@
>
> /**
>   * Base Implementation of DataBinding
> - *
> + *
>   * @version $Rev$ $Date$
>   */
> @Service(DataBinding.class)
> @@ -58,9 +59,11 @@
>      protected String name;
>
>      /**
> -     * Create a databinding with the base java type whose name will be
> used as the name of the databinding
> -     *
> -     * @param baseType The base java class or interface representing the
> databinding, for example, org.w3c.dom.Node
> +     * Create a databinding with the base java type whose name will be
> used as
> +     * the name of the databinding
> +     *
> +     * @param baseType The base java class or interface representing the
> +     *            databinding, for example, org.w3c.dom.Node
>       */
>      protected DataBindingExtension(Class<?> baseType) {
>          this(baseType.getName(), baseType);
> @@ -68,9 +71,10 @@
>
>      /**
>       * Create a databinding with the name and base java type
> -     *
> -     * @param name     The name of the databinding
> -     * @param baseType The base java class or interface representing the
> databinding, for example, org.w3c.dom.Node
> +     *
> +     * @param name The name of the databinding
> +     * @param baseType The base java class or interface representing the
> +     *            databinding, for example, org.w3c.dom.Node
>       */
>      protected DataBindingExtension(String name, Class<?> baseType) {
>          this.name = name;
> @@ -87,22 +91,30 @@
>          registry.register(this);
>      }
>
> -    public DataType introspect(Class<?> javaType) {
> -        if (baseType == null || javaType == null) {
> -            return null;
> -        }
> -        if (baseType.isAssignableFrom(javaType)) {
> -            return new DataType<Class>(name, javaType, baseType);
> -        } else {
> -            return null;
> +    public boolean introspect(DataType type, Annotation[] annotations) {
> +        assert type != null;
> +        Object physical = type.getPhysical();
> +        if (physical instanceof Class) {
> +            Class cls = (Class)physical;
> +            if (baseType != null && baseType.isAssignableFrom(cls)) {
> +                type.setDataBinding(getName());
> +                type.setLogical(baseType);
> +                return true;
> +            }
>          }
> +        return false;
>      }
>
>      public DataType introspect(Object value) {
>          if (value == null) {
>              return null;
>          } else {
> -            return introspect(value.getClass());
> +            DataType<Class> dataType = new DataType<Class>(value.getClass(),
> value.getClass());
> +            if (introspect(dataType, null)) {
> +                return dataType;
> +            } else {
> +                return null;
> +            }
>          }
>      }
>
> @@ -116,7 +128,7 @@
>      public WrapperHandler getWrapperHandler() {
>          return null;
>      }
> -
> +
>      public ExceptionHandler getExceptionHandler() {
>          return null;
>      }
> @@ -126,8 +138,10 @@
>              return null;
>          }
>          final Class clazz = arg.getClass();
> -        if (String.class == clazz || clazz.isPrimitive() ||
> Number.class.isAssignableFrom(clazz)
> -            || Boolean.class.isAssignableFrom(clazz) ||
> Character.class.isAssignableFrom(clazz)
> +        if (String.class == clazz || clazz.isPrimitive()
> +            || Number.class.isAssignableFrom(clazz)
> +            || Boolean.class.isAssignableFrom(clazz)
> +            || Character.class.isAssignableFrom(clazz)
>              || Byte.class.isAssignableFrom(clazz)) {
>              // Immutable classes
>              return arg;
> @@ -147,13 +161,11 @@
>                  bis.close();
>                  return objectCopy;
>              } else {
> -                //return arg;
> -                throw new IllegalArgumentException(
> -                    "Pass-by-value is not supported for the given
> object");
> +                // return arg;
> +                throw new IllegalArgumentException("Pass-by-value is not
> supported for the given object");
>              }
>          } catch (Exception e) {
> -            throw new IllegalArgumentException(
> -                "Pass-by-value is not supported for the given object",
> e);
> +            throw new IllegalArgumentException("Pass-by-value is not
> supported for the given object", e);
>          }
>      }
>
> @@ -161,8 +173,7 @@
>          return new ObjectOutputStream(os);
>      }
>
> -    protected ObjectInputStream getObjectInputStream(InputStream is,
> final ClassLoader cl)
> -        throws IOException {
> +    protected ObjectInputStream getObjectInputStream(InputStream is,
> final ClassLoader cl) throws IOException {
>          ObjectInputStream ois = new ObjectInputStream(is) {
>              @Override
>              protected Class<?> resolveClass(ObjectStreamClass desc)
> throws IOException, ClassNotFoundException {
> @@ -179,6 +190,10 @@
>
>      public SimpleTypeMapper getSimpleTypeMapper() {
>          return new SimpleTypeMapperExtension();
> +    }
> +
> +    public String[] getAliases() {
> +        return null;
>      }
>
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> Thu Feb 22 13:57:46 2007
> @@ -39,7 +39,7 @@
>
>      private final Type physical;
>
> -    private final L logical;
> +    private L logical;
>
>      private Map<String, Object> metadata = new HashMap<String, Object>();
>
> @@ -237,6 +237,13 @@
>
>      public void setOperation(Operation operation) {
>          this.operation = operation;
> +    }
> +
> +    /**
> +     * @param logical the logical to set
> +     */
> +    public void setLogical(L logical) {
> +        this.logical = logical;
>      }
>
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> Thu Feb 22 13:57:46 2007
> @@ -22,6 +22,7 @@
> import junit.framework.TestCase;
>
> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> +import org.apache.tuscany.spi.model.DataType;
> import org.easymock.EasyMock;
> import org.w3c.dom.Element;
> import org.w3c.dom.Node;
> @@ -41,8 +42,10 @@
>      public void testExtension() {
>          DataBinding1 binding1 = new DataBinding1(Node.class);
>          assertEquals(Node.class.getName(), binding1.getName());
> -        assertNotNull(binding1.introspect(Element.class));
> -        assertNull(binding1.introspect(String.class));
> +        DataType dt1 = new DataType(Element.class, null);
> +        assertTrue(binding1.introspect(dt1, null));
> +        DataType dt2 = new DataType(String.class, null);
> +        assertFalse(binding1.introspect(dt2, null));
>          assertNull(binding1.getWrapperHandler());
>
>          DataBindingRegistry registry = EasyMock.createMock(
> DataBindingRegistry.class);
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> Thu Feb 22 13:57:46 2007
> @@ -29,6 +29,7 @@
>
> import org.apache.tuscany.spi.databinding.TransformationContext;
> import org.apache.tuscany.spi.databinding.TransformationException;
> +import org.apache.tuscany.spi.idl.ElementInfo;
> import org.apache.tuscany.spi.model.DataType;
> import org.apache.tuscany.spi.model.Operation;
>
> @@ -82,16 +83,19 @@
>          if (value instanceof JAXBElement) {
>              return (JAXBElement)value;
>          } else {
> -            Class type = (Class) dataType.getPhysical();
> -            Object logical = dataType.getLogical();
> -            if (!(logical instanceof QName)) {
> -                logical = JAXBDataBinding.ROOT_ELEMENT;
> +            Class type = (Class)dataType.getPhysical();
> +            ElementInfo elementInfo = (ElementInfo)dataType.getMetadata(
> ElementInfo.class.getName());
> +            QName elementName = JAXBDataBinding.ROOT_ELEMENT;
> +            if (elementInfo != null) {
> +                elementName = elementInfo.getQName();
> +            } else {
>                  /**
> -                 * Set the declared type to Object.class so that xsi:type
> will be produced
> +                 * Set the declared type to Object.class so that xsi:type
> will
> +                 * be produced
>                   */
>                  type = Object.class;
>              }
> -            return new JAXBElement((QName)logical, type, value);
> +            return new JAXBElement(elementName, type, value);
>          }
>      }
>
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> Thu Feb 22 13:57:46 2007
> @@ -20,6 +20,7 @@
> package org.apache.tuscany.databinding.jaxb;
>
> import java.beans.Introspector;
> +import java.lang.annotation.Annotation;
> import java.lang.reflect.ParameterizedType;
> import java.lang.reflect.Type;
>
> @@ -47,7 +48,12 @@
>      public static final String NAME = JAXBElement.class.getName();
>
>      @Override
> -    public DataType introspect(Class<?> javaType) {
> +    public boolean introspect(DataType dataType, Annotation[]
> annotations) {
> +        Object physical = dataType.getPhysical();
> +        if (!(physical instanceof Class)) {
> +            return false;
> +        }
> +        Class javaType = (Class)physical;
>          if (JAXBElement.class.isAssignableFrom(javaType)) {
>              Type type = javaType.getGenericSuperclass();
>              if (type instanceof ParameterizedType) {
> @@ -56,16 +62,25 @@
>                  if (rawType == JAXBElement.class) {
>                      Type actualType =
> parameterizedType.getActualTypeArguments()[0];
>                      if (actualType instanceof Class) {
> -                        return introspect((Class<?>)actualType);
> +                        QName xmlType =
> getXmlTypeName((Class)actualType);
> +                        dataType.setLogical(xmlType);
> +                        dataType.setDataBinding(getName());
> +                        return true;
>                      }
>                  }
>              }
> -            return new DataType<QName>(getName(), javaType, null);
> +            dataType.setLogical(null);
> +            dataType.setDataBinding(getName());
> +            return true;
>          }
>
>          QName xmlType = getXmlTypeName(javaType);
> -        DataType<QName> dataType = new DataType<QName>(getName(),
> javaType, xmlType);
> -        return dataType;
> +        if (xmlType == null) {
> +            return false;
> +        }
> +        dataType.setLogical(xmlType);
> +        dataType.setDataBinding(getName());
> +        return true;
>      }
>
>      public static QName getXmlTypeName(Class<?> javaType) {
> @@ -74,7 +89,9 @@
>          Package pkg = javaType.getPackage();
>          if (pkg != null) {
>              XmlSchema schema = pkg.getAnnotation(XmlSchema.class);
> -            namespace = schema.namespace();
> +            if (schema != null) {
> +                namespace = schema.namespace();
> +            }
>          }
>          XmlType type = javaType.getAnnotation(XmlType.class);
>          if (type != null) {
> @@ -107,7 +124,7 @@
>                  name = Introspector.decapitalize(javaType.getSimpleName
> ());
>              }
>          }
> -        if (namespace == null && name == null) {
> +        if (name == null) {
>              return null;
>          }
>          QName xmlType = new QName(namespace, name);
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> Thu Feb 22 13:57:46 2007
> @@ -26,6 +26,7 @@
> import javax.xml.ws.WebFault;
>
> import org.apache.tuscany.spi.databinding.ExceptionHandler;
> +import org.apache.tuscany.spi.idl.ElementInfo;
> import org.apache.tuscany.spi.model.DataType;
>
> /**
> @@ -97,6 +98,7 @@
>              // only part in
>              // the fault message references
>              DataType<QName> faultType = new DataType<QName>(
> JAXBDataBinding.NAME, faultBeanClass, element);
> +            faultType.setMetadata(ElementInfo.class.getName(), new
> ElementInfo(element, null));
>              return faultType;
>          }
>      }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> Thu Feb 22 13:57:46 2007
> @@ -19,13 +19,14 @@
>
> package org.apache.tuscany.databinding.jaxb;
>
> -import java.beans.Introspector;
> -import java.beans.PropertyDescriptor;
> import java.lang.reflect.Method;
> +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.spi.databinding.TransformationContext;
> @@ -40,9 +41,14 @@
>
>      public JAXBElement<?> create(ElementInfo element,
> TransformationContext context) {
>          try {
> +            // FIXME: How do we map the global element to a factory?
>              String packageName = null;
>              String factoryClassName = packageName + ".ObjectFactory";
> -            Class<?> factoryClass = Class.forName(factoryClassName, true,
> context.getClassLoader());
> +            ClassLoader classLoader = context != null ?
> context.getClassLoader() : null;
> +            if (classLoader == null) {
> +                classLoader = Thread.currentThread
> ().getContextClassLoader();
> +            }
> +            Class<?> factoryClass = Class.forName(factoryClassName, true,
> classLoader);
>              assert factoryClass.isAnnotationPresent(XmlRegistry.class);
>              Object factory = factoryClass.newInstance();
>              QName elementName = element.getQName();
> @@ -58,7 +64,7 @@
>              if (method != null) {
>                  Class typeClass = method.getParameterTypes()[0];
>                  Object value = typeClass.newInstance();
> -                return (JAXBElement<?>) method.invoke(factory, new
> Object[] { value });
> +                return (JAXBElement<?>)method.invoke(factory, new
> Object[] {value});
>              } else {
>                  throw new TransformationException("ObjectFactory cannot
> be resolved.");
>              }
> @@ -67,36 +73,51 @@
>          }
>      }
>
> -    public Object getChild(JAXBElement<?> wrapper, int i, ElementInfo
> element) {
> +    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
> childElement, Object value) {
> +        Object wrapperValue = wrapper.getValue();
> +        Class<?> wrapperClass = wrapperValue.getClass();
> +
> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
> +        String[] properties = xmlType.propOrder();
> +        String property = properties[i];
> +
>          try {
> -            Object value = wrapper.getValue();
> -            PropertyDescriptor descriptors[] =
> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
> ()).getPropertyDescriptors();
> -            for (PropertyDescriptor d : descriptors) {
> -                if (d.getName().equals(element.getQName().getLocalPart()))
> {
> -                    return d.getReadMethod().invoke(value, new Object[]
> {});
> +            for (Method m : wrapperClass.getMethods()) {
> +                if (m.getName().equals("set" + capitalize(property))) {
> +                    m.invoke(wrapperValue, new Object[] {value});
> +                    return;
>                  }
>              }
> -            return null;
> -        } catch (Exception e) {
> +        } catch (Throwable e) {
>              throw new TransformationException(e);
>          }
>      }
>
> -    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
> childElement, Object value) {
> -        try {
> -            Object wrapperValue = wrapper.getValue();
> -            PropertyDescriptor descriptors[] =
> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
> ()).getPropertyDescriptors();
> -            for (PropertyDescriptor d : descriptors) {
> -                if (d.getName().equals(childElement.getQName().getLocalPart()))
> {
> -                    d.getWriteMethod().invoke(wrapperValue, new Object[]
> { value });
> -                    break;
> -                }
> +    private static String capitalize(String name) {
> +        char first = Character.toUpperCase(name.charAt(0));
> +        return first + name.substring(1);
> +    }
> +
> +    /**
> +     * @see org.apache.tuscany.spi.databinding.WrapperHandler#getChildren
> (java.lang.Object)
> +     */
> +    public List getChildren(JAXBElement<?> wrapper) {
> +        Object wrapperValue = wrapper.getValue();
> +        Class<?> wrapperClass = wrapperValue.getClass();
> +
> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
> +        String[] properties = xmlType.propOrder();
> +        List<Object> elements = new ArrayList<Object>();
> +        for (String p : properties) {
> +            try {
> +                Method method = wrapperClass.getMethod("get" +
> capitalize(p), (Class[])null);
> +                Object value = method.invoke(wrapperValue,
> (Object[])null);
> +                elements.add(value);
> +            } catch (Throwable e) {
> +                throw new TransformationException(e);
>              }
> -        } catch (Exception e) {
> -            throw new TransformationException(e);
>          }
> +        return elements;
>      }
>
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,8 @@
>
> package org.apache.tuscany.databinding.jaxb;
>
> +import java.lang.annotation.Annotation;
> +
> import javax.xml.bind.JAXBElement;
> import javax.xml.namespace.QName;
>
> @@ -48,22 +50,30 @@
>
>      /**
>       * Test method for
> -     * {@link
> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
> java.lang.Class)}.
> +     * {@link
> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
> java.lang.Class, Annotation)}.
>       */
>      public final void testIntrospect() {
> -        DataType<?> dataType = binding.introspect(JAXBElement.class);
> -        Assert.assertTrue(dataType.getDataBinding().equals(
> binding.getName()));
> -        Assert.assertTrue(dataType.getPhysical() == JAXBElement.class &&
> dataType.getLogical() == null);
> -        dataType = binding.introspect(MockJAXBElement.class);
> -        Assert.assertEquals(PurchaseOrderType.class, dataType.getPhysical
> ());
> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> "PurchaseOrderType"), dataType.getLogical());
> -        dataType = binding.introspect(USAddress.class);
> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> "USAddress"), dataType.getLogical());
> -        dataType = binding.introspect(USState.class);
> -        Assert.assertTrue(dataType.getDataBinding().equals(
> binding.getName()));
> -        Assert.assertEquals(USState.class, dataType.getPhysical());
> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> "USState"), dataType.getLogical());
> +        DataType dataType = new DataType(JAXBElement.class, null);
> +        boolean yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertTrue(dataType.getDataBinding().equals(binding.getName()));
> +        assertTrue(dataType.getPhysical() == JAXBElement.class &&
> dataType.getLogical() == null);
> +        dataType = new DataType(MockJAXBElement.class, null);
> +        yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertEquals(MockJAXBElement.class, dataType.getPhysical());
> +        assertEquals(new QName("http://www.example.com/IPO",
> "PurchaseOrderType"), dataType.getLogical());
> +        dataType = new DataType(USAddress.class, null);
> +        yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertEquals(USAddress.class, dataType.getPhysical());
> +        assertEquals(new QName("http://www.example.com/IPO",
> "USAddress"), dataType.getLogical());
> +        dataType = new DataType(USState.class, null);
> +        yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertTrue(dataType.getDataBinding().equals(binding.getName()));
> +        assertEquals(USState.class, dataType.getPhysical());
> +        assertEquals(new QName("http://www.example.com/IPO", "USState"),
> dataType.getLogical());
>
>      }
>
>
> Added:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?view=auto&rev=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> (added)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> Thu Feb 22 13:57:46 2007
> @@ -0,0 +1,72 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *   http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.tuscany.databinding.jaxb;
> +
> +import java.util.List;
> +
> +import javax.xml.bind.JAXBElement;
> +import javax.xml.namespace.QName;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.tuscany.spi.idl.ElementInfo;
> +
> +import com.example.ipo.jaxb.ObjectFactory;
> +import com.example.ipo.jaxb.PurchaseOrderType;
> +
> +/**
> + * Test case for JAXBExceptionHandler
> + */
> +public class JAXBWrapperHandlerTestCase extends TestCase {
> +    private static final QName ELEMENT = new QName("
> http://www.example.com/IPO", "purchaseOrder");
> +    private JAXBWrapperHandler handler;
> +
> +    /**
> +     * @see junit.framework.TestCase#setUp()
> +     */
> +    protected void setUp() throws Exception {
> +        super.setUp();
> +        this.handler = new JAXBWrapperHandler();
> +    }
> +
> +    public void testCreate() {
> +        // ElementInfo element = new ElementInfo(ELEMENT, null);
> +        // JAXBElement<?> jaxbElement = handler.create(element, null);
> +    }
> +
> +    public void testSetChild() {
> +        ObjectFactory factory = new ObjectFactory();
> +        PurchaseOrderType po = factory.createPurchaseOrderType();
> +        JAXBElement<PurchaseOrderType> wrapper =
> factory.createPurchaseOrder(po);
> +        handler.setChild(wrapper, 2, null, "Comment");
> +    }
> +
> +    public void testGetChildren() {
> +        ObjectFactory factory = new ObjectFactory();
> +        PurchaseOrderType po = factory.createPurchaseOrderType();
> +        po.setComment("Comment");
> +        JAXBElement<PurchaseOrderType> wrapper =
> factory.createPurchaseOrder(po);
> +        List children = handler.getChildren(wrapper);
> +        assertNotNull(children);
> +        assertEquals(4, children.size());
> +        assertEquals("Comment", children.get(2));
> +        assertNull(children.get(0));
> +    }
> +}
>
> Propchange:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>
> ------------------------------------------------------------------------------
>     svn:keywords = Rev Date
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> Thu Feb 22 13:57:46 2007
> @@ -18,8 +18,6 @@
>   */
> package org.apache.tuscany.databinding.sdo;
>
> -import static
> org.apache.tuscany.databinding.sdo.SDODataBinding.ROOT_ELEMENT;
> -
> import javax.xml.namespace.QName;
>
> import org.apache.tuscany.spi.databinding.PullTransformer;
> @@ -41,13 +39,8 @@
>          try {
>              HelperContext helperContext =
> SDODataTypeHelper.getHelperContext(context);
>              XMLHelper xmlHelper = helperContext.getXMLHelper();
> -            Object logicalType = context.getSourceDataType
> ().getLogical();
> -            if (logicalType instanceof QName) {
> -                QName elementName = (QName)logicalType;
> -                return xmlHelper.save(source, elementName.getNamespaceURI(),
> elementName.getLocalPart());
> -            } else {
> -                return xmlHelper.save(source,
> ROOT_ELEMENT.getNamespaceURI(), ROOT_ELEMENT.getLocalPart());
> -            }
> +            QName elementName = SDODataTypeHelper.getElement(
> context.getSourceDataType());
> +            return xmlHelper.save(source, elementName.getNamespaceURI(),
> elementName.getLocalPart());
>          } catch (Exception e) {
>              throw new TransformationException(e);
>          }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> Thu Feb 22 13:57:46 2007
> @@ -44,9 +44,7 @@
>          try {
>              HelperContext helperContext =
> SDODataTypeHelper.getHelperContext(context);
>              XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(
> helperContext.getTypeHelper());
> -            Object logicalType = context.getSourceDataType
> ().getLogical();
> -            QName elementName =
> -                    (logicalType instanceof QName) ? (QName) logicalType
> : SDODataBinding.ROOT_ELEMENT;
> +            QName elementName = SDODataTypeHelper.getElement(
> context.getSourceDataType());
>              XMLHelper xmlHelper = helperContext.getXMLHelper();
>              XMLDocument document =
>                      xmlHelper.createDocument(source,
> elementName.getNamespaceURI(), elementName.getLocalPart());
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,8 @@
>
> package org.apache.tuscany.databinding.sdo;
>
> +import java.lang.annotation.Annotation;
> +
> import javax.xml.namespace.QName;
>
> import org.apache.tuscany.spi.databinding.ExceptionHandler;
> @@ -52,30 +54,33 @@
>      }
>
>      @Override
> -    public DataType introspect(Class<?> javaType) {
> -        if (javaType == null) {
> -            return null;
> +    public boolean introspect(DataType dataType, Annotation[]
> annotations) {
> +        Object physical = dataType.getPhysical();
> +        if (!(physical instanceof Class)) {
> +            return false;
>          }
> +        Class javaType = (Class)physical;
>          HelperContext context = HelperProvider.getDefaultContext();
>          // FIXME: Need a better to test dynamic SDO
>          if (DataObject.class.isAssignableFrom(javaType)) {
>              // Dynamic SDO
> -            return new DataType<QName>(getName(), javaType, null);
> +            dataType.setLogical(DataObject.class);
> +            return true;
>          }
>          // FIXME: We need to access HelperContext
>          Type type = context.getTypeHelper().getType(javaType);
>          if (type == null) {
> -            return null;
> +            return false;
>          }
>          if (type.isDataType()) {
>              // FIXME: Ignore simple types?
> -            return null;
> +            return false;
>          }
>          String namespace = type.getURI();
>          String name = context.getXSDHelper().getLocalName(type);
>          QName xmlType = new QName(namespace, name);
> -        DataType<QName> dataType = new DataType<QName>(getName(),
> javaType, xmlType);
> -        return dataType;
> +        dataType.setLogical(xmlType);
> +        return true;
>      }
>
>      @Override
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> Thu Feb 22 13:57:46 2007
> @@ -19,11 +19,15 @@
>
> package org.apache.tuscany.databinding.sdo;
>
> +import javax.xml.namespace.QName;
> +
> import org.apache.tuscany.databinding.sdo.ImportSDOLoader.SDOType;
> import org.apache.tuscany.sdo.util.SDOUtil;
> import org.apache.tuscany.spi.component.CompositeComponent;
> import org.apache.tuscany.spi.databinding.TransformationContext;
> import org.apache.tuscany.spi.deployer.DeploymentContext;
> +import org.apache.tuscany.spi.idl.ElementInfo;
> +import org.apache.tuscany.spi.model.DataType;
>
> import commonj.sdo.helper.HelperContext;
> import commonj.sdo.impl.HelperProvider;
> @@ -53,11 +57,12 @@
>              return helperContext;
>          }
>      }
> -
> +
>      public static HelperContext getHelperContext(DeploymentContext
> deploymentContext) {
>          HelperContext helperContext = null;
>          if (deploymentContext != null && deploymentContext.getParent() !=
> null) {
> -            // HACK: Retrieve the SDO HelperContext from the
> CompositeComponent extensions
> +            // HACK: Retrieve the SDO HelperContext from the
> CompositeComponent
> +            // extensions
>              helperContext =
> (HelperContext)deploymentContext.getParent().getExtension(
> HelperContext.class.getName());
>              if (helperContext == null) {
>                  helperContext = SDOUtil.createHelperContext();
> @@ -68,12 +73,21 @@
>          if (helperContext == null) {
>              helperContext = getDefaultHelperContext();
>          }
> -
> +
>          return helperContext;
>      }
> -
> +
>      protected static HelperContext getDefaultHelperContext() {
>          // SDOUtil.createHelperContext();
>          return HelperProvider.getDefaultContext();
> +    }
> +
> +    public static QName getElement(DataType<?> dataType) {
> +        ElementInfo info = (ElementInfo)dataType.getMetadata().get(
> ElementInfo.class.getName());
> +        if (info == null) {
> +            return SDODataBinding.ROOT_ELEMENT;
> +        } else {
> +            return info.getQName();
> +        }
>      }
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> Thu Feb 22 13:57:46 2007
> @@ -19,6 +19,9 @@
>
> package org.apache.tuscany.databinding.sdo;
>
> +import java.util.ArrayList;
> +import java.util.List;
> +
> import javax.xml.namespace.QName;
>
> import org.apache.tuscany.spi.databinding.TransformationContext;
> @@ -50,16 +53,6 @@
>      }
>
>      /**
> -     * @see org.apache.tuscany.spi.databinding.WrapperHandler#getChild(
> java.lang.Object,
> -     *      int, ElementInfo)
> -     */
> -    public Object getChild(Object wrapper, int i, ElementInfo element) {
> -        DataObject wrapperDO =
> -            (wrapper instanceof XMLDocument) ?
> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
> -        return wrapperDO.get(element.getQName().getLocalPart());
> -    }
> -
> -    /**
>       * @see org.apache.tuscany.spi.databinding.WrapperHandler#setChild(
> java.lang.Object,
>       *      int, ElementInfo, java.lang.Object)
>       */
> @@ -67,6 +60,17 @@
>          DataObject wrapperDO =
>              (wrapper instanceof XMLDocument) ?
> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>          wrapperDO.set(childElement.getQName().getLocalPart(), value);
> +    }
> +
> +    public List getChildren(Object wrapper) {
> +        DataObject wrapperDO =
> +            (wrapper instanceof XMLDocument) ?
> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
> +        List properties = wrapperDO.getInstanceProperties();
> +        List<Object> elements = new ArrayList<Object>();
> +        for (int i = 0; i < properties.size(); i++) {
> +            elements.add(wrapperDO.get(i));
> +        }
> +        return elements;
>      }
>
> }
>
> Modified:
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> URL:
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>
> ==============================================================================
> ---
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> (original)
> +++
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> Thu Feb 22 13:57:46 2007
> @@ -53,15 +53,21 @@
>      }
>
>      public final void testIntrospect() {
> -        DataType<?> dataType = binding.introspect(DataObject.class);
> -        Assert.assertTrue(dataType.getDataBinding().equals(
> binding.getName()));
> -        Assert.assertTrue(dataType.getPhysical() == DataObject.class &&
> dataType.getLogical() == null);
> -        dataType = binding.introspect(PurchaseOrderType.class);
> -        Assert.assertEquals(PurchaseOrderType.class, dataType.getPhysical
> ());
> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> "PurchaseOrderType"), dataType.getLogical());
> -        dataType = binding.introspect(USAddress.class);
> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> "USAddress"), dataType.getLogical());
> +        DataType dataType = new DataType(DataObject.class, null);
> +        boolean yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertTrue(dataType.getDataBinding().equals(binding.getName()));
> +        assertTrue(dataType.getPhysical() == DataObject.class &&
> dataType.getLogical() == DataObject.class);
> +        dataType = new DataType(PurchaseOrderType.class, null);
> +        yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertEquals(PurchaseOrderType.class, dataType.getPhysical());
> +        assertEquals(new QName("http://www.example.com/IPO",
> "PurchaseOrderType"), dataType.getLogical());
> +        dataType = new DataType(USAddress.class, null);
> +        yes = binding.introspect(dataType, null);
> +        assertTrue(yes);
> +        assertEquals(USAddress.class, dataType.getPhysical());
> +        assertEquals(new QName("http://www.example.com/IPO",
> "USAddress"), dataType.getLogical());
>      }
>
>      public final void testCopyRoot() {
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
>
>

Re: svn commit: r510671 - in /incubator/tuscany/branches/sca-java-integration/sca: extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ extensions/axis2/samples/helloworldwsclient/ kernel/api/src/main/java/org/apache/tusca

Posted by ant elder <an...@gmail.com>.
On 2/27/07, Raymond Feng <en...@gmail.com> wrote:
>
> Hi, Ant.
>
> Sorry, I forgot to mention that the test case works again since a few days
> ago. Please verify.


Yes works again for me now thanks.

   ...ant

Re: svn commit: r510671 - in /incubator/tuscany/branches/sca-java-integration/sca: extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ extensions/axis2/samples/helloworldwsclient/ kernel/api/src/main/java/org/apache/tusca

Posted by Raymond Feng <en...@gmail.com>.
Hi, Ant.

Sorry, I forgot to mention that the test case works again since a few days 
ago. Please verify.

Thanks,
Raymond

----- Original Message ----- 
From: "ant elder" <an...@gmail.com>
To: <tu...@ws.apache.org>
Sent: Tuesday, February 27, 2007 5:42 AM
Subject: Re: svn commit: r510671 - in 
/incubator/tuscany/branches/sca-java-integration/sca: 
extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ 
extensions/axis2/samples/helloworldwsclient/ 
kernel/api/src/main/java/org/apache/tusca


> Hi, any update on this? I've seen there's been some updates to the
> databinding code going on, is there something I could try now to work 
> around
> the problem to get these tests running again?
>
>   ...ant
>
> On 2/23/07, Raymond Feng <en...@gmail.com> wrote:
>>
>> Hi, Ant.
>>
>> The change is supposed to relax the use of @DataType. I'll look into the
>> regression in the test case.
>>
>> Thanks,
>> Raymond
>>
>> ----- Original Message -----
>> From: "ant elder" <an...@gmail.com>
>> To: <tu...@ws.apache.org>
>> Sent: Friday, February 23, 2007 4:51 AM
>> Subject: Re: svn commit: r510671 - in
>> /incubator/tuscany/branches/sca-java-integration/sca:
>>
>> extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/
>> extensions/axis2/samples/helloworldwsclient/
>> kernel/api/src/main/java/org/apache/tusca
>>
>>
>> > It looks like this change stops the databinding from working with
>> > interfaces
>> > that mix SDO and non-SDO types. See the wsdl itest SDOWSDLTestCase for
>> an
>> > example, Client1a2a3a4a works before this change and not after. Is this
>> > supposed to work like this or must you define all the types with
>> @DataType
>> > annotations now?
>> >
>> >   ...ant
>> >
>> > On 2/22/07, rfeng@apache.org <rf...@apache.org> wrote:
>> >>
>> >> Author: rfeng
>> >> Date: Thu Feb 22 13:57:46 2007
>> >> New Revision: 510671
>> >>
>> >> URL: http://svn.apache.org/viewvc?view=rev&rev=510671
>> >> Log:
>> >> [sca-integration-branch] Improvements over databindings, adding more
>> >> heuristic introspections
>> >>
>> >> Added:
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> >> (with props)
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> >> (with props)
>> >> Modified:
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> >>
>> >>
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,7 +19,10 @@
>> >>
>> >> package org.apache.tuscany.databinding.axiom;
>> >>
>> >> +import java.util.ArrayList;
>> >> +import java.util.Collections;
>> >> import java.util.Iterator;
>> >> +import java.util.List;
>> >>
>> >> import org.apache.axiom.om.OMAbstractFactory;
>> >> import org.apache.axiom.om.OMElement;
>> >> @@ -45,23 +48,16 @@
>> >>          return wrapper;
>> >>      }
>> >>
>> >> -    public Object getChild(OMElement wrapper, int i, ElementInfo
>> >> element)
>> >> {
>> >> -        int index = 0;
>> >> -        for (Iterator e = wrapper.getChildElements(); e.hasNext();) {
>> >> -            OMElement child = (OMElement) e.next();
>> >> -            if (index != i) {
>> >> -                index++;
>> >> -                continue;
>> >> -            }
>> >> -            if (child.getQName().equals(element.getQName())) {
>> >> -                return child;
>> >> -            }
>> >> -        }
>> >> -        return null;
>> >> -    }
>> >> -
>> >>      public void setChild(OMElement wrapper, int i, ElementInfo
>> >> childElement, Object value) {
>> >>          wrapper.addChild((OMElement) value);
>> >> +    }
>> >> +
>> >> +    public List getChildren(OMElement wrapper) {
>> >> +        List<Object> elements = new ArrayList<Object>();
>> >> +        for (Iterator i = wrapper.getChildElements(); i.hasNext();) {
>> >> +            elements.add(i.next());
>> >> +        }
>> >> +        return elements;
>> >>      }
>> >>
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -55,6 +55,20 @@
>> >>                      </archive>
>> >>                  </configuration>
>> >>              </plugin>
>> >> +                <plugin>
>> >> +                    <groupId>org.apache.maven.plugins</groupId>
>> >> +                    <artifactId>maven-surefire-plugin</artifactId>
>> >> +                    <version>2.2</version>
>> >> +                    <configuration>
>> >> +                        <includes>
>> >> +                            <include>**/*TestCase.java</include>
>> >> +                        </includes>
>> >> +                        <reportFormat>brief</reportFormat>
>> >> +                        <useFile>false</useFile>
>> >> +                        <forkMode>never</forkMode>
>> >> +                        <argLine>-ea</argLine>
>> >> +                    </configuration>
>> >> +                </plugin>
>> >>          </plugins>
>> >>      </build>
>> >>
>> >>
>> >> Added:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java?view=auto&rev=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> >> (added)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -0,0 +1,42 @@
>> >> +/*
>> >> + * Licensed to the Apache Software Foundation (ASF) under one
>> >> + * or more contributor license agreements.  See the NOTICE file
>> >> + * distributed with this work for additional information
>> >> + * regarding copyright ownership.  The ASF licenses this file
>> >> + * to you under the Apache License, Version 2.0 (the
>> >> + * "License"); you may not use this file except in compliance
>> >> + * with the License.  You may obtain a copy of the License at
>> >> + *
>> >> + *   http://www.apache.org/licenses/LICENSE-2.0
>> >> + *
>> >> + * Unless required by applicable law or agreed to in writing,
>> >> + * software distributed under the License is distributed on an
>> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> >> + * KIND, either express or implied.  See the License for the
>> >> + * specific language governing permissions and limitations
>> >> + * under the License.
>> >> + */
>> >> +package org.apache.tuscany.api.annotation;
>> >> +
>> >> +import static java.lang.annotation.ElementType.METHOD;
>> >> +import static java.lang.annotation.ElementType.TYPE;
>> >> +import static java.lang.annotation.RetentionPolicy.RUNTIME;
>> >> +
>> >> +import java.lang.annotation.Retention;
>> >> +import java.lang.annotation.Target;
>> >> +
>> >> +/**
>> >> + * Annotation that can be applied to interfaces or methods to 
>> >> indicate
>> a
>> >> wrapper
>> >> + * style
>> >> + *
>> >> + * @version $Rev$ $Date$
>> >> + */
>> >> +@Target( {METHOD, TYPE})
>> >> +@Retention(RUNTIME)
>> >> +public @interface WrapperStyle {
>> >> +
>> >> +    /**
>> >> +     * The name of the databinding for the wrapper
>> >> +     */
>> >> +    String value();
>> >> +}
>> >>
>> >> Propchange:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> >>
>> >>
>> ------------------------------------------------------------------------------
>> >>     svn:eol-style = native
>> >>
>> >> Propchange:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> >>
>> >>
>> ------------------------------------------------------------------------------
>> >>     svn:keywords = Rev Date
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,7 @@
>> >>
>> >> package org.apache.tuscany.core.databinding.impl;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> import java.lang.reflect.Method;
>> >> import java.lang.reflect.Type;
>> >> import java.math.BigDecimal;
>> >> @@ -30,35 +31,46 @@
>> >> import java.util.HashSet;
>> >> import java.util.Map;
>> >> import java.util.Set;
>> >> +
>> >> import javax.xml.datatype.Duration;
>> >> import javax.xml.datatype.XMLGregorianCalendar;
>> >>
>> >> +import org.apache.tuscany.api.annotation.DataContext;
>> >> +import org.apache.tuscany.api.annotation.DataType;
>> >> +import org.apache.tuscany.api.annotation.WrapperStyle;
>> >> +import org.apache.tuscany.spi.annotation.Autowire;
>> >> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> >> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
>> >> import 
>> >> org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
>> >> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
>> >> import org.apache.tuscany.spi.model.Operation;
>> >>
>> >> -import org.apache.tuscany.api.annotation.DataContext;
>> >> -import org.apache.tuscany.api.annotation.DataType;
>> >> -
>> >> /**
>> >>   * The databinding annotation processor for java interfaces
>> >> - *
>> >> + *
>> >>   * @version $Rev$ $Date$
>> >>   */
>> >> public class DataBindingJavaInterfaceProcessor extends
>> >> JavaInterfaceProcessorExtension {
>> >> -
>> >> -    private static final String SIMPLE_JAVA_OBJECTS =
>> >> "java.lang.Object";
>> >> -
>> >>      private static final Class[] SIMPLE_JAVA_TYPES =
>> >>          {Byte.class, Character.class, Short.class, Integer.class,
>> >> Long.class, Float.class, Double.class, Date.class,
>> >> -        Calendar.class, GregorianCalendar.class, Duration.class,
>> >> XMLGregorianCalendar.class, BigInteger.class,
>> >> -        BigDecimal.class};
>> >> +         Calendar.class, GregorianCalendar.class, Duration.class,
>> >> XMLGregorianCalendar.class, BigInteger.class,
>> >> +         BigDecimal.class};
>> >>
>> >>      private static final Set<Class> SIMPLE_TYPE_SET = new
>> >> HashSet<Class>(
>> >> Arrays.asList(SIMPLE_JAVA_TYPES));
>> >>
>> >> +    private DataBindingRegistry dataBindingRegistry;
>> >> +
>> >> +    public DataBindingJavaInterfaceProcessor(@Autowire
>> >> +    DataBindingRegistry dataBindingRegistry) {
>> >> +        super();
>> >> +        this.dataBindingRegistry = dataBindingRegistry;
>> >> +    }
>> >> +
>> >>      public void visitInterface(Class<?> clazz, Class<?> 
>> >> callbackClass,
>> >> JavaServiceContract contract)
>> >>          throws InvalidServiceContractException {
>> >> +        if (!contract.isRemotable()) {
>> >> +            return;
>> >> +        }
>> >>          Map<String, Operation<Type>> operations =
>> contract.getOperations
>> >> ();
>> >>          processInterface(clazz, contract, operations);
>> >>          if (callbackClass != null) {
>> >> @@ -67,9 +79,9 @@
>> >>          }
>> >>      }
>> >>
>> >> -    private void processInterface(Class<?> clazz,
>> >> -                                  JavaServiceContract contract,
>> >> +    private void processInterface(Class<?> clazz, JavaServiceContract
>> >> contract,
>> >>                                    Map<String, Operation<Type>>
>> >> operations) {
>> >> +        WrapperStyle interfaceWrapperStyle = clazz.getAnnotation(
>> >> WrapperStyle.class);
>> >>          DataType interfaceDataType =
>> >> clazz.getAnnotation(DataType.class);
>> >>          if (interfaceDataType != null) {
>> >>              contract.setDataBinding(interfaceDataType.name());
>> >> @@ -81,6 +93,9 @@
>> >>          for (Method method : clazz.getMethods()) {
>> >>              Operation<?> operation = 
>> >> operations.get(method.getName());
>> >>              DataType operationDataType = method.getAnnotation(
>> >> DataType.class);
>> >> +            if (operationDataType == null) {
>> >> +                operationDataType = interfaceDataType;
>> >> +            }
>> >>
>> >>              if (operationDataType != null) {
>> >>                  operation.setDataBinding(operationDataType.name());
>> >> @@ -89,44 +104,31 @@
>> >>                      operation.setMetaData(c.key(), c.value());
>> >>                  }
>> >>              }
>> >> +            WrapperStyle operationWrapperStyle = clazz.getAnnotation(
>> >> WrapperStyle.class);
>> >> +            if (operationWrapperStyle == null) {
>> >> +                operationWrapperStyle = interfaceWrapperStyle;
>> >> +            }
>> >> +
>> >> +            if (operationWrapperStyle != null) {
>> >> +                operation.setDataBinding(operationWrapperStyle.value
>> ());
>> >> +                operation.setWrapperStyle(true);
>> >> +            }
>> >> +            // String dataBinding = operation.getDataBinding();
>> >>
>> >> -            String dataBinding = operation.getDataBinding();
>> >> -
>> >> +            Annotation[] annotations = null;
>> >> +            if (operationDataType != null) {
>> >> +                annotations = new Annotation[] {operationDataType};
>> >> +            }
>> >>              // FIXME: We need a better way to identify simple java
>> types
>> >>              for (org.apache.tuscany.spi.model.DataType<?> d :
>> >> operation.getInputType().getLogical()) {
>> >> -                adjustSimpleType(d, dataBinding);
>> >> +                dataBindingRegistry.introspectType(d, annotations);
>> >>              }
>> >>              if (operation.getOutputType() != null) {
>> >> -                adjustSimpleType(operation.getOutputType(),
>> >> dataBinding);
>> >> +                dataBindingRegistry.introspectType(
>> >> operation.getOutputType(), annotations);
>> >>              }
>> >>              for (org.apache.tuscany.spi.model.DataType<?> d :
>> >> operation.getFaultTypes()) {
>> >> -                adjustSimpleType(d, dataBinding);
>> >> +                dataBindingRegistry.introspectType(d, annotations);
>> >>              }
>> >> -        }
>> >> -    }
>> >> -
>> >> -    private void
>> >> adjustSimpleType(org.apache.tuscany.spi.model.DataType<?>
>> >> dataType, String dataBinding) {
>> >> -        Type type = dataType.getPhysical();
>> >> -        if (!(type instanceof Class)) {
>> >> -            return;
>> >> -        }
>> >> -        Class cls = (Class) dataType.getPhysical();
>> >> -        if (cls.isPrimitive() || SIMPLE_TYPE_SET.contains(cls)) {
>> >> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>> >> -        }
>> >> -        /**
>> >> -         * [rfeng] The following code hits a bug in IBM JDK 5.0
>> >> -         * if (cls == String.class && (dataBinding == null ||
>> >> !dataBinding.equals(String.class.getName()))) {
>> >> -         *      // Identify the String as a simple type
>> >> -         *      dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>> >> -         * }
>> >> -         */
>> >> -
>> >> -        boolean plainString =
>> >> -            cls == String.class && ((dataBinding == null) ||
>> >> !dataBinding.equals(String.class.getName()));
>> >> -        if (plainString) {
>> >> -            // Identify the String as a simple type
>> >> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>> >>          }
>> >>      }
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,15 +19,17 @@
>> >>
>> >> package org.apache.tuscany.core.databinding.impl;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> import java.util.HashMap;
>> >> +import java.util.HashSet;
>> >> import java.util.Map;
>> >> -
>> >> -import org.osoa.sca.annotations.EagerInit;
>> >> +import java.util.Set;
>> >>
>> >> import
>> >> org.apache.tuscany.core.databinding.javabeans.JavaBeansDataBinding;
>> >> import org.apache.tuscany.spi.databinding.DataBinding;
>> >> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> >> import org.apache.tuscany.spi.model.DataType;
>> >> +import org.osoa.sca.annotations.EagerInit;
>> >>
>> >> /**
>> >>   * The default implementation of a data binding registry
>> >> @@ -47,34 +49,53 @@
>> >>
>> >>      public void register(DataBinding dataBinding) {
>> >>          bindings.put(dataBinding.getName().toLowerCase(),
>> dataBinding);
>> >> +        String[] aliases = dataBinding.getAliases();
>> >> +        if (aliases != null) {
>> >> +            for (String alias : aliases) {
>> >> +                bindings.put(alias.toLowerCase(), dataBinding);
>> >> +            }
>> >> +        }
>> >>      }
>> >>
>> >>      public DataBinding unregister(String id) {
>> >>          if (id == null) {
>> >>              return null;
>> >>          }
>> >> -        return bindings.remove(id.toLowerCase());
>> >> +        DataBinding dataBinding = bindings.remove(id.toLowerCase());
>> >> +        if (dataBinding != null) {
>> >> +            String[] aliases = dataBinding.getAliases();
>> >> +            if (aliases != null) {
>> >> +                for (String alias : aliases) {
>> >> +                    bindings.remove(alias.toLowerCase());
>> >> +                }
>> >> +            }
>> >> +        }
>> >> +        return dataBinding;
>> >> +    }
>> >> +
>> >> +    private Set<DataBinding> getDataBindings() {
>> >> +        return new HashSet<DataBinding>(bindings.values());
>> >>      }
>> >>
>> >> -    public DataType introspectType(Class<?> javaType) {
>> >> -        DataType dataType = null;
>> >> -        for (DataBinding binding : bindings.values()) {
>> >> +    public boolean introspectType(DataType dataType, Annotation[]
>> >> annotations) {
>> >> +        for (DataBinding binding : getDataBindings()) {
>> >>              //don't introspect for JavaBeansDatabinding as all
>> javatypes
>> >> will anyways match to its basetype
>> >>              //which is java.lang.Object.  Default to this only if no
>> >> databinding results
>> >>              if (!binding.getName().equals(JavaBeansDataBinding.NAME))
>> {
>> >> -                dataType = binding.introspect(javaType);
>> >> -            }
>> >> -
>> >> -            if (dataType != null) {
>> >> -                return dataType;
>> >> +                if (binding.introspect(dataType, annotations)) {
>> >> +                    return true;
>> >> +                }
>> >>              }
>> >>          }
>> >> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
>> >> Object.class, javaType);
>> >> +        if (dataType.getDataBinding() == null) {
>> >> +            dataType.setDataBinding(JavaBeansDataBinding.NAME);
>> >> +        }
>> >> +        return false;
>> >>      }
>> >>
>> >>      public DataType introspectType(Object value) {
>> >>          DataType dataType = null;
>> >> -        for (DataBinding binding : bindings.values()) {
>> >> +        for (DataBinding binding : getDataBindings()) {
>> >>              //don't introspect for JavaBeansDatabinding as all
>> javatypes
>> >> will anyways match to its basetype
>> >>              //which is java.lang.Object.  Default to this only if no
>> >> databinding results
>> >>              if (!binding.getName().equals(JavaBeansDataBinding.NAME))
>> {
>> >> @@ -84,7 +105,7 @@
>> >>                  return dataType;
>> >>              }
>> >>          }
>> >> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
>> >> Object.class, value.getClass());
>> >> +        return new DataType<Class>(JavaBeansDataBinding.NAME,
>> >> value.getClass(), value.getClass());
>> >>      }
>> >>
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -144,8 +144,8 @@
>> >>          } else if (sourceWrapped && (!targetWrapped)) {
>> >>              // Wrapped to Unwrapped
>> >>              Object sourceWrapper = source[0];
>> >> -            List<ElementInfo> childElements = sourceOp.getWrapper
>> >> ().getInputChildElements();
>> >> -            Object[] target = new Object[childElements.size()];
>> >> +            // List<ElementInfo> childElements = sourceOp.getWrapper
>> >> ().getInputChildElements();
>> >> +            Object[] target = null;
>> >>
>> >>              targetWrapperHandler = getWapperHandler(
>> >> targetType.getOperation().getDataBinding(), false);
>> >>              if (targetWrapperHandler != null) {
>> >> @@ -160,18 +160,15 @@
>> >>                                       sourceType.getLogical().get(0),
>> >>                                       targetWrapperType,
>> >>                                       context.getMetadata());
>> >> -                for (int i = 0; i < childElements.size(); i++) {
>> >> -                    ElementInfo childElement = childElements.get(i);
>> >> -                    target[i] =
>> >> targetWrapperHandler.getChild(targetWrapper,
>> >> i, childElement);
>> >> -                }
>> >> +                target = targetWrapperHandler.getChildren
>> >> (targetWrapper).toArray();
>> >>              } else {
>> >> -                for (int i = 0; i < childElements.size(); i++) {
>> >> -                    ElementInfo childElement = childElements.get(i);
>> >> -                    Object child =
>> >> sourceWrapperHandler.getChild(sourceWrapper,
>> >> i, childElement);
>> >> +                Object[] sourceChildren =
>> >> sourceWrapperHandler.getChildren(sourceWrapper).toArray();
>> >> +                target = new Object[sourceChildren.length];
>> >> +                for (int i = 0; i < sourceChildren.length; i++) {
>> >>                      DataType<QName> childType =
>> >>                          sourceOp.getWrapper
>> >> ().getUnwrappedInputType().getLogical().get(i);
>> >>                      target[i] =
>> >> -                        mediator.mediate(child, childType,
>> >> targetType.getLogical().get(i), context
>> >> +                        mediator.mediate(sourceChildren[i], 
>> >> childType,
>> >> targetType.getLogical().get(i), context
>> >>                              .getMetadata());
>> >>                  }
>> >>              }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -157,8 +157,6 @@
>> >>                      // The void output
>> >>                      return null;
>> >>                  }
>> >> -                ElementInfo childElement = childElements.get(0);
>> >> -
>> >>                  targetWrapperHandler = getWapperHandler(
>> >> targetType.getLogical().getDataBinding());
>> >>                  if (targetWrapperHandler != null) {
>> >>                      ElementInfo wrapperElement = sourceOp.getWrapper
>> >> ().getInputWrapperElement();
>> >> @@ -170,9 +168,9 @@
>> >>                      Object targetWrapper =
>> >>                          mediator.mediate(sourceWrapper,
>> >> sourceType.getLogical(), targetWrapperType, context
>> >>                              .getMetadata());
>> >> -                    return targetWrapperHandler.getChild
>> (targetWrapper,
>> >> 0, childElement);
>> >> +                    return targetWrapperHandler.getChildren
>> >> (targetWrapper).get(0);
>> >>                  } else {
>> >> -                    Object child =
>> >> sourceWrapperHandler.getChild(sourceWrapper,
>> >> 0, childElement);
>> >> +                    Object child = sourceWrapperHandler.getChildren
>> >> (sourceWrapper).get(0);
>> >>                      DataType<?> childType = sourceOp.getWrapper
>> >> ().getUnwrappedOutputType();
>> >>                      return mediator.mediate(child, childType,
>> >> targetType.getLogical(), context.getMetadata());
>> >>                  }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,9 @@
>> >>
>> >> package org.apache.tuscany.core.databinding.xml;
>> >>
>> >> +import java.util.ArrayList;
>> >> +import java.util.List;
>> >> +
>> >> import javax.xml.namespace.QName;
>> >> import javax.xml.parsers.ParserConfigurationException;
>> >>
>> >> @@ -49,31 +52,27 @@
>> >>          return DOMHelper.createElement(document, name);
>> >>      }
>> >>
>> >> -    public Object getChild(Node wrapper, int i, ElementInfo element) 
>> >> {
>> >> -        int index = 0;
>> >> -        NodeList nodes = wrapper.getChildNodes();
>> >> -        for (int j = 0; j < nodes.getLength(); j++) {
>> >> -            Node node = nodes.item(j);
>> >> -            if (node.getNodeType() != Node.ELEMENT_NODE) {
>> >> -                continue;
>> >> -            }
>> >> -            if (index != i) {
>> >> -                index++;
>> >> -            } else {
>> >> -                QName name = DOMHelper.getQName(node);
>> >> -                if (name.equals(element.getQName())) {
>> >> -                    return node;
>> >> -                }
>> >> -            }
>> >> -        }
>> >> -        return null;
>> >> -    }
>> >> -
>> >>      public void setChild(Node wrapper, int i, ElementInfo
>> childElement,
>> >> Object value) {
>> >>          Node node = (Node) value;
>> >>          if (node.getNodeType() == Node.DOCUMENT_NODE) {
>> >>              node = ((Document) node).getDocumentElement();
>> >>          }
>> >>          wrapper.appendChild(wrapper.getOwnerDocument
>> ().importNode(node,
>> >> true));
>> >> +    }
>> >> +
>> >> +    public List getChildren(Node wrapper) {
>> >> +        assert wrapper != null;
>> >> +        if (wrapper.getNodeType() == Node.DOCUMENT_NODE) {
>> >> +            wrapper = ((Document) wrapper).getDocumentElement();
>> >> +        }
>> >> +        List<Node> elements = new ArrayList<Node>();
>> >> +        NodeList nodes = wrapper.getChildNodes();
>> >> +        for (int j = 0; j < nodes.getLength(); j++) {
>> >> +            Node node = nodes.item(j);
>> >> +            if (node.getNodeType() == Node.ELEMENT_NODE) {
>> >> +                elements.add(node);
>> >> +            }
>> >> +        }
>> >> +        return elements;
>> >>      }
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -91,10 +91,8 @@
>> >>              if (dataBinding != null) {
>> >>                  targetDataType = new DataType<Class>(dataBinding,
>> >> javaType, javaType);
>> >>              } else {
>> >> -                targetDataType = registry.introspectType(javaType);
>> >> -                if (targetDataType == null) {
>> >> -                    targetDataType = new DataType<Class>("
>> >> java.lang.Object", javaType, javaType);
>> >> -                }
>> >> +                targetDataType = new DataType<Class>(dataBinding,
>> >> javaType, javaType);
>> >> +                registry.introspectType(targetDataType, null);
>> >>              }
>> >>          }
>> >>
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -30,6 +30,7 @@
>> >>
>> >> import org.apache.tuscany.api.annotation.DataContext;
>> >> import org.apache.tuscany.api.annotation.DataType;
>> >> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> >> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
>> >> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
>> >> import org.apache.tuscany.spi.model.Operation;
>> >> @@ -52,7 +53,8 @@
>> >>       * @throws InvalidServiceContractException
>> >>       */
>> >>      public final void testVisitInterface() throws
>> >> InvalidServiceContractException {
>> >> -        DataBindingJavaInterfaceProcessor processor = new
>> >> DataBindingJavaInterfaceProcessor();
>> >> +        DataBindingRegistry registry = new DataBindingRegistryImpl();
>> >> +        DataBindingJavaInterfaceProcessor processor = new
>> >> DataBindingJavaInterfaceProcessor(registry);
>> >>          JavaServiceContract contract = new JavaServiceContract(
>> >> MockInterface.class);
>> >>          Map<String, Operation<Type>> operations = new HashMap<String,
>> >> Operation<Type>>();
>> >>          Operation<Type> operation = new Operation<Type>("call", null,
>> >> null, null, false, null, NO_CONVERSATION);
>> >> @@ -60,6 +62,7 @@
>> >>          operations.put("call", operation);
>> >>          operations.put("call1", operation1);
>> >>          contract.setOperations(operations);
>> >> +        contract.setRemotable(true);
>> >>          processor.visitInterface(MockInterface.class, null, 
>> >> contract);
>> >>          Assert.assertEquals("org.w3c.dom.Node",
>> contract.getDataBinding
>> >> ());
>> >>          Assert.assertEquals("element",
>> >> (String)contract.getMetaData().get("nodeType"));
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -22,6 +22,8 @@
>> >> import static org.easymock.EasyMock.expect;
>> >> import static org.easymock.EasyMock.replay;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> +
>> >> import javax.xml.stream.XMLStreamReader;
>> >>
>> >> import junit.framework.Assert;
>> >> @@ -49,19 +51,23 @@
>> >>
>> >>      public void testRegistry() {
>> >>          DataBinding db1 = createMock(DataBinding.class);
>> >> +        expect(db1.getAliases()).andReturn(new String[]
>> >> {"db1"}).anyTimes();
>> >>          expect(db1.getName()).andReturn(ContentHandler.class.getName
>> >> ()).anyTimes();
>> >>          DataType<Class> dataType1 = new DataType<Class>(
>> >> ContentHandler.class, ContentHandler.class);
>> >> -        expect(db1.introspect(ContentHandler.class
>> >> )).andReturn(dataType1);
>> >> -        expect(db1.introspect
>> >> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
>> >> +        expect(db1.introspect(dataType1, null)).andReturn(true);
>> >> +        expect(db1.introspect(EasyMock.not(EasyMock.same(dataType1)),
>> >> (Annotation[])EasyMock.isNull()))
>> >> +            .andReturn(false).anyTimes();
>> >>          replay(db1);
>> >>
>> >>          registry.register(db1);
>> >>
>> >>          DataBinding db2 = createMock(DataBinding.class);
>> >> +        expect(db2.getAliases()).andReturn(new String[]
>> >> {"db2"}).anyTimes();
>> >>          expect(db2.getName()).andReturn(XMLStreamReader.class.getName
>> >> ()).anyTimes();
>> >>          DataType<Class> dataType2 = new DataType<Class>(
>> >> XMLStreamReader.class, XMLStreamReader.class);
>> >> -        expect(db2.introspect(XMLStreamReader.class
>> >> )).andReturn(dataType2);
>> >> -        expect(db2.introspect
>> >> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
>> >> +        expect(db2.introspect(dataType2, null)).andReturn(true);
>> >> +        expect(db2.introspect(EasyMock.not(EasyMock.same(dataType2)),
>> >> (Annotation[])EasyMock.isNull()))
>> >> +            .andReturn(false).anyTimes();
>> >>          replay(db2);
>> >>
>> >>          registry.register(db2);
>> >> @@ -70,17 +76,17 @@
>> >>          DataBinding db3 = registry.getDataBinding(name);
>> >>          Assert.assertTrue(db1 == db3);
>> >>
>> >> -        DataType<?> dt = registry.introspectType(ContentHandler.class
>> );
>> >> -        Assert.assertEquals(dataType1, dt);
>> >> +        DataType dt = new DataType(ContentHandler.class, null);
>> >> +        registry.introspectType(dt, null);
>> >> +        Assert.assertEquals(dataType1.getLogical(),
>> ContentHandler.class
>> >> );
>> >> 
>> >> Assert.assertTrue(dt.getDataBinding().equalsIgnoreCase(name));
>> >>
>> >>          registry.unregister(name);
>> >>          DataBinding db4 = registry.getDataBinding(name);
>> >>          Assert.assertNull(db4);
>> >> -
>> >> -
>> >> -        dt = registry.introspectType(ContentHandler.class);
>> >> -        Assert.assertNotNull(dt);
>> >> +
>> >> +        dt = new DataType(null, String.class, null);
>> >> +        registry.introspectType(dt, null);
>> >>          Assert.assertEquals("java.lang.Object", dt.getDataBinding());
>> >>      }
>> >>
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,8 @@
>> >>
>> >> package org.apache.tuscany.spi.databinding;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> +
>> >> import org.apache.tuscany.spi.model.DataType;
>> >>
>> >> /**
>> >> @@ -43,14 +45,22 @@
>> >>       * @return The name of the databinding
>> >>       */
>> >>      String getName();
>> >> +
>> >> +    /**
>> >> +     * Get the aliases for the databinding
>> >> +     *
>> >> +     * @return An array of aliases
>> >> +     */
>> >> +    String[] getAliases();
>> >>
>> >>      /**
>> >> -     * Introspect a java class or interface to create a DataType 
>> >> model
>> >> +     * Introspect and populate information to a DataType model
>> >>       *
>> >>       * @param javaType The java class or interface to be introspected
>> >> -     * @return The DataType or null if the java type is not supported
>> by
>> >> this databinding
>> >> +     * @param annotations The java annotations
>> >> +     * @return true if the databinding has recognized the given data
>> >> type
>> >>       */
>> >> -    DataType introspect(Class<?> javaType);
>> >> +    boolean introspect(DataType dataType, Annotation[] annotations);
>> >>
>> >>      /**
>> >>       * Introspect the data to figure out the corresponding data type
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -18,6 +18,8 @@
>> >>   */
>> >> package org.apache.tuscany.spi.databinding;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> +
>> >> import org.apache.tuscany.spi.model.DataType;
>> >>
>> >> /**
>> >> @@ -50,11 +52,12 @@
>> >>      /**
>> >>       * Introspect the java class to figure out what DataType supports
>> it
>> >>       *
>> >> -     * @param javaType The java class or interface
>> >> +     * @param DataType The initial data type
>> >> +     * @param annotations The java annotations
>> >>       * @return A DataType representing the java type or null if no
>> >> databinding
>> >>       *         recognizes the java type
>> >>       */
>> >> -    DataType introspectType(Class<?> javaType);
>> >> +    boolean introspectType(DataType dataType, Annotation[]
>> annotations);
>> >>
>> >>      /**
>> >>       * Introspect the value to figure out the corresponding DataType
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,8 @@
>> >>
>> >> package org.apache.tuscany.spi.databinding;
>> >>
>> >> +import java.util.List;
>> >> +
>> >> import org.apache.tuscany.spi.idl.ElementInfo;
>> >>
>> >> /**
>> >> @@ -45,12 +47,9 @@
>> >>      void setChild(T wrapper, int i, ElementInfo childElement, Object
>> >> value);
>> >>
>> >>      /**
>> >> -     * Get child element from the wrapper
>> >> -     *
>> >> -     * @param wrapper The wrapper
>> >> -     * @param i The index
>> >> -     * @param element The XSD element
>> >> -     * @return The value of the child
>> >> +     * Get a list of child elements from the wrapper
>> >> +     * @param wrapper
>> >> +     * @return child elements under the wrapper
>> >>       */
>> >> -    Object getChild(T wrapper, int i, ElementInfo element);
>> >> +    List getChildren(T wrapper);
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -27,6 +27,7 @@
>> >> import java.io.ObjectStreamClass;
>> >> import java.io.OutputStream;
>> >> import java.io.Serializable;
>> >> +import java.lang.annotation.Annotation;
>> >>
>> >> import org.osoa.sca.annotations.EagerInit;
>> >> import org.osoa.sca.annotations.Init;
>> >> @@ -43,7 +44,7 @@
>> >>
>> >> /**
>> >>   * Base Implementation of DataBinding
>> >> - *
>> >> + *
>> >>   * @version $Rev$ $Date$
>> >>   */
>> >> @Service(DataBinding.class)
>> >> @@ -58,9 +59,11 @@
>> >>      protected String name;
>> >>
>> >>      /**
>> >> -     * Create a databinding with the base java type whose name will 
>> >> be
>> >> used as the name of the databinding
>> >> -     *
>> >> -     * @param baseType The base java class or interface representing
>> the
>> >> databinding, for example, org.w3c.dom.Node
>> >> +     * Create a databinding with the base java type whose name will 
>> >> be
>> >> used as
>> >> +     * the name of the databinding
>> >> +     *
>> >> +     * @param baseType The base java class or interface representing
>> the
>> >> +     *            databinding, for example, org.w3c.dom.Node
>> >>       */
>> >>      protected DataBindingExtension(Class<?> baseType) {
>> >>          this(baseType.getName(), baseType);
>> >> @@ -68,9 +71,10 @@
>> >>
>> >>      /**
>> >>       * Create a databinding with the name and base java type
>> >> -     *
>> >> -     * @param name     The name of the databinding
>> >> -     * @param baseType The base java class or interface representing
>> the
>> >> databinding, for example, org.w3c.dom.Node
>> >> +     *
>> >> +     * @param name The name of the databinding
>> >> +     * @param baseType The base java class or interface representing
>> the
>> >> +     *            databinding, for example, org.w3c.dom.Node
>> >>       */
>> >>      protected DataBindingExtension(String name, Class<?> baseType) {
>> >>          this.name = name;
>> >> @@ -87,22 +91,30 @@
>> >>          registry.register(this);
>> >>      }
>> >>
>> >> -    public DataType introspect(Class<?> javaType) {
>> >> -        if (baseType == null || javaType == null) {
>> >> -            return null;
>> >> -        }
>> >> -        if (baseType.isAssignableFrom(javaType)) {
>> >> -            return new DataType<Class>(name, javaType, baseType);
>> >> -        } else {
>> >> -            return null;
>> >> +    public boolean introspect(DataType type, Annotation[] 
>> >> annotations)
>> {
>> >> +        assert type != null;
>> >> +        Object physical = type.getPhysical();
>> >> +        if (physical instanceof Class) {
>> >> +            Class cls = (Class)physical;
>> >> +            if (baseType != null && baseType.isAssignableFrom(cls)) {
>> >> +                type.setDataBinding(getName());
>> >> +                type.setLogical(baseType);
>> >> +                return true;
>> >> +            }
>> >>          }
>> >> +        return false;
>> >>      }
>> >>
>> >>      public DataType introspect(Object value) {
>> >>          if (value == null) {
>> >>              return null;
>> >>          } else {
>> >> -            return introspect(value.getClass());
>> >> +            DataType<Class> dataType = new
>> >> DataType<Class>(value.getClass(),
>> >> value.getClass());
>> >> +            if (introspect(dataType, null)) {
>> >> +                return dataType;
>> >> +            } else {
>> >> +                return null;
>> >> +            }
>> >>          }
>> >>      }
>> >>
>> >> @@ -116,7 +128,7 @@
>> >>      public WrapperHandler getWrapperHandler() {
>> >>          return null;
>> >>      }
>> >> -
>> >> +
>> >>      public ExceptionHandler getExceptionHandler() {
>> >>          return null;
>> >>      }
>> >> @@ -126,8 +138,10 @@
>> >>              return null;
>> >>          }
>> >>          final Class clazz = arg.getClass();
>> >> -        if (String.class == clazz || clazz.isPrimitive() ||
>> >> Number.class.isAssignableFrom(clazz)
>> >> -            || Boolean.class.isAssignableFrom(clazz) ||
>> >> Character.class.isAssignableFrom(clazz)
>> >> +        if (String.class == clazz || clazz.isPrimitive()
>> >> +            || Number.class.isAssignableFrom(clazz)
>> >> +            || Boolean.class.isAssignableFrom(clazz)
>> >> +            || Character.class.isAssignableFrom(clazz)
>> >>              || Byte.class.isAssignableFrom(clazz)) {
>> >>              // Immutable classes
>> >>              return arg;
>> >> @@ -147,13 +161,11 @@
>> >>                  bis.close();
>> >>                  return objectCopy;
>> >>              } else {
>> >> -                //return arg;
>> >> -                throw new IllegalArgumentException(
>> >> -                    "Pass-by-value is not supported for the given
>> >> object");
>> >> +                // return arg;
>> >> +                throw new IllegalArgumentException("Pass-by-value is
>> not
>> >> supported for the given object");
>> >>              }
>> >>          } catch (Exception e) {
>> >> -            throw new IllegalArgumentException(
>> >> -                "Pass-by-value is not supported for the given 
>> >> object",
>> >> e);
>> >> +            throw new IllegalArgumentException("Pass-by-value is not
>> >> supported for the given object", e);
>> >>          }
>> >>      }
>> >>
>> >> @@ -161,8 +173,7 @@
>> >>          return new ObjectOutputStream(os);
>> >>      }
>> >>
>> >> -    protected ObjectInputStream getObjectInputStream(InputStream is,
>> >> final ClassLoader cl)
>> >> -        throws IOException {
>> >> +    protected ObjectInputStream getObjectInputStream(InputStream is,
>> >> final ClassLoader cl) throws IOException {
>> >>          ObjectInputStream ois = new ObjectInputStream(is) {
>> >>              @Override
>> >>              protected Class<?> resolveClass(ObjectStreamClass desc)
>> >> throws IOException, ClassNotFoundException {
>> >> @@ -179,6 +190,10 @@
>> >>
>> >>      public SimpleTypeMapper getSimpleTypeMapper() {
>> >>          return new SimpleTypeMapperExtension();
>> >> +    }
>> >> +
>> >> +    public String[] getAliases() {
>> >> +        return null;
>> >>      }
>> >>
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -39,7 +39,7 @@
>> >>
>> >>      private final Type physical;
>> >>
>> >> -    private final L logical;
>> >> +    private L logical;
>> >>
>> >>      private Map<String, Object> metadata = new HashMap<String,
>> >> Object>();
>> >>
>> >> @@ -237,6 +237,13 @@
>> >>
>> >>      public void setOperation(Operation operation) {
>> >>          this.operation = operation;
>> >> +    }
>> >> +
>> >> +    /**
>> >> +     * @param logical the logical to set
>> >> +     */
>> >> +    public void setLogical(L logical) {
>> >> +        this.logical = logical;
>> >>      }
>> >>
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -22,6 +22,7 @@
>> >> import junit.framework.TestCase;
>> >>
>> >> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> >> +import org.apache.tuscany.spi.model.DataType;
>> >> import org.easymock.EasyMock;
>> >> import org.w3c.dom.Element;
>> >> import org.w3c.dom.Node;
>> >> @@ -41,8 +42,10 @@
>> >>      public void testExtension() {
>> >>          DataBinding1 binding1 = new DataBinding1(Node.class);
>> >>          assertEquals(Node.class.getName(), binding1.getName());
>> >> -        assertNotNull(binding1.introspect(Element.class));
>> >> -        assertNull(binding1.introspect(String.class));
>> >> +        DataType dt1 = new DataType(Element.class, null);
>> >> +        assertTrue(binding1.introspect(dt1, null));
>> >> +        DataType dt2 = new DataType(String.class, null);
>> >> +        assertFalse(binding1.introspect(dt2, null));
>> >>          assertNull(binding1.getWrapperHandler());
>> >>
>> >>          DataBindingRegistry registry = EasyMock.createMock(
>> >> DataBindingRegistry.class);
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -29,6 +29,7 @@
>> >>
>> >> import org.apache.tuscany.spi.databinding.TransformationContext;
>> >> import org.apache.tuscany.spi.databinding.TransformationException;
>> >> +import org.apache.tuscany.spi.idl.ElementInfo;
>> >> import org.apache.tuscany.spi.model.DataType;
>> >> import org.apache.tuscany.spi.model.Operation;
>> >>
>> >> @@ -82,16 +83,19 @@
>> >>          if (value instanceof JAXBElement) {
>> >>              return (JAXBElement)value;
>> >>          } else {
>> >> -            Class type = (Class) dataType.getPhysical();
>> >> -            Object logical = dataType.getLogical();
>> >> -            if (!(logical instanceof QName)) {
>> >> -                logical = JAXBDataBinding.ROOT_ELEMENT;
>> >> +            Class type = (Class)dataType.getPhysical();
>> >> +            ElementInfo elementInfo =
>> (ElementInfo)dataType.getMetadata(
>> >> ElementInfo.class.getName());
>> >> +            QName elementName = JAXBDataBinding.ROOT_ELEMENT;
>> >> +            if (elementInfo != null) {
>> >> +                elementName = elementInfo.getQName();
>> >> +            } else {
>> >>                  /**
>> >> -                 * Set the declared type to Object.class so that
>> >> xsi:type
>> >> will be produced
>> >> +                 * Set the declared type to Object.class so that
>> >> xsi:type
>> >> will
>> >> +                 * be produced
>> >>                   */
>> >>                  type = Object.class;
>> >>              }
>> >> -            return new JAXBElement((QName)logical, type, value);
>> >> +            return new JAXBElement(elementName, type, value);
>> >>          }
>> >>      }
>> >>
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -20,6 +20,7 @@
>> >> package org.apache.tuscany.databinding.jaxb;
>> >>
>> >> import java.beans.Introspector;
>> >> +import java.lang.annotation.Annotation;
>> >> import java.lang.reflect.ParameterizedType;
>> >> import java.lang.reflect.Type;
>> >>
>> >> @@ -47,7 +48,12 @@
>> >>      public static final String NAME = JAXBElement.class.getName();
>> >>
>> >>      @Override
>> >> -    public DataType introspect(Class<?> javaType) {
>> >> +    public boolean introspect(DataType dataType, Annotation[]
>> >> annotations) {
>> >> +        Object physical = dataType.getPhysical();
>> >> +        if (!(physical instanceof Class)) {
>> >> +            return false;
>> >> +        }
>> >> +        Class javaType = (Class)physical;
>> >>          if (JAXBElement.class.isAssignableFrom(javaType)) {
>> >>              Type type = javaType.getGenericSuperclass();
>> >>              if (type instanceof ParameterizedType) {
>> >> @@ -56,16 +62,25 @@
>> >>                  if (rawType == JAXBElement.class) {
>> >>                      Type actualType =
>> >> parameterizedType.getActualTypeArguments()[0];
>> >>                      if (actualType instanceof Class) {
>> >> -                        return introspect((Class<?>)actualType);
>> >> +                        QName xmlType =
>> >> getXmlTypeName((Class)actualType);
>> >> +                        dataType.setLogical(xmlType);
>> >> +                        dataType.setDataBinding(getName());
>> >> +                        return true;
>> >>                      }
>> >>                  }
>> >>              }
>> >> -            return new DataType<QName>(getName(), javaType, null);
>> >> +            dataType.setLogical(null);
>> >> +            dataType.setDataBinding(getName());
>> >> +            return true;
>> >>          }
>> >>
>> >>          QName xmlType = getXmlTypeName(javaType);
>> >> -        DataType<QName> dataType = new DataType<QName>(getName(),
>> >> javaType, xmlType);
>> >> -        return dataType;
>> >> +        if (xmlType == null) {
>> >> +            return false;
>> >> +        }
>> >> +        dataType.setLogical(xmlType);
>> >> +        dataType.setDataBinding(getName());
>> >> +        return true;
>> >>      }
>> >>
>> >>      public static QName getXmlTypeName(Class<?> javaType) {
>> >> @@ -74,7 +89,9 @@
>> >>          Package pkg = javaType.getPackage();
>> >>          if (pkg != null) {
>> >>              XmlSchema schema = pkg.getAnnotation(XmlSchema.class);
>> >> -            namespace = schema.namespace();
>> >> +            if (schema != null) {
>> >> +                namespace = schema.namespace();
>> >> +            }
>> >>          }
>> >>          XmlType type = javaType.getAnnotation(XmlType.class);
>> >>          if (type != null) {
>> >> @@ -107,7 +124,7 @@
>> >>                  name = Introspector.decapitalize(
>> javaType.getSimpleName
>> >> ());
>> >>              }
>> >>          }
>> >> -        if (namespace == null && name == null) {
>> >> +        if (name == null) {
>> >>              return null;
>> >>          }
>> >>          QName xmlType = new QName(namespace, name);
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -26,6 +26,7 @@
>> >> import javax.xml.ws.WebFault;
>> >>
>> >> import org.apache.tuscany.spi.databinding.ExceptionHandler;
>> >> +import org.apache.tuscany.spi.idl.ElementInfo;
>> >> import org.apache.tuscany.spi.model.DataType;
>> >>
>> >> /**
>> >> @@ -97,6 +98,7 @@
>> >>              // only part in
>> >>              // the fault message references
>> >>              DataType<QName> faultType = new DataType<QName>(
>> >> JAXBDataBinding.NAME, faultBeanClass, element);
>> >> +            faultType.setMetadata(ElementInfo.class.getName(), new
>> >> ElementInfo(element, null));
>> >>              return faultType;
>> >>          }
>> >>      }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,13 +19,14 @@
>> >>
>> >> package org.apache.tuscany.databinding.jaxb;
>> >>
>> >> -import java.beans.Introspector;
>> >> -import java.beans.PropertyDescriptor;
>> >> import java.lang.reflect.Method;
>> >> +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.spi.databinding.TransformationContext;
>> >> @@ -40,9 +41,14 @@
>> >>
>> >>      public JAXBElement<?> create(ElementInfo element,
>> >> TransformationContext context) {
>> >>          try {
>> >> +            // FIXME: How do we map the global element to a factory?
>> >>              String packageName = null;
>> >>              String factoryClassName = packageName + ".ObjectFactory";
>> >> -            Class<?> factoryClass = Class.forName(factoryClassName,
>> >> true,
>> >> context.getClassLoader());
>> >> +            ClassLoader classLoader = context != null ?
>> >> context.getClassLoader() : null;
>> >> +            if (classLoader == null) {
>> >> +                classLoader = Thread.currentThread
>> >> ().getContextClassLoader();
>> >> +            }
>> >> +            Class<?> factoryClass = Class.forName(factoryClassName,
>> >> true,
>> >> classLoader);
>> >>              assert factoryClass.isAnnotationPresent(XmlRegistry.class
>> );
>> >>              Object factory = factoryClass.newInstance();
>> >>              QName elementName = element.getQName();
>> >> @@ -58,7 +64,7 @@
>> >>              if (method != null) {
>> >>                  Class typeClass = method.getParameterTypes()[0];
>> >>                  Object value = typeClass.newInstance();
>> >> -                return (JAXBElement<?>) method.invoke(factory, new
>> >> Object[] { value });
>> >> +                return (JAXBElement<?>)method.invoke(factory, new
>> >> Object[] {value});
>> >>              } else {
>> >>                  throw new TransformationException("ObjectFactory
>> cannot
>> >> be resolved.");
>> >>              }
>> >> @@ -67,36 +73,51 @@
>> >>          }
>> >>      }
>> >>
>> >> -    public Object getChild(JAXBElement<?> wrapper, int i, ElementInfo
>> >> element) {
>> >> +    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
>> >> childElement, Object value) {
>> >> +        Object wrapperValue = wrapper.getValue();
>> >> +        Class<?> wrapperClass = wrapperValue.getClass();
>> >> +
>> >> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
>> >> +        String[] properties = xmlType.propOrder();
>> >> +        String property = properties[i];
>> >> +
>> >>          try {
>> >> -            Object value = wrapper.getValue();
>> >> -            PropertyDescriptor descriptors[] =
>> >> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
>> >> ()).getPropertyDescriptors();
>> >> -            for (PropertyDescriptor d : descriptors) {
>> >> -                if
>> >> (d.getName().equals(element.getQName().getLocalPart()))
>> >> {
>> >> -                    return d.getReadMethod().invoke(value, new
>> Object[]
>> >> {});
>> >> +            for (Method m : wrapperClass.getMethods()) {
>> >> +                if (m.getName().equals("set" + capitalize(property)))
>> {
>> >> +                    m.invoke(wrapperValue, new Object[] {value});
>> >> +                    return;
>> >>                  }
>> >>              }
>> >> -            return null;
>> >> -        } catch (Exception e) {
>> >> +        } catch (Throwable e) {
>> >>              throw new TransformationException(e);
>> >>          }
>> >>      }
>> >>
>> >> -    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
>> >> childElement, Object value) {
>> >> -        try {
>> >> -            Object wrapperValue = wrapper.getValue();
>> >> -            PropertyDescriptor descriptors[] =
>> >> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
>> >> ()).getPropertyDescriptors();
>> >> -            for (PropertyDescriptor d : descriptors) {
>> >> -                if
>> >> (d.getName().equals(childElement.getQName().getLocalPart()))
>> >> {
>> >> -                    d.getWriteMethod().invoke(wrapperValue, new
>> Object[]
>> >> { value });
>> >> -                    break;
>> >> -                }
>> >> +    private static String capitalize(String name) {
>> >> +        char first = Character.toUpperCase(name.charAt(0));
>> >> +        return first + name.substring(1);
>> >> +    }
>> >> +
>> >> +    /**
>> >> +     * @see
>> >> org.apache.tuscany.spi.databinding.WrapperHandler#getChildren
>> >> (java.lang.Object)
>> >> +     */
>> >> +    public List getChildren(JAXBElement<?> wrapper) {
>> >> +        Object wrapperValue = wrapper.getValue();
>> >> +        Class<?> wrapperClass = wrapperValue.getClass();
>> >> +
>> >> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
>> >> +        String[] properties = xmlType.propOrder();
>> >> +        List<Object> elements = new ArrayList<Object>();
>> >> +        for (String p : properties) {
>> >> +            try {
>> >> +                Method method = wrapperClass.getMethod("get" +
>> >> capitalize(p), (Class[])null);
>> >> +                Object value = method.invoke(wrapperValue,
>> >> (Object[])null);
>> >> +                elements.add(value);
>> >> +            } catch (Throwable e) {
>> >> +                throw new TransformationException(e);
>> >>              }
>> >> -        } catch (Exception e) {
>> >> -            throw new TransformationException(e);
>> >>          }
>> >> +        return elements;
>> >>      }
>> >>
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,8 @@
>> >>
>> >> package org.apache.tuscany.databinding.jaxb;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> +
>> >> import javax.xml.bind.JAXBElement;
>> >> import javax.xml.namespace.QName;
>> >>
>> >> @@ -48,22 +50,30 @@
>> >>
>> >>      /**
>> >>       * Test method for
>> >> -     * {@link
>> >> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
>> >> java.lang.Class)}.
>> >> +     * {@link
>> >> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
>> >> java.lang.Class, Annotation)}.
>> >>       */
>> >>      public final void testIntrospect() {
>> >> -        DataType<?> dataType = binding.introspect(JAXBElement.class);
>> >> -        Assert.assertTrue(dataType.getDataBinding().equals(
>> >> binding.getName()));
>> >> -        Assert.assertTrue(dataType.getPhysical() == 
>> >> JAXBElement.class&&
>> >> dataType.getLogical() == null);
>> >> -        dataType = binding.introspect(MockJAXBElement.class);
>> >> -        Assert.assertEquals(PurchaseOrderType.class,
>> >> dataType.getPhysical
>> >> ());
>> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> >> "PurchaseOrderType"), dataType.getLogical());
>> >> -        dataType = binding.introspect(USAddress.class);
>> >> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
>> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> >> "USAddress"), dataType.getLogical());
>> >> -        dataType = binding.introspect(USState.class);
>> >> -        Assert.assertTrue(dataType.getDataBinding().equals(
>> >> binding.getName()));
>> >> -        Assert.assertEquals(USState.class, dataType.getPhysical());
>> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> >> "USState"), dataType.getLogical());
>> >> +        DataType dataType = new DataType(JAXBElement.class, null);
>> >> +        boolean yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertTrue(dataType.getDataBinding().equals(binding.getName
>> ()));
>> >> +        assertTrue(dataType.getPhysical() == JAXBElement.class &&
>> >> dataType.getLogical() == null);
>> >> +        dataType = new DataType(MockJAXBElement.class, null);
>> >> +        yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertEquals(MockJAXBElement.class, dataType.getPhysical());
>> >> +        assertEquals(new QName("http://www.example.com/IPO",
>> >> "PurchaseOrderType"), dataType.getLogical());
>> >> +        dataType = new DataType(USAddress.class, null);
>> >> +        yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertEquals(USAddress.class, dataType.getPhysical());
>> >> +        assertEquals(new QName("http://www.example.com/IPO",
>> >> "USAddress"), dataType.getLogical());
>> >> +        dataType = new DataType(USState.class, null);
>> >> +        yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertTrue(dataType.getDataBinding().equals(binding.getName
>> ()));
>> >> +        assertEquals(USState.class, dataType.getPhysical());
>> >> +        assertEquals(new QName("http://www.example.com/IPO",
>> "USState"),
>> >> dataType.getLogical());
>> >>
>> >>      }
>> >>
>> >>
>> >> Added:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?view=auto&rev=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> >> (added)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -0,0 +1,72 @@
>> >> +/*
>> >> + * Licensed to the Apache Software Foundation (ASF) under one
>> >> + * or more contributor license agreements.  See the NOTICE file
>> >> + * distributed with this work for additional information
>> >> + * regarding copyright ownership.  The ASF licenses this file
>> >> + * to you under the Apache License, Version 2.0 (the
>> >> + * "License"); you may not use this file except in compliance
>> >> + * with the License.  You may obtain a copy of the License at
>> >> + *
>> >> + *   http://www.apache.org/licenses/LICENSE-2.0
>> >> + *
>> >> + * Unless required by applicable law or agreed to in writing,
>> >> + * software distributed under the License is distributed on an
>> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> >> + * KIND, either express or implied.  See the License for the
>> >> + * specific language governing permissions and limitations
>> >> + * under the License.
>> >> + */
>> >> +
>> >> +package org.apache.tuscany.databinding.jaxb;
>> >> +
>> >> +import java.util.List;
>> >> +
>> >> +import javax.xml.bind.JAXBElement;
>> >> +import javax.xml.namespace.QName;
>> >> +
>> >> +import junit.framework.TestCase;
>> >> +
>> >> +import org.apache.tuscany.spi.idl.ElementInfo;
>> >> +
>> >> +import com.example.ipo.jaxb.ObjectFactory;
>> >> +import com.example.ipo.jaxb.PurchaseOrderType;
>> >> +
>> >> +/**
>> >> + * Test case for JAXBExceptionHandler
>> >> + */
>> >> +public class JAXBWrapperHandlerTestCase extends TestCase {
>> >> +    private static final QName ELEMENT = new QName("
>> >> http://www.example.com/IPO", "purchaseOrder");
>> >> +    private JAXBWrapperHandler handler;
>> >> +
>> >> +    /**
>> >> +     * @see junit.framework.TestCase#setUp()
>> >> +     */
>> >> +    protected void setUp() throws Exception {
>> >> +        super.setUp();
>> >> +        this.handler = new JAXBWrapperHandler();
>> >> +    }
>> >> +
>> >> +    public void testCreate() {
>> >> +        // ElementInfo element = new ElementInfo(ELEMENT, null);
>> >> +        // JAXBElement<?> jaxbElement = handler.create(element, 
>> >> null);
>> >> +    }
>> >> +
>> >> +    public void testSetChild() {
>> >> +        ObjectFactory factory = new ObjectFactory();
>> >> +        PurchaseOrderType po = factory.createPurchaseOrderType();
>> >> +        JAXBElement<PurchaseOrderType> wrapper =
>> >> factory.createPurchaseOrder(po);
>> >> +        handler.setChild(wrapper, 2, null, "Comment");
>> >> +    }
>> >> +
>> >> +    public void testGetChildren() {
>> >> +        ObjectFactory factory = new ObjectFactory();
>> >> +        PurchaseOrderType po = factory.createPurchaseOrderType();
>> >> +        po.setComment("Comment");
>> >> +        JAXBElement<PurchaseOrderType> wrapper =
>> >> factory.createPurchaseOrder(po);
>> >> +        List children = handler.getChildren(wrapper);
>> >> +        assertNotNull(children);
>> >> +        assertEquals(4, children.size());
>> >> +        assertEquals("Comment", children.get(2));
>> >> +        assertNull(children.get(0));
>> >> +    }
>> >> +}
>> >>
>> >> Propchange:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> >>
>> >>
>> ------------------------------------------------------------------------------
>> >>     svn:eol-style = native
>> >>
>> >> Propchange:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> >>
>> >>
>> ------------------------------------------------------------------------------
>> >>     svn:keywords = Rev Date
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -18,8 +18,6 @@
>> >>   */
>> >> package org.apache.tuscany.databinding.sdo;
>> >>
>> >> -import static
>> >> org.apache.tuscany.databinding.sdo.SDODataBinding.ROOT_ELEMENT;
>> >> -
>> >> import javax.xml.namespace.QName;
>> >>
>> >> import org.apache.tuscany.spi.databinding.PullTransformer;
>> >> @@ -41,13 +39,8 @@
>> >>          try {
>> >>              HelperContext helperContext =
>> >> SDODataTypeHelper.getHelperContext(context);
>> >>              XMLHelper xmlHelper = helperContext.getXMLHelper();
>> >> -            Object logicalType = context.getSourceDataType
>> >> ().getLogical();
>> >> -            if (logicalType instanceof QName) {
>> >> -                QName elementName = (QName)logicalType;
>> >> -                return xmlHelper.save(source,
>> >> elementName.getNamespaceURI(),
>> >> elementName.getLocalPart());
>> >> -            } else {
>> >> -                return xmlHelper.save(source,
>> >> ROOT_ELEMENT.getNamespaceURI(), ROOT_ELEMENT.getLocalPart());
>> >> -            }
>> >> +            QName elementName = SDODataTypeHelper.getElement(
>> >> context.getSourceDataType());
>> >> +            return xmlHelper.save(source, elementName.getNamespaceURI
>> (),
>> >> elementName.getLocalPart());
>> >>          } catch (Exception e) {
>> >>              throw new TransformationException(e);
>> >>          }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -44,9 +44,7 @@
>> >>          try {
>> >>              HelperContext helperContext =
>> >> SDODataTypeHelper.getHelperContext(context);
>> >>              XMLStreamHelper streamHelper =
>> >> SDOUtil.createXMLStreamHelper(
>> >> helperContext.getTypeHelper());
>> >> -            Object logicalType = context.getSourceDataType
>> >> ().getLogical();
>> >> -            QName elementName =
>> >> -                    (logicalType instanceof QName) ? (QName)
>> logicalType
>> >> : SDODataBinding.ROOT_ELEMENT;
>> >> +            QName elementName = SDODataTypeHelper.getElement(
>> >> context.getSourceDataType());
>> >>              XMLHelper xmlHelper = helperContext.getXMLHelper();
>> >>              XMLDocument document =
>> >>                      xmlHelper.createDocument(source,
>> >> elementName.getNamespaceURI(), elementName.getLocalPart());
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,8 @@
>> >>
>> >> package org.apache.tuscany.databinding.sdo;
>> >>
>> >> +import java.lang.annotation.Annotation;
>> >> +
>> >> import javax.xml.namespace.QName;
>> >>
>> >> import org.apache.tuscany.spi.databinding.ExceptionHandler;
>> >> @@ -52,30 +54,33 @@
>> >>      }
>> >>
>> >>      @Override
>> >> -    public DataType introspect(Class<?> javaType) {
>> >> -        if (javaType == null) {
>> >> -            return null;
>> >> +    public boolean introspect(DataType dataType, Annotation[]
>> >> annotations) {
>> >> +        Object physical = dataType.getPhysical();
>> >> +        if (!(physical instanceof Class)) {
>> >> +            return false;
>> >>          }
>> >> +        Class javaType = (Class)physical;
>> >>          HelperContext context = HelperProvider.getDefaultContext();
>> >>          // FIXME: Need a better to test dynamic SDO
>> >>          if (DataObject.class.isAssignableFrom(javaType)) {
>> >>              // Dynamic SDO
>> >> -            return new DataType<QName>(getName(), javaType, null);
>> >> +            dataType.setLogical(DataObject.class);
>> >> +            return true;
>> >>          }
>> >>          // FIXME: We need to access HelperContext
>> >>          Type type = context.getTypeHelper().getType(javaType);
>> >>          if (type == null) {
>> >> -            return null;
>> >> +            return false;
>> >>          }
>> >>          if (type.isDataType()) {
>> >>              // FIXME: Ignore simple types?
>> >> -            return null;
>> >> +            return false;
>> >>          }
>> >>          String namespace = type.getURI();
>> >>          String name = context.getXSDHelper().getLocalName(type);
>> >>          QName xmlType = new QName(namespace, name);
>> >> -        DataType<QName> dataType = new DataType<QName>(getName(),
>> >> javaType, xmlType);
>> >> -        return dataType;
>> >> +        dataType.setLogical(xmlType);
>> >> +        return true;
>> >>      }
>> >>
>> >>      @Override
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,11 +19,15 @@
>> >>
>> >> package org.apache.tuscany.databinding.sdo;
>> >>
>> >> +import javax.xml.namespace.QName;
>> >> +
>> >> import org.apache.tuscany.databinding.sdo.ImportSDOLoader.SDOType;
>> >> import org.apache.tuscany.sdo.util.SDOUtil;
>> >> import org.apache.tuscany.spi.component.CompositeComponent;
>> >> import org.apache.tuscany.spi.databinding.TransformationContext;
>> >> import org.apache.tuscany.spi.deployer.DeploymentContext;
>> >> +import org.apache.tuscany.spi.idl.ElementInfo;
>> >> +import org.apache.tuscany.spi.model.DataType;
>> >>
>> >> import commonj.sdo.helper.HelperContext;
>> >> import commonj.sdo.impl.HelperProvider;
>> >> @@ -53,11 +57,12 @@
>> >>              return helperContext;
>> >>          }
>> >>      }
>> >> -
>> >> +
>> >>      public static HelperContext getHelperContext(DeploymentContext
>> >> deploymentContext) {
>> >>          HelperContext helperContext = null;
>> >>          if (deploymentContext != null && 
>> >> deploymentContext.getParent()
>> >> !=
>> >> null) {
>> >> -            // HACK: Retrieve the SDO HelperContext from the
>> >> CompositeComponent extensions
>> >> +            // HACK: Retrieve the SDO HelperContext from the
>> >> CompositeComponent
>> >> +            // extensions
>> >>              helperContext =
>> >> (HelperContext)deploymentContext.getParent().getExtension(
>> >> HelperContext.class.getName());
>> >>              if (helperContext == null) {
>> >>                  helperContext = SDOUtil.createHelperContext();
>> >> @@ -68,12 +73,21 @@
>> >>          if (helperContext == null) {
>> >>              helperContext = getDefaultHelperContext();
>> >>          }
>> >> -
>> >> +
>> >>          return helperContext;
>> >>      }
>> >> -
>> >> +
>> >>      protected static HelperContext getDefaultHelperContext() {
>> >>          // SDOUtil.createHelperContext();
>> >>          return HelperProvider.getDefaultContext();
>> >> +    }
>> >> +
>> >> +    public static QName getElement(DataType<?> dataType) {
>> >> +        ElementInfo info = (ElementInfo)dataType.getMetadata().get(
>> >> ElementInfo.class.getName());
>> >> +        if (info == null) {
>> >> +            return SDODataBinding.ROOT_ELEMENT;
>> >> +        } else {
>> >> +            return info.getQName();
>> >> +        }
>> >>      }
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -19,6 +19,9 @@
>> >>
>> >> package org.apache.tuscany.databinding.sdo;
>> >>
>> >> +import java.util.ArrayList;
>> >> +import java.util.List;
>> >> +
>> >> import javax.xml.namespace.QName;
>> >>
>> >> import org.apache.tuscany.spi.databinding.TransformationContext;
>> >> @@ -50,16 +53,6 @@
>> >>      }
>> >>
>> >>      /**
>> >> -     * @see 
>> >> org.apache.tuscany.spi.databinding.WrapperHandler#getChild
>> (
>> >> java.lang.Object,
>> >> -     *      int, ElementInfo)
>> >> -     */
>> >> -    public Object getChild(Object wrapper, int i, ElementInfo 
>> >> element)
>> {
>> >> -        DataObject wrapperDO =
>> >> -            (wrapper instanceof XMLDocument) ?
>> >> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>> >> -        return wrapperDO.get(element.getQName().getLocalPart());
>> >> -    }
>> >> -
>> >> -    /**
>> >>       * @see 
>> >> org.apache.tuscany.spi.databinding.WrapperHandler#setChild
>> (
>> >> java.lang.Object,
>> >>       *      int, ElementInfo, java.lang.Object)
>> >>       */
>> >> @@ -67,6 +60,17 @@
>> >>          DataObject wrapperDO =
>> >>              (wrapper instanceof XMLDocument) ?
>> >> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>> >>          wrapperDO.set(childElement.getQName().getLocalPart(), value);
>> >> +    }
>> >> +
>> >> +    public List getChildren(Object wrapper) {
>> >> +        DataObject wrapperDO =
>> >> +            (wrapper instanceof XMLDocument) ?
>> >> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>> >> +        List properties = wrapperDO.getInstanceProperties();
>> >> +        List<Object> elements = new ArrayList<Object>();
>> >> +        for (int i = 0; i < properties.size(); i++) {
>> >> +            elements.add(wrapperDO.get(i));
>> >> +        }
>> >> +        return elements;
>> >>      }
>> >>
>> >> }
>> >>
>> >> Modified:
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> >> URL:
>> >>
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>> >>
>> >>
>> ==============================================================================
>> >> ---
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> >> (original)
>> >> +++
>> >>
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> >> Thu Feb 22 13:57:46 2007
>> >> @@ -53,15 +53,21 @@
>> >>      }
>> >>
>> >>      public final void testIntrospect() {
>> >> -        DataType<?> dataType = binding.introspect(DataObject.class);
>> >> -        Assert.assertTrue(dataType.getDataBinding().equals(
>> >> binding.getName()));
>> >> -        Assert.assertTrue(dataType.getPhysical() == 
>> >> DataObject.class&&
>> >> dataType.getLogical() == null);
>> >> -        dataType = binding.introspect(PurchaseOrderType.class);
>> >> -        Assert.assertEquals(PurchaseOrderType.class,
>> >> dataType.getPhysical
>> >> ());
>> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> >> "PurchaseOrderType"), dataType.getLogical());
>> >> -        dataType = binding.introspect(USAddress.class);
>> >> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
>> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> >> "USAddress"), dataType.getLogical());
>> >> +        DataType dataType = new DataType(DataObject.class, null);
>> >> +        boolean yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertTrue(dataType.getDataBinding().equals(binding.getName
>> ()));
>> >> +        assertTrue(dataType.getPhysical() == DataObject.class &&
>> >> dataType.getLogical() == DataObject.class);
>> >> +        dataType = new DataType(PurchaseOrderType.class, null);
>> >> +        yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertEquals(PurchaseOrderType.class, 
>> >> dataType.getPhysical());
>> >> +        assertEquals(new QName("http://www.example.com/IPO",
>> >> "PurchaseOrderType"), dataType.getLogical());
>> >> +        dataType = new DataType(USAddress.class, null);
>> >> +        yes = binding.introspect(dataType, null);
>> >> +        assertTrue(yes);
>> >> +        assertEquals(USAddress.class, dataType.getPhysical());
>> >> +        assertEquals(new QName("http://www.example.com/IPO",
>> >> "USAddress"), dataType.getLogical());
>> >>      }
>> >>
>> >>      public final void testCopyRoot() {
>> >>
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
>> >> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
>> >>
>> >>
>> >
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
>> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>>
>>
> 


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


Re: svn commit: r510671 - in /incubator/tuscany/branches/sca-java-integration/sca: extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ extensions/axis2/samples/helloworldwsclient/ kernel/api/src/main/java/org/apache/tusca

Posted by ant elder <an...@gmail.com>.
Hi, any update on this? I've seen there's been some updates to the
databinding code going on, is there something I could try now to work around
the problem to get these tests running again?

   ...ant

On 2/23/07, Raymond Feng <en...@gmail.com> wrote:
>
> Hi, Ant.
>
> The change is supposed to relax the use of @DataType. I'll look into the
> regression in the test case.
>
> Thanks,
> Raymond
>
> ----- Original Message -----
> From: "ant elder" <an...@gmail.com>
> To: <tu...@ws.apache.org>
> Sent: Friday, February 23, 2007 4:51 AM
> Subject: Re: svn commit: r510671 - in
> /incubator/tuscany/branches/sca-java-integration/sca:
>
> extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/
> extensions/axis2/samples/helloworldwsclient/
> kernel/api/src/main/java/org/apache/tusca
>
>
> > It looks like this change stops the databinding from working with
> > interfaces
> > that mix SDO and non-SDO types. See the wsdl itest SDOWSDLTestCase for
> an
> > example, Client1a2a3a4a works before this change and not after. Is this
> > supposed to work like this or must you define all the types with
> @DataType
> > annotations now?
> >
> >   ...ant
> >
> > On 2/22/07, rfeng@apache.org <rf...@apache.org> wrote:
> >>
> >> Author: rfeng
> >> Date: Thu Feb 22 13:57:46 2007
> >> New Revision: 510671
> >>
> >> URL: http://svn.apache.org/viewvc?view=rev&rev=510671
> >> Log:
> >> [sca-integration-branch] Improvements over databindings, adding more
> >> heuristic introspections
> >>
> >> Added:
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> >> (with props)
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> >> (with props)
> >> Modified:
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> >>
> >>
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,7 +19,10 @@
> >>
> >> package org.apache.tuscany.databinding.axiom;
> >>
> >> +import java.util.ArrayList;
> >> +import java.util.Collections;
> >> import java.util.Iterator;
> >> +import java.util.List;
> >>
> >> import org.apache.axiom.om.OMAbstractFactory;
> >> import org.apache.axiom.om.OMElement;
> >> @@ -45,23 +48,16 @@
> >>          return wrapper;
> >>      }
> >>
> >> -    public Object getChild(OMElement wrapper, int i, ElementInfo
> >> element)
> >> {
> >> -        int index = 0;
> >> -        for (Iterator e = wrapper.getChildElements(); e.hasNext();) {
> >> -            OMElement child = (OMElement) e.next();
> >> -            if (index != i) {
> >> -                index++;
> >> -                continue;
> >> -            }
> >> -            if (child.getQName().equals(element.getQName())) {
> >> -                return child;
> >> -            }
> >> -        }
> >> -        return null;
> >> -    }
> >> -
> >>      public void setChild(OMElement wrapper, int i, ElementInfo
> >> childElement, Object value) {
> >>          wrapper.addChild((OMElement) value);
> >> +    }
> >> +
> >> +    public List getChildren(OMElement wrapper) {
> >> +        List<Object> elements = new ArrayList<Object>();
> >> +        for (Iterator i = wrapper.getChildElements(); i.hasNext();) {
> >> +            elements.add(i.next());
> >> +        }
> >> +        return elements;
> >>      }
> >>
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
> >> Thu Feb 22 13:57:46 2007
> >> @@ -55,6 +55,20 @@
> >>                      </archive>
> >>                  </configuration>
> >>              </plugin>
> >> +                <plugin>
> >> +                    <groupId>org.apache.maven.plugins</groupId>
> >> +                    <artifactId>maven-surefire-plugin</artifactId>
> >> +                    <version>2.2</version>
> >> +                    <configuration>
> >> +                        <includes>
> >> +                            <include>**/*TestCase.java</include>
> >> +                        </includes>
> >> +                        <reportFormat>brief</reportFormat>
> >> +                        <useFile>false</useFile>
> >> +                        <forkMode>never</forkMode>
> >> +                        <argLine>-ea</argLine>
> >> +                    </configuration>
> >> +                </plugin>
> >>          </plugins>
> >>      </build>
> >>
> >>
> >> Added:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java?view=auto&rev=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> >> (added)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -0,0 +1,42 @@
> >> +/*
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements.  See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership.  The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License.  You may obtain a copy of the License at
> >> + *
> >> + *   http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied.  See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +package org.apache.tuscany.api.annotation;
> >> +
> >> +import static java.lang.annotation.ElementType.METHOD;
> >> +import static java.lang.annotation.ElementType.TYPE;
> >> +import static java.lang.annotation.RetentionPolicy.RUNTIME;
> >> +
> >> +import java.lang.annotation.Retention;
> >> +import java.lang.annotation.Target;
> >> +
> >> +/**
> >> + * Annotation that can be applied to interfaces or methods to indicate
> a
> >> wrapper
> >> + * style
> >> + *
> >> + * @version $Rev$ $Date$
> >> + */
> >> +@Target( {METHOD, TYPE})
> >> +@Retention(RUNTIME)
> >> +public @interface WrapperStyle {
> >> +
> >> +    /**
> >> +     * The name of the databinding for the wrapper
> >> +     */
> >> +    String value();
> >> +}
> >>
> >> Propchange:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> >>
> >>
> ------------------------------------------------------------------------------
> >>     svn:eol-style = native
> >>
> >> Propchange:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
> >>
> >>
> ------------------------------------------------------------------------------
> >>     svn:keywords = Rev Date
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,7 @@
> >>
> >> package org.apache.tuscany.core.databinding.impl;
> >>
> >> +import java.lang.annotation.Annotation;
> >> import java.lang.reflect.Method;
> >> import java.lang.reflect.Type;
> >> import java.math.BigDecimal;
> >> @@ -30,35 +31,46 @@
> >> import java.util.HashSet;
> >> import java.util.Map;
> >> import java.util.Set;
> >> +
> >> import javax.xml.datatype.Duration;
> >> import javax.xml.datatype.XMLGregorianCalendar;
> >>
> >> +import org.apache.tuscany.api.annotation.DataContext;
> >> +import org.apache.tuscany.api.annotation.DataType;
> >> +import org.apache.tuscany.api.annotation.WrapperStyle;
> >> +import org.apache.tuscany.spi.annotation.Autowire;
> >> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> >> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
> >> import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
> >> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
> >> import org.apache.tuscany.spi.model.Operation;
> >>
> >> -import org.apache.tuscany.api.annotation.DataContext;
> >> -import org.apache.tuscany.api.annotation.DataType;
> >> -
> >> /**
> >>   * The databinding annotation processor for java interfaces
> >> - *
> >> + *
> >>   * @version $Rev$ $Date$
> >>   */
> >> public class DataBindingJavaInterfaceProcessor extends
> >> JavaInterfaceProcessorExtension {
> >> -
> >> -    private static final String SIMPLE_JAVA_OBJECTS =
> >> "java.lang.Object";
> >> -
> >>      private static final Class[] SIMPLE_JAVA_TYPES =
> >>          {Byte.class, Character.class, Short.class, Integer.class,
> >> Long.class, Float.class, Double.class, Date.class,
> >> -        Calendar.class, GregorianCalendar.class, Duration.class,
> >> XMLGregorianCalendar.class, BigInteger.class,
> >> -        BigDecimal.class};
> >> +         Calendar.class, GregorianCalendar.class, Duration.class,
> >> XMLGregorianCalendar.class, BigInteger.class,
> >> +         BigDecimal.class};
> >>
> >>      private static final Set<Class> SIMPLE_TYPE_SET = new
> >> HashSet<Class>(
> >> Arrays.asList(SIMPLE_JAVA_TYPES));
> >>
> >> +    private DataBindingRegistry dataBindingRegistry;
> >> +
> >> +    public DataBindingJavaInterfaceProcessor(@Autowire
> >> +    DataBindingRegistry dataBindingRegistry) {
> >> +        super();
> >> +        this.dataBindingRegistry = dataBindingRegistry;
> >> +    }
> >> +
> >>      public void visitInterface(Class<?> clazz, Class<?> callbackClass,
> >> JavaServiceContract contract)
> >>          throws InvalidServiceContractException {
> >> +        if (!contract.isRemotable()) {
> >> +            return;
> >> +        }
> >>          Map<String, Operation<Type>> operations =
> contract.getOperations
> >> ();
> >>          processInterface(clazz, contract, operations);
> >>          if (callbackClass != null) {
> >> @@ -67,9 +79,9 @@
> >>          }
> >>      }
> >>
> >> -    private void processInterface(Class<?> clazz,
> >> -                                  JavaServiceContract contract,
> >> +    private void processInterface(Class<?> clazz, JavaServiceContract
> >> contract,
> >>                                    Map<String, Operation<Type>>
> >> operations) {
> >> +        WrapperStyle interfaceWrapperStyle = clazz.getAnnotation(
> >> WrapperStyle.class);
> >>          DataType interfaceDataType =
> >> clazz.getAnnotation(DataType.class);
> >>          if (interfaceDataType != null) {
> >>              contract.setDataBinding(interfaceDataType.name());
> >> @@ -81,6 +93,9 @@
> >>          for (Method method : clazz.getMethods()) {
> >>              Operation<?> operation = operations.get(method.getName());
> >>              DataType operationDataType = method.getAnnotation(
> >> DataType.class);
> >> +            if (operationDataType == null) {
> >> +                operationDataType = interfaceDataType;
> >> +            }
> >>
> >>              if (operationDataType != null) {
> >>                  operation.setDataBinding(operationDataType.name());
> >> @@ -89,44 +104,31 @@
> >>                      operation.setMetaData(c.key(), c.value());
> >>                  }
> >>              }
> >> +            WrapperStyle operationWrapperStyle = clazz.getAnnotation(
> >> WrapperStyle.class);
> >> +            if (operationWrapperStyle == null) {
> >> +                operationWrapperStyle = interfaceWrapperStyle;
> >> +            }
> >> +
> >> +            if (operationWrapperStyle != null) {
> >> +                operation.setDataBinding(operationWrapperStyle.value
> ());
> >> +                operation.setWrapperStyle(true);
> >> +            }
> >> +            // String dataBinding = operation.getDataBinding();
> >>
> >> -            String dataBinding = operation.getDataBinding();
> >> -
> >> +            Annotation[] annotations = null;
> >> +            if (operationDataType != null) {
> >> +                annotations = new Annotation[] {operationDataType};
> >> +            }
> >>              // FIXME: We need a better way to identify simple java
> types
> >>              for (org.apache.tuscany.spi.model.DataType<?> d :
> >> operation.getInputType().getLogical()) {
> >> -                adjustSimpleType(d, dataBinding);
> >> +                dataBindingRegistry.introspectType(d, annotations);
> >>              }
> >>              if (operation.getOutputType() != null) {
> >> -                adjustSimpleType(operation.getOutputType(),
> >> dataBinding);
> >> +                dataBindingRegistry.introspectType(
> >> operation.getOutputType(), annotations);
> >>              }
> >>              for (org.apache.tuscany.spi.model.DataType<?> d :
> >> operation.getFaultTypes()) {
> >> -                adjustSimpleType(d, dataBinding);
> >> +                dataBindingRegistry.introspectType(d, annotations);
> >>              }
> >> -        }
> >> -    }
> >> -
> >> -    private void
> >> adjustSimpleType(org.apache.tuscany.spi.model.DataType<?>
> >> dataType, String dataBinding) {
> >> -        Type type = dataType.getPhysical();
> >> -        if (!(type instanceof Class)) {
> >> -            return;
> >> -        }
> >> -        Class cls = (Class) dataType.getPhysical();
> >> -        if (cls.isPrimitive() || SIMPLE_TYPE_SET.contains(cls)) {
> >> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
> >> -        }
> >> -        /**
> >> -         * [rfeng] The following code hits a bug in IBM JDK 5.0
> >> -         * if (cls == String.class && (dataBinding == null ||
> >> !dataBinding.equals(String.class.getName()))) {
> >> -         *      // Identify the String as a simple type
> >> -         *      dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
> >> -         * }
> >> -         */
> >> -
> >> -        boolean plainString =
> >> -            cls == String.class && ((dataBinding == null) ||
> >> !dataBinding.equals(String.class.getName()));
> >> -        if (plainString) {
> >> -            // Identify the String as a simple type
> >> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
> >>          }
> >>      }
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,15 +19,17 @@
> >>
> >> package org.apache.tuscany.core.databinding.impl;
> >>
> >> +import java.lang.annotation.Annotation;
> >> import java.util.HashMap;
> >> +import java.util.HashSet;
> >> import java.util.Map;
> >> -
> >> -import org.osoa.sca.annotations.EagerInit;
> >> +import java.util.Set;
> >>
> >> import
> >> org.apache.tuscany.core.databinding.javabeans.JavaBeansDataBinding;
> >> import org.apache.tuscany.spi.databinding.DataBinding;
> >> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> >> import org.apache.tuscany.spi.model.DataType;
> >> +import org.osoa.sca.annotations.EagerInit;
> >>
> >> /**
> >>   * The default implementation of a data binding registry
> >> @@ -47,34 +49,53 @@
> >>
> >>      public void register(DataBinding dataBinding) {
> >>          bindings.put(dataBinding.getName().toLowerCase(),
> dataBinding);
> >> +        String[] aliases = dataBinding.getAliases();
> >> +        if (aliases != null) {
> >> +            for (String alias : aliases) {
> >> +                bindings.put(alias.toLowerCase(), dataBinding);
> >> +            }
> >> +        }
> >>      }
> >>
> >>      public DataBinding unregister(String id) {
> >>          if (id == null) {
> >>              return null;
> >>          }
> >> -        return bindings.remove(id.toLowerCase());
> >> +        DataBinding dataBinding = bindings.remove(id.toLowerCase());
> >> +        if (dataBinding != null) {
> >> +            String[] aliases = dataBinding.getAliases();
> >> +            if (aliases != null) {
> >> +                for (String alias : aliases) {
> >> +                    bindings.remove(alias.toLowerCase());
> >> +                }
> >> +            }
> >> +        }
> >> +        return dataBinding;
> >> +    }
> >> +
> >> +    private Set<DataBinding> getDataBindings() {
> >> +        return new HashSet<DataBinding>(bindings.values());
> >>      }
> >>
> >> -    public DataType introspectType(Class<?> javaType) {
> >> -        DataType dataType = null;
> >> -        for (DataBinding binding : bindings.values()) {
> >> +    public boolean introspectType(DataType dataType, Annotation[]
> >> annotations) {
> >> +        for (DataBinding binding : getDataBindings()) {
> >>              //don't introspect for JavaBeansDatabinding as all
> javatypes
> >> will anyways match to its basetype
> >>              //which is java.lang.Object.  Default to this only if no
> >> databinding results
> >>              if (!binding.getName().equals(JavaBeansDataBinding.NAME))
> {
> >> -                dataType = binding.introspect(javaType);
> >> -            }
> >> -
> >> -            if (dataType != null) {
> >> -                return dataType;
> >> +                if (binding.introspect(dataType, annotations)) {
> >> +                    return true;
> >> +                }
> >>              }
> >>          }
> >> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
> >> Object.class, javaType);
> >> +        if (dataType.getDataBinding() == null) {
> >> +            dataType.setDataBinding(JavaBeansDataBinding.NAME);
> >> +        }
> >> +        return false;
> >>      }
> >>
> >>      public DataType introspectType(Object value) {
> >>          DataType dataType = null;
> >> -        for (DataBinding binding : bindings.values()) {
> >> +        for (DataBinding binding : getDataBindings()) {
> >>              //don't introspect for JavaBeansDatabinding as all
> javatypes
> >> will anyways match to its basetype
> >>              //which is java.lang.Object.  Default to this only if no
> >> databinding results
> >>              if (!binding.getName().equals(JavaBeansDataBinding.NAME))
> {
> >> @@ -84,7 +105,7 @@
> >>                  return dataType;
> >>              }
> >>          }
> >> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
> >> Object.class, value.getClass());
> >> +        return new DataType<Class>(JavaBeansDataBinding.NAME,
> >> value.getClass(), value.getClass());
> >>      }
> >>
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -144,8 +144,8 @@
> >>          } else if (sourceWrapped && (!targetWrapped)) {
> >>              // Wrapped to Unwrapped
> >>              Object sourceWrapper = source[0];
> >> -            List<ElementInfo> childElements = sourceOp.getWrapper
> >> ().getInputChildElements();
> >> -            Object[] target = new Object[childElements.size()];
> >> +            // List<ElementInfo> childElements = sourceOp.getWrapper
> >> ().getInputChildElements();
> >> +            Object[] target = null;
> >>
> >>              targetWrapperHandler = getWapperHandler(
> >> targetType.getOperation().getDataBinding(), false);
> >>              if (targetWrapperHandler != null) {
> >> @@ -160,18 +160,15 @@
> >>                                       sourceType.getLogical().get(0),
> >>                                       targetWrapperType,
> >>                                       context.getMetadata());
> >> -                for (int i = 0; i < childElements.size(); i++) {
> >> -                    ElementInfo childElement = childElements.get(i);
> >> -                    target[i] =
> >> targetWrapperHandler.getChild(targetWrapper,
> >> i, childElement);
> >> -                }
> >> +                target = targetWrapperHandler.getChildren
> >> (targetWrapper).toArray();
> >>              } else {
> >> -                for (int i = 0; i < childElements.size(); i++) {
> >> -                    ElementInfo childElement = childElements.get(i);
> >> -                    Object child =
> >> sourceWrapperHandler.getChild(sourceWrapper,
> >> i, childElement);
> >> +                Object[] sourceChildren =
> >> sourceWrapperHandler.getChildren(sourceWrapper).toArray();
> >> +                target = new Object[sourceChildren.length];
> >> +                for (int i = 0; i < sourceChildren.length; i++) {
> >>                      DataType<QName> childType =
> >>                          sourceOp.getWrapper
> >> ().getUnwrappedInputType().getLogical().get(i);
> >>                      target[i] =
> >> -                        mediator.mediate(child, childType,
> >> targetType.getLogical().get(i), context
> >> +                        mediator.mediate(sourceChildren[i], childType,
> >> targetType.getLogical().get(i), context
> >>                              .getMetadata());
> >>                  }
> >>              }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -157,8 +157,6 @@
> >>                      // The void output
> >>                      return null;
> >>                  }
> >> -                ElementInfo childElement = childElements.get(0);
> >> -
> >>                  targetWrapperHandler = getWapperHandler(
> >> targetType.getLogical().getDataBinding());
> >>                  if (targetWrapperHandler != null) {
> >>                      ElementInfo wrapperElement = sourceOp.getWrapper
> >> ().getInputWrapperElement();
> >> @@ -170,9 +168,9 @@
> >>                      Object targetWrapper =
> >>                          mediator.mediate(sourceWrapper,
> >> sourceType.getLogical(), targetWrapperType, context
> >>                              .getMetadata());
> >> -                    return targetWrapperHandler.getChild
> (targetWrapper,
> >> 0, childElement);
> >> +                    return targetWrapperHandler.getChildren
> >> (targetWrapper).get(0);
> >>                  } else {
> >> -                    Object child =
> >> sourceWrapperHandler.getChild(sourceWrapper,
> >> 0, childElement);
> >> +                    Object child = sourceWrapperHandler.getChildren
> >> (sourceWrapper).get(0);
> >>                      DataType<?> childType = sourceOp.getWrapper
> >> ().getUnwrappedOutputType();
> >>                      return mediator.mediate(child, childType,
> >> targetType.getLogical(), context.getMetadata());
> >>                  }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,9 @@
> >>
> >> package org.apache.tuscany.core.databinding.xml;
> >>
> >> +import java.util.ArrayList;
> >> +import java.util.List;
> >> +
> >> import javax.xml.namespace.QName;
> >> import javax.xml.parsers.ParserConfigurationException;
> >>
> >> @@ -49,31 +52,27 @@
> >>          return DOMHelper.createElement(document, name);
> >>      }
> >>
> >> -    public Object getChild(Node wrapper, int i, ElementInfo element) {
> >> -        int index = 0;
> >> -        NodeList nodes = wrapper.getChildNodes();
> >> -        for (int j = 0; j < nodes.getLength(); j++) {
> >> -            Node node = nodes.item(j);
> >> -            if (node.getNodeType() != Node.ELEMENT_NODE) {
> >> -                continue;
> >> -            }
> >> -            if (index != i) {
> >> -                index++;
> >> -            } else {
> >> -                QName name = DOMHelper.getQName(node);
> >> -                if (name.equals(element.getQName())) {
> >> -                    return node;
> >> -                }
> >> -            }
> >> -        }
> >> -        return null;
> >> -    }
> >> -
> >>      public void setChild(Node wrapper, int i, ElementInfo
> childElement,
> >> Object value) {
> >>          Node node = (Node) value;
> >>          if (node.getNodeType() == Node.DOCUMENT_NODE) {
> >>              node = ((Document) node).getDocumentElement();
> >>          }
> >>          wrapper.appendChild(wrapper.getOwnerDocument
> ().importNode(node,
> >> true));
> >> +    }
> >> +
> >> +    public List getChildren(Node wrapper) {
> >> +        assert wrapper != null;
> >> +        if (wrapper.getNodeType() == Node.DOCUMENT_NODE) {
> >> +            wrapper = ((Document) wrapper).getDocumentElement();
> >> +        }
> >> +        List<Node> elements = new ArrayList<Node>();
> >> +        NodeList nodes = wrapper.getChildNodes();
> >> +        for (int j = 0; j < nodes.getLength(); j++) {
> >> +            Node node = nodes.item(j);
> >> +            if (node.getNodeType() == Node.ELEMENT_NODE) {
> >> +                elements.add(node);
> >> +            }
> >> +        }
> >> +        return elements;
> >>      }
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -91,10 +91,8 @@
> >>              if (dataBinding != null) {
> >>                  targetDataType = new DataType<Class>(dataBinding,
> >> javaType, javaType);
> >>              } else {
> >> -                targetDataType = registry.introspectType(javaType);
> >> -                if (targetDataType == null) {
> >> -                    targetDataType = new DataType<Class>("
> >> java.lang.Object", javaType, javaType);
> >> -                }
> >> +                targetDataType = new DataType<Class>(dataBinding,
> >> javaType, javaType);
> >> +                registry.introspectType(targetDataType, null);
> >>              }
> >>          }
> >>
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -30,6 +30,7 @@
> >>
> >> import org.apache.tuscany.api.annotation.DataContext;
> >> import org.apache.tuscany.api.annotation.DataType;
> >> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> >> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
> >> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
> >> import org.apache.tuscany.spi.model.Operation;
> >> @@ -52,7 +53,8 @@
> >>       * @throws InvalidServiceContractException
> >>       */
> >>      public final void testVisitInterface() throws
> >> InvalidServiceContractException {
> >> -        DataBindingJavaInterfaceProcessor processor = new
> >> DataBindingJavaInterfaceProcessor();
> >> +        DataBindingRegistry registry = new DataBindingRegistryImpl();
> >> +        DataBindingJavaInterfaceProcessor processor = new
> >> DataBindingJavaInterfaceProcessor(registry);
> >>          JavaServiceContract contract = new JavaServiceContract(
> >> MockInterface.class);
> >>          Map<String, Operation<Type>> operations = new HashMap<String,
> >> Operation<Type>>();
> >>          Operation<Type> operation = new Operation<Type>("call", null,
> >> null, null, false, null, NO_CONVERSATION);
> >> @@ -60,6 +62,7 @@
> >>          operations.put("call", operation);
> >>          operations.put("call1", operation1);
> >>          contract.setOperations(operations);
> >> +        contract.setRemotable(true);
> >>          processor.visitInterface(MockInterface.class, null, contract);
> >>          Assert.assertEquals("org.w3c.dom.Node",
> contract.getDataBinding
> >> ());
> >>          Assert.assertEquals("element",
> >> (String)contract.getMetaData().get("nodeType"));
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -22,6 +22,8 @@
> >> import static org.easymock.EasyMock.expect;
> >> import static org.easymock.EasyMock.replay;
> >>
> >> +import java.lang.annotation.Annotation;
> >> +
> >> import javax.xml.stream.XMLStreamReader;
> >>
> >> import junit.framework.Assert;
> >> @@ -49,19 +51,23 @@
> >>
> >>      public void testRegistry() {
> >>          DataBinding db1 = createMock(DataBinding.class);
> >> +        expect(db1.getAliases()).andReturn(new String[]
> >> {"db1"}).anyTimes();
> >>          expect(db1.getName()).andReturn(ContentHandler.class.getName
> >> ()).anyTimes();
> >>          DataType<Class> dataType1 = new DataType<Class>(
> >> ContentHandler.class, ContentHandler.class);
> >> -        expect(db1.introspect(ContentHandler.class
> >> )).andReturn(dataType1);
> >> -        expect(db1.introspect
> >> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
> >> +        expect(db1.introspect(dataType1, null)).andReturn(true);
> >> +        expect(db1.introspect(EasyMock.not(EasyMock.same(dataType1)),
> >> (Annotation[])EasyMock.isNull()))
> >> +            .andReturn(false).anyTimes();
> >>          replay(db1);
> >>
> >>          registry.register(db1);
> >>
> >>          DataBinding db2 = createMock(DataBinding.class);
> >> +        expect(db2.getAliases()).andReturn(new String[]
> >> {"db2"}).anyTimes();
> >>          expect(db2.getName()).andReturn(XMLStreamReader.class.getName
> >> ()).anyTimes();
> >>          DataType<Class> dataType2 = new DataType<Class>(
> >> XMLStreamReader.class, XMLStreamReader.class);
> >> -        expect(db2.introspect(XMLStreamReader.class
> >> )).andReturn(dataType2);
> >> -        expect(db2.introspect
> >> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
> >> +        expect(db2.introspect(dataType2, null)).andReturn(true);
> >> +        expect(db2.introspect(EasyMock.not(EasyMock.same(dataType2)),
> >> (Annotation[])EasyMock.isNull()))
> >> +            .andReturn(false).anyTimes();
> >>          replay(db2);
> >>
> >>          registry.register(db2);
> >> @@ -70,17 +76,17 @@
> >>          DataBinding db3 = registry.getDataBinding(name);
> >>          Assert.assertTrue(db1 == db3);
> >>
> >> -        DataType<?> dt = registry.introspectType(ContentHandler.class
> );
> >> -        Assert.assertEquals(dataType1, dt);
> >> +        DataType dt = new DataType(ContentHandler.class, null);
> >> +        registry.introspectType(dt, null);
> >> +        Assert.assertEquals(dataType1.getLogical(),
> ContentHandler.class
> >> );
> >>          Assert.assertTrue(dt.getDataBinding().equalsIgnoreCase(name));
> >>
> >>          registry.unregister(name);
> >>          DataBinding db4 = registry.getDataBinding(name);
> >>          Assert.assertNull(db4);
> >> -
> >> -
> >> -        dt = registry.introspectType(ContentHandler.class);
> >> -        Assert.assertNotNull(dt);
> >> +
> >> +        dt = new DataType(null, String.class, null);
> >> +        registry.introspectType(dt, null);
> >>          Assert.assertEquals("java.lang.Object", dt.getDataBinding());
> >>      }
> >>
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,8 @@
> >>
> >> package org.apache.tuscany.spi.databinding;
> >>
> >> +import java.lang.annotation.Annotation;
> >> +
> >> import org.apache.tuscany.spi.model.DataType;
> >>
> >> /**
> >> @@ -43,14 +45,22 @@
> >>       * @return The name of the databinding
> >>       */
> >>      String getName();
> >> +
> >> +    /**
> >> +     * Get the aliases for the databinding
> >> +     *
> >> +     * @return An array of aliases
> >> +     */
> >> +    String[] getAliases();
> >>
> >>      /**
> >> -     * Introspect a java class or interface to create a DataType model
> >> +     * Introspect and populate information to a DataType model
> >>       *
> >>       * @param javaType The java class or interface to be introspected
> >> -     * @return The DataType or null if the java type is not supported
> by
> >> this databinding
> >> +     * @param annotations The java annotations
> >> +     * @return true if the databinding has recognized the given data
> >> type
> >>       */
> >> -    DataType introspect(Class<?> javaType);
> >> +    boolean introspect(DataType dataType, Annotation[] annotations);
> >>
> >>      /**
> >>       * Introspect the data to figure out the corresponding data type
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -18,6 +18,8 @@
> >>   */
> >> package org.apache.tuscany.spi.databinding;
> >>
> >> +import java.lang.annotation.Annotation;
> >> +
> >> import org.apache.tuscany.spi.model.DataType;
> >>
> >> /**
> >> @@ -50,11 +52,12 @@
> >>      /**
> >>       * Introspect the java class to figure out what DataType supports
> it
> >>       *
> >> -     * @param javaType The java class or interface
> >> +     * @param DataType The initial data type
> >> +     * @param annotations The java annotations
> >>       * @return A DataType representing the java type or null if no
> >> databinding
> >>       *         recognizes the java type
> >>       */
> >> -    DataType introspectType(Class<?> javaType);
> >> +    boolean introspectType(DataType dataType, Annotation[]
> annotations);
> >>
> >>      /**
> >>       * Introspect the value to figure out the corresponding DataType
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,8 @@
> >>
> >> package org.apache.tuscany.spi.databinding;
> >>
> >> +import java.util.List;
> >> +
> >> import org.apache.tuscany.spi.idl.ElementInfo;
> >>
> >> /**
> >> @@ -45,12 +47,9 @@
> >>      void setChild(T wrapper, int i, ElementInfo childElement, Object
> >> value);
> >>
> >>      /**
> >> -     * Get child element from the wrapper
> >> -     *
> >> -     * @param wrapper The wrapper
> >> -     * @param i The index
> >> -     * @param element The XSD element
> >> -     * @return The value of the child
> >> +     * Get a list of child elements from the wrapper
> >> +     * @param wrapper
> >> +     * @return child elements under the wrapper
> >>       */
> >> -    Object getChild(T wrapper, int i, ElementInfo element);
> >> +    List getChildren(T wrapper);
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -27,6 +27,7 @@
> >> import java.io.ObjectStreamClass;
> >> import java.io.OutputStream;
> >> import java.io.Serializable;
> >> +import java.lang.annotation.Annotation;
> >>
> >> import org.osoa.sca.annotations.EagerInit;
> >> import org.osoa.sca.annotations.Init;
> >> @@ -43,7 +44,7 @@
> >>
> >> /**
> >>   * Base Implementation of DataBinding
> >> - *
> >> + *
> >>   * @version $Rev$ $Date$
> >>   */
> >> @Service(DataBinding.class)
> >> @@ -58,9 +59,11 @@
> >>      protected String name;
> >>
> >>      /**
> >> -     * Create a databinding with the base java type whose name will be
> >> used as the name of the databinding
> >> -     *
> >> -     * @param baseType The base java class or interface representing
> the
> >> databinding, for example, org.w3c.dom.Node
> >> +     * Create a databinding with the base java type whose name will be
> >> used as
> >> +     * the name of the databinding
> >> +     *
> >> +     * @param baseType The base java class or interface representing
> the
> >> +     *            databinding, for example, org.w3c.dom.Node
> >>       */
> >>      protected DataBindingExtension(Class<?> baseType) {
> >>          this(baseType.getName(), baseType);
> >> @@ -68,9 +71,10 @@
> >>
> >>      /**
> >>       * Create a databinding with the name and base java type
> >> -     *
> >> -     * @param name     The name of the databinding
> >> -     * @param baseType The base java class or interface representing
> the
> >> databinding, for example, org.w3c.dom.Node
> >> +     *
> >> +     * @param name The name of the databinding
> >> +     * @param baseType The base java class or interface representing
> the
> >> +     *            databinding, for example, org.w3c.dom.Node
> >>       */
> >>      protected DataBindingExtension(String name, Class<?> baseType) {
> >>          this.name = name;
> >> @@ -87,22 +91,30 @@
> >>          registry.register(this);
> >>      }
> >>
> >> -    public DataType introspect(Class<?> javaType) {
> >> -        if (baseType == null || javaType == null) {
> >> -            return null;
> >> -        }
> >> -        if (baseType.isAssignableFrom(javaType)) {
> >> -            return new DataType<Class>(name, javaType, baseType);
> >> -        } else {
> >> -            return null;
> >> +    public boolean introspect(DataType type, Annotation[] annotations)
> {
> >> +        assert type != null;
> >> +        Object physical = type.getPhysical();
> >> +        if (physical instanceof Class) {
> >> +            Class cls = (Class)physical;
> >> +            if (baseType != null && baseType.isAssignableFrom(cls)) {
> >> +                type.setDataBinding(getName());
> >> +                type.setLogical(baseType);
> >> +                return true;
> >> +            }
> >>          }
> >> +        return false;
> >>      }
> >>
> >>      public DataType introspect(Object value) {
> >>          if (value == null) {
> >>              return null;
> >>          } else {
> >> -            return introspect(value.getClass());
> >> +            DataType<Class> dataType = new
> >> DataType<Class>(value.getClass(),
> >> value.getClass());
> >> +            if (introspect(dataType, null)) {
> >> +                return dataType;
> >> +            } else {
> >> +                return null;
> >> +            }
> >>          }
> >>      }
> >>
> >> @@ -116,7 +128,7 @@
> >>      public WrapperHandler getWrapperHandler() {
> >>          return null;
> >>      }
> >> -
> >> +
> >>      public ExceptionHandler getExceptionHandler() {
> >>          return null;
> >>      }
> >> @@ -126,8 +138,10 @@
> >>              return null;
> >>          }
> >>          final Class clazz = arg.getClass();
> >> -        if (String.class == clazz || clazz.isPrimitive() ||
> >> Number.class.isAssignableFrom(clazz)
> >> -            || Boolean.class.isAssignableFrom(clazz) ||
> >> Character.class.isAssignableFrom(clazz)
> >> +        if (String.class == clazz || clazz.isPrimitive()
> >> +            || Number.class.isAssignableFrom(clazz)
> >> +            || Boolean.class.isAssignableFrom(clazz)
> >> +            || Character.class.isAssignableFrom(clazz)
> >>              || Byte.class.isAssignableFrom(clazz)) {
> >>              // Immutable classes
> >>              return arg;
> >> @@ -147,13 +161,11 @@
> >>                  bis.close();
> >>                  return objectCopy;
> >>              } else {
> >> -                //return arg;
> >> -                throw new IllegalArgumentException(
> >> -                    "Pass-by-value is not supported for the given
> >> object");
> >> +                // return arg;
> >> +                throw new IllegalArgumentException("Pass-by-value is
> not
> >> supported for the given object");
> >>              }
> >>          } catch (Exception e) {
> >> -            throw new IllegalArgumentException(
> >> -                "Pass-by-value is not supported for the given object",
> >> e);
> >> +            throw new IllegalArgumentException("Pass-by-value is not
> >> supported for the given object", e);
> >>          }
> >>      }
> >>
> >> @@ -161,8 +173,7 @@
> >>          return new ObjectOutputStream(os);
> >>      }
> >>
> >> -    protected ObjectInputStream getObjectInputStream(InputStream is,
> >> final ClassLoader cl)
> >> -        throws IOException {
> >> +    protected ObjectInputStream getObjectInputStream(InputStream is,
> >> final ClassLoader cl) throws IOException {
> >>          ObjectInputStream ois = new ObjectInputStream(is) {
> >>              @Override
> >>              protected Class<?> resolveClass(ObjectStreamClass desc)
> >> throws IOException, ClassNotFoundException {
> >> @@ -179,6 +190,10 @@
> >>
> >>      public SimpleTypeMapper getSimpleTypeMapper() {
> >>          return new SimpleTypeMapperExtension();
> >> +    }
> >> +
> >> +    public String[] getAliases() {
> >> +        return null;
> >>      }
> >>
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -39,7 +39,7 @@
> >>
> >>      private final Type physical;
> >>
> >> -    private final L logical;
> >> +    private L logical;
> >>
> >>      private Map<String, Object> metadata = new HashMap<String,
> >> Object>();
> >>
> >> @@ -237,6 +237,13 @@
> >>
> >>      public void setOperation(Operation operation) {
> >>          this.operation = operation;
> >> +    }
> >> +
> >> +    /**
> >> +     * @param logical the logical to set
> >> +     */
> >> +    public void setLogical(L logical) {
> >> +        this.logical = logical;
> >>      }
> >>
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -22,6 +22,7 @@
> >> import junit.framework.TestCase;
> >>
> >> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
> >> +import org.apache.tuscany.spi.model.DataType;
> >> import org.easymock.EasyMock;
> >> import org.w3c.dom.Element;
> >> import org.w3c.dom.Node;
> >> @@ -41,8 +42,10 @@
> >>      public void testExtension() {
> >>          DataBinding1 binding1 = new DataBinding1(Node.class);
> >>          assertEquals(Node.class.getName(), binding1.getName());
> >> -        assertNotNull(binding1.introspect(Element.class));
> >> -        assertNull(binding1.introspect(String.class));
> >> +        DataType dt1 = new DataType(Element.class, null);
> >> +        assertTrue(binding1.introspect(dt1, null));
> >> +        DataType dt2 = new DataType(String.class, null);
> >> +        assertFalse(binding1.introspect(dt2, null));
> >>          assertNull(binding1.getWrapperHandler());
> >>
> >>          DataBindingRegistry registry = EasyMock.createMock(
> >> DataBindingRegistry.class);
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -29,6 +29,7 @@
> >>
> >> import org.apache.tuscany.spi.databinding.TransformationContext;
> >> import org.apache.tuscany.spi.databinding.TransformationException;
> >> +import org.apache.tuscany.spi.idl.ElementInfo;
> >> import org.apache.tuscany.spi.model.DataType;
> >> import org.apache.tuscany.spi.model.Operation;
> >>
> >> @@ -82,16 +83,19 @@
> >>          if (value instanceof JAXBElement) {
> >>              return (JAXBElement)value;
> >>          } else {
> >> -            Class type = (Class) dataType.getPhysical();
> >> -            Object logical = dataType.getLogical();
> >> -            if (!(logical instanceof QName)) {
> >> -                logical = JAXBDataBinding.ROOT_ELEMENT;
> >> +            Class type = (Class)dataType.getPhysical();
> >> +            ElementInfo elementInfo =
> (ElementInfo)dataType.getMetadata(
> >> ElementInfo.class.getName());
> >> +            QName elementName = JAXBDataBinding.ROOT_ELEMENT;
> >> +            if (elementInfo != null) {
> >> +                elementName = elementInfo.getQName();
> >> +            } else {
> >>                  /**
> >> -                 * Set the declared type to Object.class so that
> >> xsi:type
> >> will be produced
> >> +                 * Set the declared type to Object.class so that
> >> xsi:type
> >> will
> >> +                 * be produced
> >>                   */
> >>                  type = Object.class;
> >>              }
> >> -            return new JAXBElement((QName)logical, type, value);
> >> +            return new JAXBElement(elementName, type, value);
> >>          }
> >>      }
> >>
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -20,6 +20,7 @@
> >> package org.apache.tuscany.databinding.jaxb;
> >>
> >> import java.beans.Introspector;
> >> +import java.lang.annotation.Annotation;
> >> import java.lang.reflect.ParameterizedType;
> >> import java.lang.reflect.Type;
> >>
> >> @@ -47,7 +48,12 @@
> >>      public static final String NAME = JAXBElement.class.getName();
> >>
> >>      @Override
> >> -    public DataType introspect(Class<?> javaType) {
> >> +    public boolean introspect(DataType dataType, Annotation[]
> >> annotations) {
> >> +        Object physical = dataType.getPhysical();
> >> +        if (!(physical instanceof Class)) {
> >> +            return false;
> >> +        }
> >> +        Class javaType = (Class)physical;
> >>          if (JAXBElement.class.isAssignableFrom(javaType)) {
> >>              Type type = javaType.getGenericSuperclass();
> >>              if (type instanceof ParameterizedType) {
> >> @@ -56,16 +62,25 @@
> >>                  if (rawType == JAXBElement.class) {
> >>                      Type actualType =
> >> parameterizedType.getActualTypeArguments()[0];
> >>                      if (actualType instanceof Class) {
> >> -                        return introspect((Class<?>)actualType);
> >> +                        QName xmlType =
> >> getXmlTypeName((Class)actualType);
> >> +                        dataType.setLogical(xmlType);
> >> +                        dataType.setDataBinding(getName());
> >> +                        return true;
> >>                      }
> >>                  }
> >>              }
> >> -            return new DataType<QName>(getName(), javaType, null);
> >> +            dataType.setLogical(null);
> >> +            dataType.setDataBinding(getName());
> >> +            return true;
> >>          }
> >>
> >>          QName xmlType = getXmlTypeName(javaType);
> >> -        DataType<QName> dataType = new DataType<QName>(getName(),
> >> javaType, xmlType);
> >> -        return dataType;
> >> +        if (xmlType == null) {
> >> +            return false;
> >> +        }
> >> +        dataType.setLogical(xmlType);
> >> +        dataType.setDataBinding(getName());
> >> +        return true;
> >>      }
> >>
> >>      public static QName getXmlTypeName(Class<?> javaType) {
> >> @@ -74,7 +89,9 @@
> >>          Package pkg = javaType.getPackage();
> >>          if (pkg != null) {
> >>              XmlSchema schema = pkg.getAnnotation(XmlSchema.class);
> >> -            namespace = schema.namespace();
> >> +            if (schema != null) {
> >> +                namespace = schema.namespace();
> >> +            }
> >>          }
> >>          XmlType type = javaType.getAnnotation(XmlType.class);
> >>          if (type != null) {
> >> @@ -107,7 +124,7 @@
> >>                  name = Introspector.decapitalize(
> javaType.getSimpleName
> >> ());
> >>              }
> >>          }
> >> -        if (namespace == null && name == null) {
> >> +        if (name == null) {
> >>              return null;
> >>          }
> >>          QName xmlType = new QName(namespace, name);
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -26,6 +26,7 @@
> >> import javax.xml.ws.WebFault;
> >>
> >> import org.apache.tuscany.spi.databinding.ExceptionHandler;
> >> +import org.apache.tuscany.spi.idl.ElementInfo;
> >> import org.apache.tuscany.spi.model.DataType;
> >>
> >> /**
> >> @@ -97,6 +98,7 @@
> >>              // only part in
> >>              // the fault message references
> >>              DataType<QName> faultType = new DataType<QName>(
> >> JAXBDataBinding.NAME, faultBeanClass, element);
> >> +            faultType.setMetadata(ElementInfo.class.getName(), new
> >> ElementInfo(element, null));
> >>              return faultType;
> >>          }
> >>      }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,13 +19,14 @@
> >>
> >> package org.apache.tuscany.databinding.jaxb;
> >>
> >> -import java.beans.Introspector;
> >> -import java.beans.PropertyDescriptor;
> >> import java.lang.reflect.Method;
> >> +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.spi.databinding.TransformationContext;
> >> @@ -40,9 +41,14 @@
> >>
> >>      public JAXBElement<?> create(ElementInfo element,
> >> TransformationContext context) {
> >>          try {
> >> +            // FIXME: How do we map the global element to a factory?
> >>              String packageName = null;
> >>              String factoryClassName = packageName + ".ObjectFactory";
> >> -            Class<?> factoryClass = Class.forName(factoryClassName,
> >> true,
> >> context.getClassLoader());
> >> +            ClassLoader classLoader = context != null ?
> >> context.getClassLoader() : null;
> >> +            if (classLoader == null) {
> >> +                classLoader = Thread.currentThread
> >> ().getContextClassLoader();
> >> +            }
> >> +            Class<?> factoryClass = Class.forName(factoryClassName,
> >> true,
> >> classLoader);
> >>              assert factoryClass.isAnnotationPresent(XmlRegistry.class
> );
> >>              Object factory = factoryClass.newInstance();
> >>              QName elementName = element.getQName();
> >> @@ -58,7 +64,7 @@
> >>              if (method != null) {
> >>                  Class typeClass = method.getParameterTypes()[0];
> >>                  Object value = typeClass.newInstance();
> >> -                return (JAXBElement<?>) method.invoke(factory, new
> >> Object[] { value });
> >> +                return (JAXBElement<?>)method.invoke(factory, new
> >> Object[] {value});
> >>              } else {
> >>                  throw new TransformationException("ObjectFactory
> cannot
> >> be resolved.");
> >>              }
> >> @@ -67,36 +73,51 @@
> >>          }
> >>      }
> >>
> >> -    public Object getChild(JAXBElement<?> wrapper, int i, ElementInfo
> >> element) {
> >> +    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
> >> childElement, Object value) {
> >> +        Object wrapperValue = wrapper.getValue();
> >> +        Class<?> wrapperClass = wrapperValue.getClass();
> >> +
> >> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
> >> +        String[] properties = xmlType.propOrder();
> >> +        String property = properties[i];
> >> +
> >>          try {
> >> -            Object value = wrapper.getValue();
> >> -            PropertyDescriptor descriptors[] =
> >> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
> >> ()).getPropertyDescriptors();
> >> -            for (PropertyDescriptor d : descriptors) {
> >> -                if
> >> (d.getName().equals(element.getQName().getLocalPart()))
> >> {
> >> -                    return d.getReadMethod().invoke(value, new
> Object[]
> >> {});
> >> +            for (Method m : wrapperClass.getMethods()) {
> >> +                if (m.getName().equals("set" + capitalize(property)))
> {
> >> +                    m.invoke(wrapperValue, new Object[] {value});
> >> +                    return;
> >>                  }
> >>              }
> >> -            return null;
> >> -        } catch (Exception e) {
> >> +        } catch (Throwable e) {
> >>              throw new TransformationException(e);
> >>          }
> >>      }
> >>
> >> -    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
> >> childElement, Object value) {
> >> -        try {
> >> -            Object wrapperValue = wrapper.getValue();
> >> -            PropertyDescriptor descriptors[] =
> >> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
> >> ()).getPropertyDescriptors();
> >> -            for (PropertyDescriptor d : descriptors) {
> >> -                if
> >> (d.getName().equals(childElement.getQName().getLocalPart()))
> >> {
> >> -                    d.getWriteMethod().invoke(wrapperValue, new
> Object[]
> >> { value });
> >> -                    break;
> >> -                }
> >> +    private static String capitalize(String name) {
> >> +        char first = Character.toUpperCase(name.charAt(0));
> >> +        return first + name.substring(1);
> >> +    }
> >> +
> >> +    /**
> >> +     * @see
> >> org.apache.tuscany.spi.databinding.WrapperHandler#getChildren
> >> (java.lang.Object)
> >> +     */
> >> +    public List getChildren(JAXBElement<?> wrapper) {
> >> +        Object wrapperValue = wrapper.getValue();
> >> +        Class<?> wrapperClass = wrapperValue.getClass();
> >> +
> >> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
> >> +        String[] properties = xmlType.propOrder();
> >> +        List<Object> elements = new ArrayList<Object>();
> >> +        for (String p : properties) {
> >> +            try {
> >> +                Method method = wrapperClass.getMethod("get" +
> >> capitalize(p), (Class[])null);
> >> +                Object value = method.invoke(wrapperValue,
> >> (Object[])null);
> >> +                elements.add(value);
> >> +            } catch (Throwable e) {
> >> +                throw new TransformationException(e);
> >>              }
> >> -        } catch (Exception e) {
> >> -            throw new TransformationException(e);
> >>          }
> >> +        return elements;
> >>      }
> >>
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,8 @@
> >>
> >> package org.apache.tuscany.databinding.jaxb;
> >>
> >> +import java.lang.annotation.Annotation;
> >> +
> >> import javax.xml.bind.JAXBElement;
> >> import javax.xml.namespace.QName;
> >>
> >> @@ -48,22 +50,30 @@
> >>
> >>      /**
> >>       * Test method for
> >> -     * {@link
> >> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
> >> java.lang.Class)}.
> >> +     * {@link
> >> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
> >> java.lang.Class, Annotation)}.
> >>       */
> >>      public final void testIntrospect() {
> >> -        DataType<?> dataType = binding.introspect(JAXBElement.class);
> >> -        Assert.assertTrue(dataType.getDataBinding().equals(
> >> binding.getName()));
> >> -        Assert.assertTrue(dataType.getPhysical() == JAXBElement.class&&
> >> dataType.getLogical() == null);
> >> -        dataType = binding.introspect(MockJAXBElement.class);
> >> -        Assert.assertEquals(PurchaseOrderType.class,
> >> dataType.getPhysical
> >> ());
> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> >> "PurchaseOrderType"), dataType.getLogical());
> >> -        dataType = binding.introspect(USAddress.class);
> >> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> >> "USAddress"), dataType.getLogical());
> >> -        dataType = binding.introspect(USState.class);
> >> -        Assert.assertTrue(dataType.getDataBinding().equals(
> >> binding.getName()));
> >> -        Assert.assertEquals(USState.class, dataType.getPhysical());
> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> >> "USState"), dataType.getLogical());
> >> +        DataType dataType = new DataType(JAXBElement.class, null);
> >> +        boolean yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertTrue(dataType.getDataBinding().equals(binding.getName
> ()));
> >> +        assertTrue(dataType.getPhysical() == JAXBElement.class &&
> >> dataType.getLogical() == null);
> >> +        dataType = new DataType(MockJAXBElement.class, null);
> >> +        yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertEquals(MockJAXBElement.class, dataType.getPhysical());
> >> +        assertEquals(new QName("http://www.example.com/IPO",
> >> "PurchaseOrderType"), dataType.getLogical());
> >> +        dataType = new DataType(USAddress.class, null);
> >> +        yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertEquals(USAddress.class, dataType.getPhysical());
> >> +        assertEquals(new QName("http://www.example.com/IPO",
> >> "USAddress"), dataType.getLogical());
> >> +        dataType = new DataType(USState.class, null);
> >> +        yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertTrue(dataType.getDataBinding().equals(binding.getName
> ()));
> >> +        assertEquals(USState.class, dataType.getPhysical());
> >> +        assertEquals(new QName("http://www.example.com/IPO",
> "USState"),
> >> dataType.getLogical());
> >>
> >>      }
> >>
> >>
> >> Added:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?view=auto&rev=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> >> (added)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -0,0 +1,72 @@
> >> +/*
> >> + * Licensed to the Apache Software Foundation (ASF) under one
> >> + * or more contributor license agreements.  See the NOTICE file
> >> + * distributed with this work for additional information
> >> + * regarding copyright ownership.  The ASF licenses this file
> >> + * to you under the Apache License, Version 2.0 (the
> >> + * "License"); you may not use this file except in compliance
> >> + * with the License.  You may obtain a copy of the License at
> >> + *
> >> + *   http://www.apache.org/licenses/LICENSE-2.0
> >> + *
> >> + * Unless required by applicable law or agreed to in writing,
> >> + * software distributed under the License is distributed on an
> >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> >> + * KIND, either express or implied.  See the License for the
> >> + * specific language governing permissions and limitations
> >> + * under the License.
> >> + */
> >> +
> >> +package org.apache.tuscany.databinding.jaxb;
> >> +
> >> +import java.util.List;
> >> +
> >> +import javax.xml.bind.JAXBElement;
> >> +import javax.xml.namespace.QName;
> >> +
> >> +import junit.framework.TestCase;
> >> +
> >> +import org.apache.tuscany.spi.idl.ElementInfo;
> >> +
> >> +import com.example.ipo.jaxb.ObjectFactory;
> >> +import com.example.ipo.jaxb.PurchaseOrderType;
> >> +
> >> +/**
> >> + * Test case for JAXBExceptionHandler
> >> + */
> >> +public class JAXBWrapperHandlerTestCase extends TestCase {
> >> +    private static final QName ELEMENT = new QName("
> >> http://www.example.com/IPO", "purchaseOrder");
> >> +    private JAXBWrapperHandler handler;
> >> +
> >> +    /**
> >> +     * @see junit.framework.TestCase#setUp()
> >> +     */
> >> +    protected void setUp() throws Exception {
> >> +        super.setUp();
> >> +        this.handler = new JAXBWrapperHandler();
> >> +    }
> >> +
> >> +    public void testCreate() {
> >> +        // ElementInfo element = new ElementInfo(ELEMENT, null);
> >> +        // JAXBElement<?> jaxbElement = handler.create(element, null);
> >> +    }
> >> +
> >> +    public void testSetChild() {
> >> +        ObjectFactory factory = new ObjectFactory();
> >> +        PurchaseOrderType po = factory.createPurchaseOrderType();
> >> +        JAXBElement<PurchaseOrderType> wrapper =
> >> factory.createPurchaseOrder(po);
> >> +        handler.setChild(wrapper, 2, null, "Comment");
> >> +    }
> >> +
> >> +    public void testGetChildren() {
> >> +        ObjectFactory factory = new ObjectFactory();
> >> +        PurchaseOrderType po = factory.createPurchaseOrderType();
> >> +        po.setComment("Comment");
> >> +        JAXBElement<PurchaseOrderType> wrapper =
> >> factory.createPurchaseOrder(po);
> >> +        List children = handler.getChildren(wrapper);
> >> +        assertNotNull(children);
> >> +        assertEquals(4, children.size());
> >> +        assertEquals("Comment", children.get(2));
> >> +        assertNull(children.get(0));
> >> +    }
> >> +}
> >>
> >> Propchange:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> >>
> >>
> ------------------------------------------------------------------------------
> >>     svn:eol-style = native
> >>
> >> Propchange:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
> >>
> >>
> ------------------------------------------------------------------------------
> >>     svn:keywords = Rev Date
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -18,8 +18,6 @@
> >>   */
> >> package org.apache.tuscany.databinding.sdo;
> >>
> >> -import static
> >> org.apache.tuscany.databinding.sdo.SDODataBinding.ROOT_ELEMENT;
> >> -
> >> import javax.xml.namespace.QName;
> >>
> >> import org.apache.tuscany.spi.databinding.PullTransformer;
> >> @@ -41,13 +39,8 @@
> >>          try {
> >>              HelperContext helperContext =
> >> SDODataTypeHelper.getHelperContext(context);
> >>              XMLHelper xmlHelper = helperContext.getXMLHelper();
> >> -            Object logicalType = context.getSourceDataType
> >> ().getLogical();
> >> -            if (logicalType instanceof QName) {
> >> -                QName elementName = (QName)logicalType;
> >> -                return xmlHelper.save(source,
> >> elementName.getNamespaceURI(),
> >> elementName.getLocalPart());
> >> -            } else {
> >> -                return xmlHelper.save(source,
> >> ROOT_ELEMENT.getNamespaceURI(), ROOT_ELEMENT.getLocalPart());
> >> -            }
> >> +            QName elementName = SDODataTypeHelper.getElement(
> >> context.getSourceDataType());
> >> +            return xmlHelper.save(source, elementName.getNamespaceURI
> (),
> >> elementName.getLocalPart());
> >>          } catch (Exception e) {
> >>              throw new TransformationException(e);
> >>          }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -44,9 +44,7 @@
> >>          try {
> >>              HelperContext helperContext =
> >> SDODataTypeHelper.getHelperContext(context);
> >>              XMLStreamHelper streamHelper =
> >> SDOUtil.createXMLStreamHelper(
> >> helperContext.getTypeHelper());
> >> -            Object logicalType = context.getSourceDataType
> >> ().getLogical();
> >> -            QName elementName =
> >> -                    (logicalType instanceof QName) ? (QName)
> logicalType
> >> : SDODataBinding.ROOT_ELEMENT;
> >> +            QName elementName = SDODataTypeHelper.getElement(
> >> context.getSourceDataType());
> >>              XMLHelper xmlHelper = helperContext.getXMLHelper();
> >>              XMLDocument document =
> >>                      xmlHelper.createDocument(source,
> >> elementName.getNamespaceURI(), elementName.getLocalPart());
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,8 @@
> >>
> >> package org.apache.tuscany.databinding.sdo;
> >>
> >> +import java.lang.annotation.Annotation;
> >> +
> >> import javax.xml.namespace.QName;
> >>
> >> import org.apache.tuscany.spi.databinding.ExceptionHandler;
> >> @@ -52,30 +54,33 @@
> >>      }
> >>
> >>      @Override
> >> -    public DataType introspect(Class<?> javaType) {
> >> -        if (javaType == null) {
> >> -            return null;
> >> +    public boolean introspect(DataType dataType, Annotation[]
> >> annotations) {
> >> +        Object physical = dataType.getPhysical();
> >> +        if (!(physical instanceof Class)) {
> >> +            return false;
> >>          }
> >> +        Class javaType = (Class)physical;
> >>          HelperContext context = HelperProvider.getDefaultContext();
> >>          // FIXME: Need a better to test dynamic SDO
> >>          if (DataObject.class.isAssignableFrom(javaType)) {
> >>              // Dynamic SDO
> >> -            return new DataType<QName>(getName(), javaType, null);
> >> +            dataType.setLogical(DataObject.class);
> >> +            return true;
> >>          }
> >>          // FIXME: We need to access HelperContext
> >>          Type type = context.getTypeHelper().getType(javaType);
> >>          if (type == null) {
> >> -            return null;
> >> +            return false;
> >>          }
> >>          if (type.isDataType()) {
> >>              // FIXME: Ignore simple types?
> >> -            return null;
> >> +            return false;
> >>          }
> >>          String namespace = type.getURI();
> >>          String name = context.getXSDHelper().getLocalName(type);
> >>          QName xmlType = new QName(namespace, name);
> >> -        DataType<QName> dataType = new DataType<QName>(getName(),
> >> javaType, xmlType);
> >> -        return dataType;
> >> +        dataType.setLogical(xmlType);
> >> +        return true;
> >>      }
> >>
> >>      @Override
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,11 +19,15 @@
> >>
> >> package org.apache.tuscany.databinding.sdo;
> >>
> >> +import javax.xml.namespace.QName;
> >> +
> >> import org.apache.tuscany.databinding.sdo.ImportSDOLoader.SDOType;
> >> import org.apache.tuscany.sdo.util.SDOUtil;
> >> import org.apache.tuscany.spi.component.CompositeComponent;
> >> import org.apache.tuscany.spi.databinding.TransformationContext;
> >> import org.apache.tuscany.spi.deployer.DeploymentContext;
> >> +import org.apache.tuscany.spi.idl.ElementInfo;
> >> +import org.apache.tuscany.spi.model.DataType;
> >>
> >> import commonj.sdo.helper.HelperContext;
> >> import commonj.sdo.impl.HelperProvider;
> >> @@ -53,11 +57,12 @@
> >>              return helperContext;
> >>          }
> >>      }
> >> -
> >> +
> >>      public static HelperContext getHelperContext(DeploymentContext
> >> deploymentContext) {
> >>          HelperContext helperContext = null;
> >>          if (deploymentContext != null && deploymentContext.getParent()
> >> !=
> >> null) {
> >> -            // HACK: Retrieve the SDO HelperContext from the
> >> CompositeComponent extensions
> >> +            // HACK: Retrieve the SDO HelperContext from the
> >> CompositeComponent
> >> +            // extensions
> >>              helperContext =
> >> (HelperContext)deploymentContext.getParent().getExtension(
> >> HelperContext.class.getName());
> >>              if (helperContext == null) {
> >>                  helperContext = SDOUtil.createHelperContext();
> >> @@ -68,12 +73,21 @@
> >>          if (helperContext == null) {
> >>              helperContext = getDefaultHelperContext();
> >>          }
> >> -
> >> +
> >>          return helperContext;
> >>      }
> >> -
> >> +
> >>      protected static HelperContext getDefaultHelperContext() {
> >>          // SDOUtil.createHelperContext();
> >>          return HelperProvider.getDefaultContext();
> >> +    }
> >> +
> >> +    public static QName getElement(DataType<?> dataType) {
> >> +        ElementInfo info = (ElementInfo)dataType.getMetadata().get(
> >> ElementInfo.class.getName());
> >> +        if (info == null) {
> >> +            return SDODataBinding.ROOT_ELEMENT;
> >> +        } else {
> >> +            return info.getQName();
> >> +        }
> >>      }
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -19,6 +19,9 @@
> >>
> >> package org.apache.tuscany.databinding.sdo;
> >>
> >> +import java.util.ArrayList;
> >> +import java.util.List;
> >> +
> >> import javax.xml.namespace.QName;
> >>
> >> import org.apache.tuscany.spi.databinding.TransformationContext;
> >> @@ -50,16 +53,6 @@
> >>      }
> >>
> >>      /**
> >> -     * @see org.apache.tuscany.spi.databinding.WrapperHandler#getChild
> (
> >> java.lang.Object,
> >> -     *      int, ElementInfo)
> >> -     */
> >> -    public Object getChild(Object wrapper, int i, ElementInfo element)
> {
> >> -        DataObject wrapperDO =
> >> -            (wrapper instanceof XMLDocument) ?
> >> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
> >> -        return wrapperDO.get(element.getQName().getLocalPart());
> >> -    }
> >> -
> >> -    /**
> >>       * @see org.apache.tuscany.spi.databinding.WrapperHandler#setChild
> (
> >> java.lang.Object,
> >>       *      int, ElementInfo, java.lang.Object)
> >>       */
> >> @@ -67,6 +60,17 @@
> >>          DataObject wrapperDO =
> >>              (wrapper instanceof XMLDocument) ?
> >> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
> >>          wrapperDO.set(childElement.getQName().getLocalPart(), value);
> >> +    }
> >> +
> >> +    public List getChildren(Object wrapper) {
> >> +        DataObject wrapperDO =
> >> +            (wrapper instanceof XMLDocument) ?
> >> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
> >> +        List properties = wrapperDO.getInstanceProperties();
> >> +        List<Object> elements = new ArrayList<Object>();
> >> +        for (int i = 0; i < properties.size(); i++) {
> >> +            elements.add(wrapperDO.get(i));
> >> +        }
> >> +        return elements;
> >>      }
> >>
> >> }
> >>
> >> Modified:
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> >> URL:
> >>
> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
> >>
> >>
> ==============================================================================
> >> ---
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> >> (original)
> >> +++
> >>
> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
> >> Thu Feb 22 13:57:46 2007
> >> @@ -53,15 +53,21 @@
> >>      }
> >>
> >>      public final void testIntrospect() {
> >> -        DataType<?> dataType = binding.introspect(DataObject.class);
> >> -        Assert.assertTrue(dataType.getDataBinding().equals(
> >> binding.getName()));
> >> -        Assert.assertTrue(dataType.getPhysical() == DataObject.class&&
> >> dataType.getLogical() == null);
> >> -        dataType = binding.introspect(PurchaseOrderType.class);
> >> -        Assert.assertEquals(PurchaseOrderType.class,
> >> dataType.getPhysical
> >> ());
> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> >> "PurchaseOrderType"), dataType.getLogical());
> >> -        dataType = binding.introspect(USAddress.class);
> >> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
> >> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
> >> "USAddress"), dataType.getLogical());
> >> +        DataType dataType = new DataType(DataObject.class, null);
> >> +        boolean yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertTrue(dataType.getDataBinding().equals(binding.getName
> ()));
> >> +        assertTrue(dataType.getPhysical() == DataObject.class &&
> >> dataType.getLogical() == DataObject.class);
> >> +        dataType = new DataType(PurchaseOrderType.class, null);
> >> +        yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertEquals(PurchaseOrderType.class, dataType.getPhysical());
> >> +        assertEquals(new QName("http://www.example.com/IPO",
> >> "PurchaseOrderType"), dataType.getLogical());
> >> +        dataType = new DataType(USAddress.class, null);
> >> +        yes = binding.introspect(dataType, null);
> >> +        assertTrue(yes);
> >> +        assertEquals(USAddress.class, dataType.getPhysical());
> >> +        assertEquals(new QName("http://www.example.com/IPO",
> >> "USAddress"), dataType.getLogical());
> >>      }
> >>
> >>      public final void testCopyRoot() {
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
> >> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
> >>
> >>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
>

Re: svn commit: r510671 - in /incubator/tuscany/branches/sca-java-integration/sca: extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ extensions/axis2/samples/helloworldwsclient/ kernel/api/src/main/java/org/apache/tusca

Posted by Raymond Feng <en...@gmail.com>.
Hi, Ant.

The change is supposed to relax the use of @DataType. I'll look into the 
regression in the test case.

Thanks,
Raymond

----- Original Message ----- 
From: "ant elder" <an...@gmail.com>
To: <tu...@ws.apache.org>
Sent: Friday, February 23, 2007 4:51 AM
Subject: Re: svn commit: r510671 - in 
/incubator/tuscany/branches/sca-java-integration/sca: 
extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/ 
extensions/axis2/samples/helloworldwsclient/ 
kernel/api/src/main/java/org/apache/tusca


> It looks like this change stops the databinding from working with 
> interfaces
> that mix SDO and non-SDO types. See the wsdl itest SDOWSDLTestCase for an
> example, Client1a2a3a4a works before this change and not after. Is this
> supposed to work like this or must you define all the types with @DataType
> annotations now?
>
>   ...ant
>
> On 2/22/07, rfeng@apache.org <rf...@apache.org> wrote:
>>
>> Author: rfeng
>> Date: Thu Feb 22 13:57:46 2007
>> New Revision: 510671
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=510671
>> Log:
>> [sca-integration-branch] Improvements over databindings, adding more
>> heuristic introspections
>>
>> Added:
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> (with props)
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> (with props)
>> Modified:
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>>
>> 
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/databinding/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,7 +19,10 @@
>>
>> package org.apache.tuscany.databinding.axiom;
>>
>> +import java.util.ArrayList;
>> +import java.util.Collections;
>> import java.util.Iterator;
>> +import java.util.List;
>>
>> import org.apache.axiom.om.OMAbstractFactory;
>> import org.apache.axiom.om.OMElement;
>> @@ -45,23 +48,16 @@
>>          return wrapper;
>>      }
>>
>> -    public Object getChild(OMElement wrapper, int i, ElementInfo 
>> element)
>> {
>> -        int index = 0;
>> -        for (Iterator e = wrapper.getChildElements(); e.hasNext();) {
>> -            OMElement child = (OMElement) e.next();
>> -            if (index != i) {
>> -                index++;
>> -                continue;
>> -            }
>> -            if (child.getQName().equals(element.getQName())) {
>> -                return child;
>> -            }
>> -        }
>> -        return null;
>> -    }
>> -
>>      public void setChild(OMElement wrapper, int i, ElementInfo
>> childElement, Object value) {
>>          wrapper.addChild((OMElement) value);
>> +    }
>> +
>> +    public List getChildren(OMElement wrapper) {
>> +        List<Object> elements = new ArrayList<Object>();
>> +        for (Iterator i = wrapper.getChildElements(); i.hasNext();) {
>> +            elements.add(i.next());
>> +        }
>> +        return elements;
>>      }
>>
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/samples/helloworldwsclient/pom.xml
>> Thu Feb 22 13:57:46 2007
>> @@ -55,6 +55,20 @@
>>                      </archive>
>>                  </configuration>
>>              </plugin>
>> +                <plugin>
>> +                    <groupId>org.apache.maven.plugins</groupId>
>> +                    <artifactId>maven-surefire-plugin</artifactId>
>> +                    <version>2.2</version>
>> +                    <configuration>
>> +                        <includes>
>> +                            <include>**/*TestCase.java</include>
>> +                        </includes>
>> +                        <reportFormat>brief</reportFormat>
>> +                        <useFile>false</useFile>
>> +                        <forkMode>never</forkMode>
>> +                        <argLine>-ea</argLine>
>> +                    </configuration>
>> +                </plugin>
>>          </plugins>
>>      </build>
>>
>>
>> Added:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java?view=auto&rev=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> (added)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>> Thu Feb 22 13:57:46 2007
>> @@ -0,0 +1,42 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + *   http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.tuscany.api.annotation;
>> +
>> +import static java.lang.annotation.ElementType.METHOD;
>> +import static java.lang.annotation.ElementType.TYPE;
>> +import static java.lang.annotation.RetentionPolicy.RUNTIME;
>> +
>> +import java.lang.annotation.Retention;
>> +import java.lang.annotation.Target;
>> +
>> +/**
>> + * Annotation that can be applied to interfaces or methods to indicate a
>> wrapper
>> + * style
>> + *
>> + * @version $Rev$ $Date$
>> + */
>> +@Target( {METHOD, TYPE})
>> +@Retention(RUNTIME)
>> +public @interface WrapperStyle {
>> +
>> +    /**
>> +     * The name of the databinding for the wrapper
>> +     */
>> +    String value();
>> +}
>>
>> Propchange:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/api/src/main/java/org/apache/tuscany/api/annotation/WrapperStyle.java
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Rev Date
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessor.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,7 @@
>>
>> package org.apache.tuscany.core.databinding.impl;
>>
>> +import java.lang.annotation.Annotation;
>> import java.lang.reflect.Method;
>> import java.lang.reflect.Type;
>> import java.math.BigDecimal;
>> @@ -30,35 +31,46 @@
>> import java.util.HashSet;
>> import java.util.Map;
>> import java.util.Set;
>> +
>> import javax.xml.datatype.Duration;
>> import javax.xml.datatype.XMLGregorianCalendar;
>>
>> +import org.apache.tuscany.api.annotation.DataContext;
>> +import org.apache.tuscany.api.annotation.DataType;
>> +import org.apache.tuscany.api.annotation.WrapperStyle;
>> +import org.apache.tuscany.spi.annotation.Autowire;
>> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
>> import org.apache.tuscany.spi.idl.java.JavaInterfaceProcessorExtension;
>> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
>> import org.apache.tuscany.spi.model.Operation;
>>
>> -import org.apache.tuscany.api.annotation.DataContext;
>> -import org.apache.tuscany.api.annotation.DataType;
>> -
>> /**
>>   * The databinding annotation processor for java interfaces
>> - *
>> + *
>>   * @version $Rev$ $Date$
>>   */
>> public class DataBindingJavaInterfaceProcessor extends
>> JavaInterfaceProcessorExtension {
>> -
>> -    private static final String SIMPLE_JAVA_OBJECTS = 
>> "java.lang.Object";
>> -
>>      private static final Class[] SIMPLE_JAVA_TYPES =
>>          {Byte.class, Character.class, Short.class, Integer.class,
>> Long.class, Float.class, Double.class, Date.class,
>> -        Calendar.class, GregorianCalendar.class, Duration.class,
>> XMLGregorianCalendar.class, BigInteger.class,
>> -        BigDecimal.class};
>> +         Calendar.class, GregorianCalendar.class, Duration.class,
>> XMLGregorianCalendar.class, BigInteger.class,
>> +         BigDecimal.class};
>>
>>      private static final Set<Class> SIMPLE_TYPE_SET = new 
>> HashSet<Class>(
>> Arrays.asList(SIMPLE_JAVA_TYPES));
>>
>> +    private DataBindingRegistry dataBindingRegistry;
>> +
>> +    public DataBindingJavaInterfaceProcessor(@Autowire
>> +    DataBindingRegistry dataBindingRegistry) {
>> +        super();
>> +        this.dataBindingRegistry = dataBindingRegistry;
>> +    }
>> +
>>      public void visitInterface(Class<?> clazz, Class<?> callbackClass,
>> JavaServiceContract contract)
>>          throws InvalidServiceContractException {
>> +        if (!contract.isRemotable()) {
>> +            return;
>> +        }
>>          Map<String, Operation<Type>> operations = contract.getOperations
>> ();
>>          processInterface(clazz, contract, operations);
>>          if (callbackClass != null) {
>> @@ -67,9 +79,9 @@
>>          }
>>      }
>>
>> -    private void processInterface(Class<?> clazz,
>> -                                  JavaServiceContract contract,
>> +    private void processInterface(Class<?> clazz, JavaServiceContract
>> contract,
>>                                    Map<String, Operation<Type>>
>> operations) {
>> +        WrapperStyle interfaceWrapperStyle = clazz.getAnnotation(
>> WrapperStyle.class);
>>          DataType interfaceDataType = 
>> clazz.getAnnotation(DataType.class);
>>          if (interfaceDataType != null) {
>>              contract.setDataBinding(interfaceDataType.name());
>> @@ -81,6 +93,9 @@
>>          for (Method method : clazz.getMethods()) {
>>              Operation<?> operation = operations.get(method.getName());
>>              DataType operationDataType = method.getAnnotation(
>> DataType.class);
>> +            if (operationDataType == null) {
>> +                operationDataType = interfaceDataType;
>> +            }
>>
>>              if (operationDataType != null) {
>>                  operation.setDataBinding(operationDataType.name());
>> @@ -89,44 +104,31 @@
>>                      operation.setMetaData(c.key(), c.value());
>>                  }
>>              }
>> +            WrapperStyle operationWrapperStyle = clazz.getAnnotation(
>> WrapperStyle.class);
>> +            if (operationWrapperStyle == null) {
>> +                operationWrapperStyle = interfaceWrapperStyle;
>> +            }
>> +
>> +            if (operationWrapperStyle != null) {
>> +                operation.setDataBinding(operationWrapperStyle.value());
>> +                operation.setWrapperStyle(true);
>> +            }
>> +            // String dataBinding = operation.getDataBinding();
>>
>> -            String dataBinding = operation.getDataBinding();
>> -
>> +            Annotation[] annotations = null;
>> +            if (operationDataType != null) {
>> +                annotations = new Annotation[] {operationDataType};
>> +            }
>>              // FIXME: We need a better way to identify simple java types
>>              for (org.apache.tuscany.spi.model.DataType<?> d :
>> operation.getInputType().getLogical()) {
>> -                adjustSimpleType(d, dataBinding);
>> +                dataBindingRegistry.introspectType(d, annotations);
>>              }
>>              if (operation.getOutputType() != null) {
>> -                adjustSimpleType(operation.getOutputType(), 
>> dataBinding);
>> +                dataBindingRegistry.introspectType(
>> operation.getOutputType(), annotations);
>>              }
>>              for (org.apache.tuscany.spi.model.DataType<?> d :
>> operation.getFaultTypes()) {
>> -                adjustSimpleType(d, dataBinding);
>> +                dataBindingRegistry.introspectType(d, annotations);
>>              }
>> -        }
>> -    }
>> -
>> -    private void 
>> adjustSimpleType(org.apache.tuscany.spi.model.DataType<?>
>> dataType, String dataBinding) {
>> -        Type type = dataType.getPhysical();
>> -        if (!(type instanceof Class)) {
>> -            return;
>> -        }
>> -        Class cls = (Class) dataType.getPhysical();
>> -        if (cls.isPrimitive() || SIMPLE_TYPE_SET.contains(cls)) {
>> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>> -        }
>> -        /**
>> -         * [rfeng] The following code hits a bug in IBM JDK 5.0
>> -         * if (cls == String.class && (dataBinding == null ||
>> !dataBinding.equals(String.class.getName()))) {
>> -         *      // Identify the String as a simple type
>> -         *      dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>> -         * }
>> -         */
>> -
>> -        boolean plainString =
>> -            cls == String.class && ((dataBinding == null) ||
>> !dataBinding.equals(String.class.getName()));
>> -        if (plainString) {
>> -            // Identify the String as a simple type
>> -            dataType.setDataBinding(SIMPLE_JAVA_OBJECTS);
>>          }
>>      }
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImpl.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,15 +19,17 @@
>>
>> package org.apache.tuscany.core.databinding.impl;
>>
>> +import java.lang.annotation.Annotation;
>> import java.util.HashMap;
>> +import java.util.HashSet;
>> import java.util.Map;
>> -
>> -import org.osoa.sca.annotations.EagerInit;
>> +import java.util.Set;
>>
>> import 
>> org.apache.tuscany.core.databinding.javabeans.JavaBeansDataBinding;
>> import org.apache.tuscany.spi.databinding.DataBinding;
>> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> import org.apache.tuscany.spi.model.DataType;
>> +import org.osoa.sca.annotations.EagerInit;
>>
>> /**
>>   * The default implementation of a data binding registry
>> @@ -47,34 +49,53 @@
>>
>>      public void register(DataBinding dataBinding) {
>>          bindings.put(dataBinding.getName().toLowerCase(), dataBinding);
>> +        String[] aliases = dataBinding.getAliases();
>> +        if (aliases != null) {
>> +            for (String alias : aliases) {
>> +                bindings.put(alias.toLowerCase(), dataBinding);
>> +            }
>> +        }
>>      }
>>
>>      public DataBinding unregister(String id) {
>>          if (id == null) {
>>              return null;
>>          }
>> -        return bindings.remove(id.toLowerCase());
>> +        DataBinding dataBinding = bindings.remove(id.toLowerCase());
>> +        if (dataBinding != null) {
>> +            String[] aliases = dataBinding.getAliases();
>> +            if (aliases != null) {
>> +                for (String alias : aliases) {
>> +                    bindings.remove(alias.toLowerCase());
>> +                }
>> +            }
>> +        }
>> +        return dataBinding;
>> +    }
>> +
>> +    private Set<DataBinding> getDataBindings() {
>> +        return new HashSet<DataBinding>(bindings.values());
>>      }
>>
>> -    public DataType introspectType(Class<?> javaType) {
>> -        DataType dataType = null;
>> -        for (DataBinding binding : bindings.values()) {
>> +    public boolean introspectType(DataType dataType, Annotation[]
>> annotations) {
>> +        for (DataBinding binding : getDataBindings()) {
>>              //don't introspect for JavaBeansDatabinding as all javatypes
>> will anyways match to its basetype
>>              //which is java.lang.Object.  Default to this only if no
>> databinding results
>>              if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
>> -                dataType = binding.introspect(javaType);
>> -            }
>> -
>> -            if (dataType != null) {
>> -                return dataType;
>> +                if (binding.introspect(dataType, annotations)) {
>> +                    return true;
>> +                }
>>              }
>>          }
>> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
>> Object.class, javaType);
>> +        if (dataType.getDataBinding() == null) {
>> +            dataType.setDataBinding(JavaBeansDataBinding.NAME);
>> +        }
>> +        return false;
>>      }
>>
>>      public DataType introspectType(Object value) {
>>          DataType dataType = null;
>> -        for (DataBinding binding : bindings.values()) {
>> +        for (DataBinding binding : getDataBindings()) {
>>              //don't introspect for JavaBeansDatabinding as all javatypes
>> will anyways match to its basetype
>>              //which is java.lang.Object.  Default to this only if no
>> databinding results
>>              if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
>> @@ -84,7 +105,7 @@
>>                  return dataType;
>>              }
>>          }
>> -        return new DataType<Class>(JavaBeansDataBinding.NAME,
>> Object.class, value.getClass());
>> +        return new DataType<Class>(JavaBeansDataBinding.NAME,
>> value.getClass(), value.getClass());
>>      }
>>
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Input2InputTransformer.java
>> Thu Feb 22 13:57:46 2007
>> @@ -144,8 +144,8 @@
>>          } else if (sourceWrapped && (!targetWrapped)) {
>>              // Wrapped to Unwrapped
>>              Object sourceWrapper = source[0];
>> -            List<ElementInfo> childElements = sourceOp.getWrapper
>> ().getInputChildElements();
>> -            Object[] target = new Object[childElements.size()];
>> +            // List<ElementInfo> childElements = sourceOp.getWrapper
>> ().getInputChildElements();
>> +            Object[] target = null;
>>
>>              targetWrapperHandler = getWapperHandler(
>> targetType.getOperation().getDataBinding(), false);
>>              if (targetWrapperHandler != null) {
>> @@ -160,18 +160,15 @@
>>                                       sourceType.getLogical().get(0),
>>                                       targetWrapperType,
>>                                       context.getMetadata());
>> -                for (int i = 0; i < childElements.size(); i++) {
>> -                    ElementInfo childElement = childElements.get(i);
>> -                    target[i] = 
>> targetWrapperHandler.getChild(targetWrapper,
>> i, childElement);
>> -                }
>> +                target = targetWrapperHandler.getChildren
>> (targetWrapper).toArray();
>>              } else {
>> -                for (int i = 0; i < childElements.size(); i++) {
>> -                    ElementInfo childElement = childElements.get(i);
>> -                    Object child = 
>> sourceWrapperHandler.getChild(sourceWrapper,
>> i, childElement);
>> +                Object[] sourceChildren =
>> sourceWrapperHandler.getChildren(sourceWrapper).toArray();
>> +                target = new Object[sourceChildren.length];
>> +                for (int i = 0; i < sourceChildren.length; i++) {
>>                      DataType<QName> childType =
>>                          sourceOp.getWrapper
>> ().getUnwrappedInputType().getLogical().get(i);
>>                      target[i] =
>> -                        mediator.mediate(child, childType,
>> targetType.getLogical().get(i), context
>> +                        mediator.mediate(sourceChildren[i], childType,
>> targetType.getLogical().get(i), context
>>                              .getMetadata());
>>                  }
>>              }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/Output2OutputTransformer.java
>> Thu Feb 22 13:57:46 2007
>> @@ -157,8 +157,6 @@
>>                      // The void output
>>                      return null;
>>                  }
>> -                ElementInfo childElement = childElements.get(0);
>> -
>>                  targetWrapperHandler = getWapperHandler(
>> targetType.getLogical().getDataBinding());
>>                  if (targetWrapperHandler != null) {
>>                      ElementInfo wrapperElement = sourceOp.getWrapper
>> ().getInputWrapperElement();
>> @@ -170,9 +168,9 @@
>>                      Object targetWrapper =
>>                          mediator.mediate(sourceWrapper,
>> sourceType.getLogical(), targetWrapperType, context
>>                              .getMetadata());
>> -                    return targetWrapperHandler.getChild(targetWrapper,
>> 0, childElement);
>> +                    return targetWrapperHandler.getChildren
>> (targetWrapper).get(0);
>>                  } else {
>> -                    Object child = 
>> sourceWrapperHandler.getChild(sourceWrapper,
>> 0, childElement);
>> +                    Object child = sourceWrapperHandler.getChildren
>> (sourceWrapper).get(0);
>>                      DataType<?> childType = sourceOp.getWrapper
>> ().getUnwrappedOutputType();
>>                      return mediator.mediate(child, childType,
>> targetType.getLogical(), context.getMetadata());
>>                  }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMWrapperHandler.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,9 @@
>>
>> package org.apache.tuscany.core.databinding.xml;
>>
>> +import java.util.ArrayList;
>> +import java.util.List;
>> +
>> import javax.xml.namespace.QName;
>> import javax.xml.parsers.ParserConfigurationException;
>>
>> @@ -49,31 +52,27 @@
>>          return DOMHelper.createElement(document, name);
>>      }
>>
>> -    public Object getChild(Node wrapper, int i, ElementInfo element) {
>> -        int index = 0;
>> -        NodeList nodes = wrapper.getChildNodes();
>> -        for (int j = 0; j < nodes.getLength(); j++) {
>> -            Node node = nodes.item(j);
>> -            if (node.getNodeType() != Node.ELEMENT_NODE) {
>> -                continue;
>> -            }
>> -            if (index != i) {
>> -                index++;
>> -            } else {
>> -                QName name = DOMHelper.getQName(node);
>> -                if (name.equals(element.getQName())) {
>> -                    return node;
>> -                }
>> -            }
>> -        }
>> -        return null;
>> -    }
>> -
>>      public void setChild(Node wrapper, int i, ElementInfo childElement,
>> Object value) {
>>          Node node = (Node) value;
>>          if (node.getNodeType() == Node.DOCUMENT_NODE) {
>>              node = ((Document) node).getDocumentElement();
>>          }
>>          wrapper.appendChild(wrapper.getOwnerDocument().importNode(node,
>> true));
>> +    }
>> +
>> +    public List getChildren(Node wrapper) {
>> +        assert wrapper != null;
>> +        if (wrapper.getNodeType() == Node.DOCUMENT_NODE) {
>> +            wrapper = ((Document) wrapper).getDocumentElement();
>> +        }
>> +        List<Node> elements = new ArrayList<Node>();
>> +        NodeList nodes = wrapper.getChildNodes();
>> +        for (int j = 0; j < nodes.getLength(); j++) {
>> +            Node node = nodes.item(j);
>> +            if (node.getNodeType() == Node.ELEMENT_NODE) {
>> +                elements.add(node);
>> +            }
>> +        }
>> +        return elements;
>>      }
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/property/PropertyObjectFactoryImpl.java
>> Thu Feb 22 13:57:46 2007
>> @@ -91,10 +91,8 @@
>>              if (dataBinding != null) {
>>                  targetDataType = new DataType<Class>(dataBinding,
>> javaType, javaType);
>>              } else {
>> -                targetDataType = registry.introspectType(javaType);
>> -                if (targetDataType == null) {
>> -                    targetDataType = new DataType<Class>("
>> java.lang.Object", javaType, javaType);
>> -                }
>> +                targetDataType = new DataType<Class>(dataBinding,
>> javaType, javaType);
>> +                registry.introspectType(targetDataType, null);
>>              }
>>          }
>>
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingJavaInterfaceProcessorTestCase.java
>> Thu Feb 22 13:57:46 2007
>> @@ -30,6 +30,7 @@
>>
>> import org.apache.tuscany.api.annotation.DataContext;
>> import org.apache.tuscany.api.annotation.DataType;
>> +import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> import org.apache.tuscany.spi.idl.InvalidServiceContractException;
>> import org.apache.tuscany.spi.idl.java.JavaServiceContract;
>> import org.apache.tuscany.spi.model.Operation;
>> @@ -52,7 +53,8 @@
>>       * @throws InvalidServiceContractException
>>       */
>>      public final void testVisitInterface() throws
>> InvalidServiceContractException {
>> -        DataBindingJavaInterfaceProcessor processor = new
>> DataBindingJavaInterfaceProcessor();
>> +        DataBindingRegistry registry = new DataBindingRegistryImpl();
>> +        DataBindingJavaInterfaceProcessor processor = new
>> DataBindingJavaInterfaceProcessor(registry);
>>          JavaServiceContract contract = new JavaServiceContract(
>> MockInterface.class);
>>          Map<String, Operation<Type>> operations = new HashMap<String,
>> Operation<Type>>();
>>          Operation<Type> operation = new Operation<Type>("call", null,
>> null, null, false, null, NO_CONVERSATION);
>> @@ -60,6 +62,7 @@
>>          operations.put("call", operation);
>>          operations.put("call1", operation1);
>>          contract.setOperations(operations);
>> +        contract.setRemotable(true);
>>          processor.visitInterface(MockInterface.class, null, contract);
>>          Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding
>> ());
>>          Assert.assertEquals("element",
>> (String)contract.getMetaData().get("nodeType"));
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/DataBindingRegistryImplTestCase.java
>> Thu Feb 22 13:57:46 2007
>> @@ -22,6 +22,8 @@
>> import static org.easymock.EasyMock.expect;
>> import static org.easymock.EasyMock.replay;
>>
>> +import java.lang.annotation.Annotation;
>> +
>> import javax.xml.stream.XMLStreamReader;
>>
>> import junit.framework.Assert;
>> @@ -49,19 +51,23 @@
>>
>>      public void testRegistry() {
>>          DataBinding db1 = createMock(DataBinding.class);
>> +        expect(db1.getAliases()).andReturn(new String[]
>> {"db1"}).anyTimes();
>>          expect(db1.getName()).andReturn(ContentHandler.class.getName
>> ()).anyTimes();
>>          DataType<Class> dataType1 = new DataType<Class>(
>> ContentHandler.class, ContentHandler.class);
>> -        expect(db1.introspect(ContentHandler.class
>> )).andReturn(dataType1);
>> -        expect(db1.introspect
>> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
>> +        expect(db1.introspect(dataType1, null)).andReturn(true);
>> +        expect(db1.introspect(EasyMock.not(EasyMock.same(dataType1)),
>> (Annotation[])EasyMock.isNull()))
>> +            .andReturn(false).anyTimes();
>>          replay(db1);
>>
>>          registry.register(db1);
>>
>>          DataBinding db2 = createMock(DataBinding.class);
>> +        expect(db2.getAliases()).andReturn(new String[]
>> {"db2"}).anyTimes();
>>          expect(db2.getName()).andReturn(XMLStreamReader.class.getName
>> ()).anyTimes();
>>          DataType<Class> dataType2 = new DataType<Class>(
>> XMLStreamReader.class, XMLStreamReader.class);
>> -        expect(db2.introspect(XMLStreamReader.class
>> )).andReturn(dataType2);
>> -        expect(db2.introspect
>> ((Class)EasyMock.anyObject())).andReturn(null).anyTimes();
>> +        expect(db2.introspect(dataType2, null)).andReturn(true);
>> +        expect(db2.introspect(EasyMock.not(EasyMock.same(dataType2)),
>> (Annotation[])EasyMock.isNull()))
>> +            .andReturn(false).anyTimes();
>>          replay(db2);
>>
>>          registry.register(db2);
>> @@ -70,17 +76,17 @@
>>          DataBinding db3 = registry.getDataBinding(name);
>>          Assert.assertTrue(db1 == db3);
>>
>> -        DataType<?> dt = registry.introspectType(ContentHandler.class);
>> -        Assert.assertEquals(dataType1, dt);
>> +        DataType dt = new DataType(ContentHandler.class, null);
>> +        registry.introspectType(dt, null);
>> +        Assert.assertEquals(dataType1.getLogical(), ContentHandler.class
>> );
>>          Assert.assertTrue(dt.getDataBinding().equalsIgnoreCase(name));
>>
>>          registry.unregister(name);
>>          DataBinding db4 = registry.getDataBinding(name);
>>          Assert.assertNull(db4);
>> -
>> -
>> -        dt = registry.introspectType(ContentHandler.class);
>> -        Assert.assertNotNull(dt);
>> +
>> +        dt = new DataType(null, String.class, null);
>> +        registry.introspectType(dt, null);
>>          Assert.assertEquals("java.lang.Object", dt.getDataBinding());
>>      }
>>
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBinding.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,8 @@
>>
>> package org.apache.tuscany.spi.databinding;
>>
>> +import java.lang.annotation.Annotation;
>> +
>> import org.apache.tuscany.spi.model.DataType;
>>
>> /**
>> @@ -43,14 +45,22 @@
>>       * @return The name of the databinding
>>       */
>>      String getName();
>> +
>> +    /**
>> +     * Get the aliases for the databinding
>> +     *
>> +     * @return An array of aliases
>> +     */
>> +    String[] getAliases();
>>
>>      /**
>> -     * Introspect a java class or interface to create a DataType model
>> +     * Introspect and populate information to a DataType model
>>       *
>>       * @param javaType The java class or interface to be introspected
>> -     * @return The DataType or null if the java type is not supported by
>> this databinding
>> +     * @param annotations The java annotations
>> +     * @return true if the databinding has recognized the given data 
>> type
>>       */
>> -    DataType introspect(Class<?> javaType);
>> +    boolean introspect(DataType dataType, Annotation[] annotations);
>>
>>      /**
>>       * Introspect the data to figure out the corresponding data type
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/DataBindingRegistry.java
>> Thu Feb 22 13:57:46 2007
>> @@ -18,6 +18,8 @@
>>   */
>> package org.apache.tuscany.spi.databinding;
>>
>> +import java.lang.annotation.Annotation;
>> +
>> import org.apache.tuscany.spi.model.DataType;
>>
>> /**
>> @@ -50,11 +52,12 @@
>>      /**
>>       * Introspect the java class to figure out what DataType supports it
>>       *
>> -     * @param javaType The java class or interface
>> +     * @param DataType The initial data type
>> +     * @param annotations The java annotations
>>       * @return A DataType representing the java type or null if no
>> databinding
>>       *         recognizes the java type
>>       */
>> -    DataType introspectType(Class<?> javaType);
>> +    boolean introspectType(DataType dataType, Annotation[] annotations);
>>
>>      /**
>>       * Introspect the value to figure out the corresponding DataType
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/WrapperHandler.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,8 @@
>>
>> package org.apache.tuscany.spi.databinding;
>>
>> +import java.util.List;
>> +
>> import org.apache.tuscany.spi.idl.ElementInfo;
>>
>> /**
>> @@ -45,12 +47,9 @@
>>      void setChild(T wrapper, int i, ElementInfo childElement, Object
>> value);
>>
>>      /**
>> -     * Get child element from the wrapper
>> -     *
>> -     * @param wrapper The wrapper
>> -     * @param i The index
>> -     * @param element The XSD element
>> -     * @return The value of the child
>> +     * Get a list of child elements from the wrapper
>> +     * @param wrapper
>> +     * @return child elements under the wrapper
>>       */
>> -    Object getChild(T wrapper, int i, ElementInfo element);
>> +    List getChildren(T wrapper);
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtension.java
>> Thu Feb 22 13:57:46 2007
>> @@ -27,6 +27,7 @@
>> import java.io.ObjectStreamClass;
>> import java.io.OutputStream;
>> import java.io.Serializable;
>> +import java.lang.annotation.Annotation;
>>
>> import org.osoa.sca.annotations.EagerInit;
>> import org.osoa.sca.annotations.Init;
>> @@ -43,7 +44,7 @@
>>
>> /**
>>   * Base Implementation of DataBinding
>> - *
>> + *
>>   * @version $Rev$ $Date$
>>   */
>> @Service(DataBinding.class)
>> @@ -58,9 +59,11 @@
>>      protected String name;
>>
>>      /**
>> -     * Create a databinding with the base java type whose name will be
>> used as the name of the databinding
>> -     *
>> -     * @param baseType The base java class or interface representing the
>> databinding, for example, org.w3c.dom.Node
>> +     * Create a databinding with the base java type whose name will be
>> used as
>> +     * the name of the databinding
>> +     *
>> +     * @param baseType The base java class or interface representing the
>> +     *            databinding, for example, org.w3c.dom.Node
>>       */
>>      protected DataBindingExtension(Class<?> baseType) {
>>          this(baseType.getName(), baseType);
>> @@ -68,9 +71,10 @@
>>
>>      /**
>>       * Create a databinding with the name and base java type
>> -     *
>> -     * @param name     The name of the databinding
>> -     * @param baseType The base java class or interface representing the
>> databinding, for example, org.w3c.dom.Node
>> +     *
>> +     * @param name The name of the databinding
>> +     * @param baseType The base java class or interface representing the
>> +     *            databinding, for example, org.w3c.dom.Node
>>       */
>>      protected DataBindingExtension(String name, Class<?> baseType) {
>>          this.name = name;
>> @@ -87,22 +91,30 @@
>>          registry.register(this);
>>      }
>>
>> -    public DataType introspect(Class<?> javaType) {
>> -        if (baseType == null || javaType == null) {
>> -            return null;
>> -        }
>> -        if (baseType.isAssignableFrom(javaType)) {
>> -            return new DataType<Class>(name, javaType, baseType);
>> -        } else {
>> -            return null;
>> +    public boolean introspect(DataType type, Annotation[] annotations) {
>> +        assert type != null;
>> +        Object physical = type.getPhysical();
>> +        if (physical instanceof Class) {
>> +            Class cls = (Class)physical;
>> +            if (baseType != null && baseType.isAssignableFrom(cls)) {
>> +                type.setDataBinding(getName());
>> +                type.setLogical(baseType);
>> +                return true;
>> +            }
>>          }
>> +        return false;
>>      }
>>
>>      public DataType introspect(Object value) {
>>          if (value == null) {
>>              return null;
>>          } else {
>> -            return introspect(value.getClass());
>> +            DataType<Class> dataType = new 
>> DataType<Class>(value.getClass(),
>> value.getClass());
>> +            if (introspect(dataType, null)) {
>> +                return dataType;
>> +            } else {
>> +                return null;
>> +            }
>>          }
>>      }
>>
>> @@ -116,7 +128,7 @@
>>      public WrapperHandler getWrapperHandler() {
>>          return null;
>>      }
>> -
>> +
>>      public ExceptionHandler getExceptionHandler() {
>>          return null;
>>      }
>> @@ -126,8 +138,10 @@
>>              return null;
>>          }
>>          final Class clazz = arg.getClass();
>> -        if (String.class == clazz || clazz.isPrimitive() ||
>> Number.class.isAssignableFrom(clazz)
>> -            || Boolean.class.isAssignableFrom(clazz) ||
>> Character.class.isAssignableFrom(clazz)
>> +        if (String.class == clazz || clazz.isPrimitive()
>> +            || Number.class.isAssignableFrom(clazz)
>> +            || Boolean.class.isAssignableFrom(clazz)
>> +            || Character.class.isAssignableFrom(clazz)
>>              || Byte.class.isAssignableFrom(clazz)) {
>>              // Immutable classes
>>              return arg;
>> @@ -147,13 +161,11 @@
>>                  bis.close();
>>                  return objectCopy;
>>              } else {
>> -                //return arg;
>> -                throw new IllegalArgumentException(
>> -                    "Pass-by-value is not supported for the given
>> object");
>> +                // return arg;
>> +                throw new IllegalArgumentException("Pass-by-value is not
>> supported for the given object");
>>              }
>>          } catch (Exception e) {
>> -            throw new IllegalArgumentException(
>> -                "Pass-by-value is not supported for the given object",
>> e);
>> +            throw new IllegalArgumentException("Pass-by-value is not
>> supported for the given object", e);
>>          }
>>      }
>>
>> @@ -161,8 +173,7 @@
>>          return new ObjectOutputStream(os);
>>      }
>>
>> -    protected ObjectInputStream getObjectInputStream(InputStream is,
>> final ClassLoader cl)
>> -        throws IOException {
>> +    protected ObjectInputStream getObjectInputStream(InputStream is,
>> final ClassLoader cl) throws IOException {
>>          ObjectInputStream ois = new ObjectInputStream(is) {
>>              @Override
>>              protected Class<?> resolveClass(ObjectStreamClass desc)
>> throws IOException, ClassNotFoundException {
>> @@ -179,6 +190,10 @@
>>
>>      public SimpleTypeMapper getSimpleTypeMapper() {
>>          return new SimpleTypeMapperExtension();
>> +    }
>> +
>> +    public String[] getAliases() {
>> +        return null;
>>      }
>>
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/model/DataType.java
>> Thu Feb 22 13:57:46 2007
>> @@ -39,7 +39,7 @@
>>
>>      private final Type physical;
>>
>> -    private final L logical;
>> +    private L logical;
>>
>>      private Map<String, Object> metadata = new HashMap<String, 
>> Object>();
>>
>> @@ -237,6 +237,13 @@
>>
>>      public void setOperation(Operation operation) {
>>          this.operation = operation;
>> +    }
>> +
>> +    /**
>> +     * @param logical the logical to set
>> +     */
>> +    public void setLogical(L logical) {
>> +        this.logical = logical;
>>      }
>>
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/databinding/extension/DataBindingExtensionTestCase.java
>> Thu Feb 22 13:57:46 2007
>> @@ -22,6 +22,7 @@
>> import junit.framework.TestCase;
>>
>> import org.apache.tuscany.spi.databinding.DataBindingRegistry;
>> +import org.apache.tuscany.spi.model.DataType;
>> import org.easymock.EasyMock;
>> import org.w3c.dom.Element;
>> import org.w3c.dom.Node;
>> @@ -41,8 +42,10 @@
>>      public void testExtension() {
>>          DataBinding1 binding1 = new DataBinding1(Node.class);
>>          assertEquals(Node.class.getName(), binding1.getName());
>> -        assertNotNull(binding1.introspect(Element.class));
>> -        assertNull(binding1.introspect(String.class));
>> +        DataType dt1 = new DataType(Element.class, null);
>> +        assertTrue(binding1.introspect(dt1, null));
>> +        DataType dt2 = new DataType(String.class, null);
>> +        assertFalse(binding1.introspect(dt2, null));
>>          assertNull(binding1.getWrapperHandler());
>>
>>          DataBindingRegistry registry = EasyMock.createMock(
>> DataBindingRegistry.class);
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
>> Thu Feb 22 13:57:46 2007
>> @@ -29,6 +29,7 @@
>>
>> import org.apache.tuscany.spi.databinding.TransformationContext;
>> import org.apache.tuscany.spi.databinding.TransformationException;
>> +import org.apache.tuscany.spi.idl.ElementInfo;
>> import org.apache.tuscany.spi.model.DataType;
>> import org.apache.tuscany.spi.model.Operation;
>>
>> @@ -82,16 +83,19 @@
>>          if (value instanceof JAXBElement) {
>>              return (JAXBElement)value;
>>          } else {
>> -            Class type = (Class) dataType.getPhysical();
>> -            Object logical = dataType.getLogical();
>> -            if (!(logical instanceof QName)) {
>> -                logical = JAXBDataBinding.ROOT_ELEMENT;
>> +            Class type = (Class)dataType.getPhysical();
>> +            ElementInfo elementInfo = (ElementInfo)dataType.getMetadata(
>> ElementInfo.class.getName());
>> +            QName elementName = JAXBDataBinding.ROOT_ELEMENT;
>> +            if (elementInfo != null) {
>> +                elementName = elementInfo.getQName();
>> +            } else {
>>                  /**
>> -                 * Set the declared type to Object.class so that 
>> xsi:type
>> will be produced
>> +                 * Set the declared type to Object.class so that 
>> xsi:type
>> will
>> +                 * be produced
>>                   */
>>                  type = Object.class;
>>              }
>> -            return new JAXBElement((QName)logical, type, value);
>> +            return new JAXBElement(elementName, type, value);
>>          }
>>      }
>>
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBDataBinding.java
>> Thu Feb 22 13:57:46 2007
>> @@ -20,6 +20,7 @@
>> package org.apache.tuscany.databinding.jaxb;
>>
>> import java.beans.Introspector;
>> +import java.lang.annotation.Annotation;
>> import java.lang.reflect.ParameterizedType;
>> import java.lang.reflect.Type;
>>
>> @@ -47,7 +48,12 @@
>>      public static final String NAME = JAXBElement.class.getName();
>>
>>      @Override
>> -    public DataType introspect(Class<?> javaType) {
>> +    public boolean introspect(DataType dataType, Annotation[]
>> annotations) {
>> +        Object physical = dataType.getPhysical();
>> +        if (!(physical instanceof Class)) {
>> +            return false;
>> +        }
>> +        Class javaType = (Class)physical;
>>          if (JAXBElement.class.isAssignableFrom(javaType)) {
>>              Type type = javaType.getGenericSuperclass();
>>              if (type instanceof ParameterizedType) {
>> @@ -56,16 +62,25 @@
>>                  if (rawType == JAXBElement.class) {
>>                      Type actualType =
>> parameterizedType.getActualTypeArguments()[0];
>>                      if (actualType instanceof Class) {
>> -                        return introspect((Class<?>)actualType);
>> +                        QName xmlType =
>> getXmlTypeName((Class)actualType);
>> +                        dataType.setLogical(xmlType);
>> +                        dataType.setDataBinding(getName());
>> +                        return true;
>>                      }
>>                  }
>>              }
>> -            return new DataType<QName>(getName(), javaType, null);
>> +            dataType.setLogical(null);
>> +            dataType.setDataBinding(getName());
>> +            return true;
>>          }
>>
>>          QName xmlType = getXmlTypeName(javaType);
>> -        DataType<QName> dataType = new DataType<QName>(getName(),
>> javaType, xmlType);
>> -        return dataType;
>> +        if (xmlType == null) {
>> +            return false;
>> +        }
>> +        dataType.setLogical(xmlType);
>> +        dataType.setDataBinding(getName());
>> +        return true;
>>      }
>>
>>      public static QName getXmlTypeName(Class<?> javaType) {
>> @@ -74,7 +89,9 @@
>>          Package pkg = javaType.getPackage();
>>          if (pkg != null) {
>>              XmlSchema schema = pkg.getAnnotation(XmlSchema.class);
>> -            namespace = schema.namespace();
>> +            if (schema != null) {
>> +                namespace = schema.namespace();
>> +            }
>>          }
>>          XmlType type = javaType.getAnnotation(XmlType.class);
>>          if (type != null) {
>> @@ -107,7 +124,7 @@
>>                  name = Introspector.decapitalize(javaType.getSimpleName
>> ());
>>              }
>>          }
>> -        if (namespace == null && name == null) {
>> +        if (name == null) {
>>              return null;
>>          }
>>          QName xmlType = new QName(namespace, name);
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBExceptionHandler.java
>> Thu Feb 22 13:57:46 2007
>> @@ -26,6 +26,7 @@
>> import javax.xml.ws.WebFault;
>>
>> import org.apache.tuscany.spi.databinding.ExceptionHandler;
>> +import org.apache.tuscany.spi.idl.ElementInfo;
>> import org.apache.tuscany.spi.model.DataType;
>>
>> /**
>> @@ -97,6 +98,7 @@
>>              // only part in
>>              // the fault message references
>>              DataType<QName> faultType = new DataType<QName>(
>> JAXBDataBinding.NAME, faultBeanClass, element);
>> +            faultType.setMetadata(ElementInfo.class.getName(), new
>> ElementInfo(element, null));
>>              return faultType;
>>          }
>>      }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,13 +19,14 @@
>>
>> package org.apache.tuscany.databinding.jaxb;
>>
>> -import java.beans.Introspector;
>> -import java.beans.PropertyDescriptor;
>> import java.lang.reflect.Method;
>> +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.spi.databinding.TransformationContext;
>> @@ -40,9 +41,14 @@
>>
>>      public JAXBElement<?> create(ElementInfo element,
>> TransformationContext context) {
>>          try {
>> +            // FIXME: How do we map the global element to a factory?
>>              String packageName = null;
>>              String factoryClassName = packageName + ".ObjectFactory";
>> -            Class<?> factoryClass = Class.forName(factoryClassName, 
>> true,
>> context.getClassLoader());
>> +            ClassLoader classLoader = context != null ?
>> context.getClassLoader() : null;
>> +            if (classLoader == null) {
>> +                classLoader = Thread.currentThread
>> ().getContextClassLoader();
>> +            }
>> +            Class<?> factoryClass = Class.forName(factoryClassName, 
>> true,
>> classLoader);
>>              assert factoryClass.isAnnotationPresent(XmlRegistry.class);
>>              Object factory = factoryClass.newInstance();
>>              QName elementName = element.getQName();
>> @@ -58,7 +64,7 @@
>>              if (method != null) {
>>                  Class typeClass = method.getParameterTypes()[0];
>>                  Object value = typeClass.newInstance();
>> -                return (JAXBElement<?>) method.invoke(factory, new
>> Object[] { value });
>> +                return (JAXBElement<?>)method.invoke(factory, new
>> Object[] {value});
>>              } else {
>>                  throw new TransformationException("ObjectFactory cannot
>> be resolved.");
>>              }
>> @@ -67,36 +73,51 @@
>>          }
>>      }
>>
>> -    public Object getChild(JAXBElement<?> wrapper, int i, ElementInfo
>> element) {
>> +    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
>> childElement, Object value) {
>> +        Object wrapperValue = wrapper.getValue();
>> +        Class<?> wrapperClass = wrapperValue.getClass();
>> +
>> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
>> +        String[] properties = xmlType.propOrder();
>> +        String property = properties[i];
>> +
>>          try {
>> -            Object value = wrapper.getValue();
>> -            PropertyDescriptor descriptors[] =
>> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
>> ()).getPropertyDescriptors();
>> -            for (PropertyDescriptor d : descriptors) {
>> -                if 
>> (d.getName().equals(element.getQName().getLocalPart()))
>> {
>> -                    return d.getReadMethod().invoke(value, new Object[]
>> {});
>> +            for (Method m : wrapperClass.getMethods()) {
>> +                if (m.getName().equals("set" + capitalize(property))) {
>> +                    m.invoke(wrapperValue, new Object[] {value});
>> +                    return;
>>                  }
>>              }
>> -            return null;
>> -        } catch (Exception e) {
>> +        } catch (Throwable e) {
>>              throw new TransformationException(e);
>>          }
>>      }
>>
>> -    public void setChild(JAXBElement<?> wrapper, int i, ElementInfo
>> childElement, Object value) {
>> -        try {
>> -            Object wrapperValue = wrapper.getValue();
>> -            PropertyDescriptor descriptors[] =
>> -                    Introspector.getBeanInfo(wrapper.getDeclaredType
>> ()).getPropertyDescriptors();
>> -            for (PropertyDescriptor d : descriptors) {
>> -                if 
>> (d.getName().equals(childElement.getQName().getLocalPart()))
>> {
>> -                    d.getWriteMethod().invoke(wrapperValue, new Object[]
>> { value });
>> -                    break;
>> -                }
>> +    private static String capitalize(String name) {
>> +        char first = Character.toUpperCase(name.charAt(0));
>> +        return first + name.substring(1);
>> +    }
>> +
>> +    /**
>> +     * @see 
>> org.apache.tuscany.spi.databinding.WrapperHandler#getChildren
>> (java.lang.Object)
>> +     */
>> +    public List getChildren(JAXBElement<?> wrapper) {
>> +        Object wrapperValue = wrapper.getValue();
>> +        Class<?> wrapperClass = wrapperValue.getClass();
>> +
>> +        XmlType xmlType = wrapperClass.getAnnotation(XmlType.class);
>> +        String[] properties = xmlType.propOrder();
>> +        List<Object> elements = new ArrayList<Object>();
>> +        for (String p : properties) {
>> +            try {
>> +                Method method = wrapperClass.getMethod("get" +
>> capitalize(p), (Class[])null);
>> +                Object value = method.invoke(wrapperValue,
>> (Object[])null);
>> +                elements.add(value);
>> +            } catch (Throwable e) {
>> +                throw new TransformationException(e);
>>              }
>> -        } catch (Exception e) {
>> -            throw new TransformationException(e);
>>          }
>> +        return elements;
>>      }
>>
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,8 @@
>>
>> package org.apache.tuscany.databinding.jaxb;
>>
>> +import java.lang.annotation.Annotation;
>> +
>> import javax.xml.bind.JAXBElement;
>> import javax.xml.namespace.QName;
>>
>> @@ -48,22 +50,30 @@
>>
>>      /**
>>       * Test method for
>> -     * {@link
>> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
>> java.lang.Class)}.
>> +     * {@link
>> org.apache.tuscany.databinding.jaxb.JAXBDataBinding#introspect(
>> java.lang.Class, Annotation)}.
>>       */
>>      public final void testIntrospect() {
>> -        DataType<?> dataType = binding.introspect(JAXBElement.class);
>> -        Assert.assertTrue(dataType.getDataBinding().equals(
>> binding.getName()));
>> -        Assert.assertTrue(dataType.getPhysical() == JAXBElement.class &&
>> dataType.getLogical() == null);
>> -        dataType = binding.introspect(MockJAXBElement.class);
>> -        Assert.assertEquals(PurchaseOrderType.class, 
>> dataType.getPhysical
>> ());
>> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> "PurchaseOrderType"), dataType.getLogical());
>> -        dataType = binding.introspect(USAddress.class);
>> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
>> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> "USAddress"), dataType.getLogical());
>> -        dataType = binding.introspect(USState.class);
>> -        Assert.assertTrue(dataType.getDataBinding().equals(
>> binding.getName()));
>> -        Assert.assertEquals(USState.class, dataType.getPhysical());
>> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> "USState"), dataType.getLogical());
>> +        DataType dataType = new DataType(JAXBElement.class, null);
>> +        boolean yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertTrue(dataType.getDataBinding().equals(binding.getName()));
>> +        assertTrue(dataType.getPhysical() == JAXBElement.class &&
>> dataType.getLogical() == null);
>> +        dataType = new DataType(MockJAXBElement.class, null);
>> +        yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertEquals(MockJAXBElement.class, dataType.getPhysical());
>> +        assertEquals(new QName("http://www.example.com/IPO",
>> "PurchaseOrderType"), dataType.getLogical());
>> +        dataType = new DataType(USAddress.class, null);
>> +        yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertEquals(USAddress.class, dataType.getPhysical());
>> +        assertEquals(new QName("http://www.example.com/IPO",
>> "USAddress"), dataType.getLogical());
>> +        dataType = new DataType(USState.class, null);
>> +        yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertTrue(dataType.getDataBinding().equals(binding.getName()));
>> +        assertEquals(USState.class, dataType.getPhysical());
>> +        assertEquals(new QName("http://www.example.com/IPO", "USState"),
>> dataType.getLogical());
>>
>>      }
>>
>>
>> Added:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java?view=auto&rev=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> (added)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>> Thu Feb 22 13:57:46 2007
>> @@ -0,0 +1,72 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + *   http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +
>> +package org.apache.tuscany.databinding.jaxb;
>> +
>> +import java.util.List;
>> +
>> +import javax.xml.bind.JAXBElement;
>> +import javax.xml.namespace.QName;
>> +
>> +import junit.framework.TestCase;
>> +
>> +import org.apache.tuscany.spi.idl.ElementInfo;
>> +
>> +import com.example.ipo.jaxb.ObjectFactory;
>> +import com.example.ipo.jaxb.PurchaseOrderType;
>> +
>> +/**
>> + * Test case for JAXBExceptionHandler
>> + */
>> +public class JAXBWrapperHandlerTestCase extends TestCase {
>> +    private static final QName ELEMENT = new QName("
>> http://www.example.com/IPO", "purchaseOrder");
>> +    private JAXBWrapperHandler handler;
>> +
>> +    /**
>> +     * @see junit.framework.TestCase#setUp()
>> +     */
>> +    protected void setUp() throws Exception {
>> +        super.setUp();
>> +        this.handler = new JAXBWrapperHandler();
>> +    }
>> +
>> +    public void testCreate() {
>> +        // ElementInfo element = new ElementInfo(ELEMENT, null);
>> +        // JAXBElement<?> jaxbElement = handler.create(element, null);
>> +    }
>> +
>> +    public void testSetChild() {
>> +        ObjectFactory factory = new ObjectFactory();
>> +        PurchaseOrderType po = factory.createPurchaseOrderType();
>> +        JAXBElement<PurchaseOrderType> wrapper =
>> factory.createPurchaseOrder(po);
>> +        handler.setChild(wrapper, 2, null, "Comment");
>> +    }
>> +
>> +    public void testGetChildren() {
>> +        ObjectFactory factory = new ObjectFactory();
>> +        PurchaseOrderType po = factory.createPurchaseOrderType();
>> +        po.setComment("Comment");
>> +        JAXBElement<PurchaseOrderType> wrapper =
>> factory.createPurchaseOrder(po);
>> +        List children = handler.getChildren(wrapper);
>> +        assertNotNull(children);
>> +        assertEquals(4, children.size());
>> +        assertEquals("Comment", children.get(2));
>> +        assertNull(children.get(0));
>> +    }
>> +}
>>
>> Propchange:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>>
>> ------------------------------------------------------------------------------
>>     svn:eol-style = native
>>
>> Propchange:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandlerTestCase.java
>>
>> ------------------------------------------------------------------------------
>>     svn:keywords = Rev Date
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
>> Thu Feb 22 13:57:46 2007
>> @@ -18,8 +18,6 @@
>>   */
>> package org.apache.tuscany.databinding.sdo;
>>
>> -import static
>> org.apache.tuscany.databinding.sdo.SDODataBinding.ROOT_ELEMENT;
>> -
>> import javax.xml.namespace.QName;
>>
>> import org.apache.tuscany.spi.databinding.PullTransformer;
>> @@ -41,13 +39,8 @@
>>          try {
>>              HelperContext helperContext =
>> SDODataTypeHelper.getHelperContext(context);
>>              XMLHelper xmlHelper = helperContext.getXMLHelper();
>> -            Object logicalType = context.getSourceDataType
>> ().getLogical();
>> -            if (logicalType instanceof QName) {
>> -                QName elementName = (QName)logicalType;
>> -                return xmlHelper.save(source, 
>> elementName.getNamespaceURI(),
>> elementName.getLocalPart());
>> -            } else {
>> -                return xmlHelper.save(source,
>> ROOT_ELEMENT.getNamespaceURI(), ROOT_ELEMENT.getLocalPart());
>> -            }
>> +            QName elementName = SDODataTypeHelper.getElement(
>> context.getSourceDataType());
>> +            return xmlHelper.save(source, elementName.getNamespaceURI(),
>> elementName.getLocalPart());
>>          } catch (Exception e) {
>>              throw new TransformationException(e);
>>          }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
>> Thu Feb 22 13:57:46 2007
>> @@ -44,9 +44,7 @@
>>          try {
>>              HelperContext helperContext =
>> SDODataTypeHelper.getHelperContext(context);
>>              XMLStreamHelper streamHelper = 
>> SDOUtil.createXMLStreamHelper(
>> helperContext.getTypeHelper());
>> -            Object logicalType = context.getSourceDataType
>> ().getLogical();
>> -            QName elementName =
>> -                    (logicalType instanceof QName) ? (QName) logicalType
>> : SDODataBinding.ROOT_ELEMENT;
>> +            QName elementName = SDODataTypeHelper.getElement(
>> context.getSourceDataType());
>>              XMLHelper xmlHelper = helperContext.getXMLHelper();
>>              XMLDocument document =
>>                      xmlHelper.createDocument(source,
>> elementName.getNamespaceURI(), elementName.getLocalPart());
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,8 @@
>>
>> package org.apache.tuscany.databinding.sdo;
>>
>> +import java.lang.annotation.Annotation;
>> +
>> import javax.xml.namespace.QName;
>>
>> import org.apache.tuscany.spi.databinding.ExceptionHandler;
>> @@ -52,30 +54,33 @@
>>      }
>>
>>      @Override
>> -    public DataType introspect(Class<?> javaType) {
>> -        if (javaType == null) {
>> -            return null;
>> +    public boolean introspect(DataType dataType, Annotation[]
>> annotations) {
>> +        Object physical = dataType.getPhysical();
>> +        if (!(physical instanceof Class)) {
>> +            return false;
>>          }
>> +        Class javaType = (Class)physical;
>>          HelperContext context = HelperProvider.getDefaultContext();
>>          // FIXME: Need a better to test dynamic SDO
>>          if (DataObject.class.isAssignableFrom(javaType)) {
>>              // Dynamic SDO
>> -            return new DataType<QName>(getName(), javaType, null);
>> +            dataType.setLogical(DataObject.class);
>> +            return true;
>>          }
>>          // FIXME: We need to access HelperContext
>>          Type type = context.getTypeHelper().getType(javaType);
>>          if (type == null) {
>> -            return null;
>> +            return false;
>>          }
>>          if (type.isDataType()) {
>>              // FIXME: Ignore simple types?
>> -            return null;
>> +            return false;
>>          }
>>          String namespace = type.getURI();
>>          String name = context.getXSDHelper().getLocalName(type);
>>          QName xmlType = new QName(namespace, name);
>> -        DataType<QName> dataType = new DataType<QName>(getName(),
>> javaType, xmlType);
>> -        return dataType;
>> +        dataType.setLogical(xmlType);
>> +        return true;
>>      }
>>
>>      @Override
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataTypeHelper.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,11 +19,15 @@
>>
>> package org.apache.tuscany.databinding.sdo;
>>
>> +import javax.xml.namespace.QName;
>> +
>> import org.apache.tuscany.databinding.sdo.ImportSDOLoader.SDOType;
>> import org.apache.tuscany.sdo.util.SDOUtil;
>> import org.apache.tuscany.spi.component.CompositeComponent;
>> import org.apache.tuscany.spi.databinding.TransformationContext;
>> import org.apache.tuscany.spi.deployer.DeploymentContext;
>> +import org.apache.tuscany.spi.idl.ElementInfo;
>> +import org.apache.tuscany.spi.model.DataType;
>>
>> import commonj.sdo.helper.HelperContext;
>> import commonj.sdo.impl.HelperProvider;
>> @@ -53,11 +57,12 @@
>>              return helperContext;
>>          }
>>      }
>> -
>> +
>>      public static HelperContext getHelperContext(DeploymentContext
>> deploymentContext) {
>>          HelperContext helperContext = null;
>>          if (deploymentContext != null && deploymentContext.getParent() 
>> !=
>> null) {
>> -            // HACK: Retrieve the SDO HelperContext from the
>> CompositeComponent extensions
>> +            // HACK: Retrieve the SDO HelperContext from the
>> CompositeComponent
>> +            // extensions
>>              helperContext =
>> (HelperContext)deploymentContext.getParent().getExtension(
>> HelperContext.class.getName());
>>              if (helperContext == null) {
>>                  helperContext = SDOUtil.createHelperContext();
>> @@ -68,12 +73,21 @@
>>          if (helperContext == null) {
>>              helperContext = getDefaultHelperContext();
>>          }
>> -
>> +
>>          return helperContext;
>>      }
>> -
>> +
>>      protected static HelperContext getDefaultHelperContext() {
>>          // SDOUtil.createHelperContext();
>>          return HelperProvider.getDefaultContext();
>> +    }
>> +
>> +    public static QName getElement(DataType<?> dataType) {
>> +        ElementInfo info = (ElementInfo)dataType.getMetadata().get(
>> ElementInfo.class.getName());
>> +        if (info == null) {
>> +            return SDODataBinding.ROOT_ELEMENT;
>> +        } else {
>> +            return info.getQName();
>> +        }
>>      }
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
>> Thu Feb 22 13:57:46 2007
>> @@ -19,6 +19,9 @@
>>
>> package org.apache.tuscany.databinding.sdo;
>>
>> +import java.util.ArrayList;
>> +import java.util.List;
>> +
>> import javax.xml.namespace.QName;
>>
>> import org.apache.tuscany.spi.databinding.TransformationContext;
>> @@ -50,16 +53,6 @@
>>      }
>>
>>      /**
>> -     * @see org.apache.tuscany.spi.databinding.WrapperHandler#getChild(
>> java.lang.Object,
>> -     *      int, ElementInfo)
>> -     */
>> -    public Object getChild(Object wrapper, int i, ElementInfo element) {
>> -        DataObject wrapperDO =
>> -            (wrapper instanceof XMLDocument) ?
>> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>> -        return wrapperDO.get(element.getQName().getLocalPart());
>> -    }
>> -
>> -    /**
>>       * @see org.apache.tuscany.spi.databinding.WrapperHandler#setChild(
>> java.lang.Object,
>>       *      int, ElementInfo, java.lang.Object)
>>       */
>> @@ -67,6 +60,17 @@
>>          DataObject wrapperDO =
>>              (wrapper instanceof XMLDocument) ?
>> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>>          wrapperDO.set(childElement.getQName().getLocalPart(), value);
>> +    }
>> +
>> +    public List getChildren(Object wrapper) {
>> +        DataObject wrapperDO =
>> +            (wrapper instanceof XMLDocument) ?
>> ((XMLDocument)wrapper).getRootObject() : (DataObject)wrapper;
>> +        List properties = wrapperDO.getInstanceProperties();
>> +        List<Object> elements = new ArrayList<Object>();
>> +        for (int i = 0; i < properties.size(); i++) {
>> +            elements.add(wrapperDO.get(i));
>> +        }
>> +        return elements;
>>      }
>>
>> }
>>
>> Modified:
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java?view=diff&rev=510671&r1=510670&r2=510671
>>
>> ==============================================================================
>> ---
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> (original)
>> +++
>> incubator/tuscany/branches/sca-java-integration/sca/services/databinding/databinding-sdo/src/test/java/org/apache/tuscany/databinding/sdo/SDODataBindingTestCase.java
>> Thu Feb 22 13:57:46 2007
>> @@ -53,15 +53,21 @@
>>      }
>>
>>      public final void testIntrospect() {
>> -        DataType<?> dataType = binding.introspect(DataObject.class);
>> -        Assert.assertTrue(dataType.getDataBinding().equals(
>> binding.getName()));
>> -        Assert.assertTrue(dataType.getPhysical() == DataObject.class &&
>> dataType.getLogical() == null);
>> -        dataType = binding.introspect(PurchaseOrderType.class);
>> -        Assert.assertEquals(PurchaseOrderType.class, 
>> dataType.getPhysical
>> ());
>> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> "PurchaseOrderType"), dataType.getLogical());
>> -        dataType = binding.introspect(USAddress.class);
>> -        Assert.assertEquals(USAddress.class, dataType.getPhysical());
>> -        Assert.assertEquals(new QName("http://www.example.com/IPO",
>> "USAddress"), dataType.getLogical());
>> +        DataType dataType = new DataType(DataObject.class, null);
>> +        boolean yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertTrue(dataType.getDataBinding().equals(binding.getName()));
>> +        assertTrue(dataType.getPhysical() == DataObject.class &&
>> dataType.getLogical() == DataObject.class);
>> +        dataType = new DataType(PurchaseOrderType.class, null);
>> +        yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertEquals(PurchaseOrderType.class, dataType.getPhysical());
>> +        assertEquals(new QName("http://www.example.com/IPO",
>> "PurchaseOrderType"), dataType.getLogical());
>> +        dataType = new DataType(USAddress.class, null);
>> +        yes = binding.introspect(dataType, null);
>> +        assertTrue(yes);
>> +        assertEquals(USAddress.class, dataType.getPhysical());
>> +        assertEquals(new QName("http://www.example.com/IPO",
>> "USAddress"), dataType.getLogical());
>>      }
>>
>>      public final void testCopyRoot() {
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
>> For additional commands, e-mail: tuscany-commits-help@ws.apache.org
>>
>>
> 


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