You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by wj...@apache.org on 2008/08/16 18:18:01 UTC

svn commit: r686519 [1/2] - in /tuscany/java/sca/modules: binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/ binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/ binding-corba-runtime/src/...

Author: wjaniszewski
Date: Sat Aug 16 09:18:00 2008
New Revision: 686519

URL: http://svn.apache.org/viewvc?rev=686519&view=rev
Log:
Added support for CORBA arrays

Added:
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/AnnotationAttributes.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/meta/
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/meta/CorbaArray.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHelper.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHolder.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsOperations.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHelper.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHolder.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHelper.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHolder.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsImplBase.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsStub.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/ArraysTestStruct.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/InvalidCorbaArray.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/servants/ArraysUnionsServant.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/servants/ArraysUnionsTuscanyServant.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/resources/arrays_unions.idl
Modified:
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaInvoker.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaReferenceBindingProvider.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/ComponentInvocationProxy.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/DynaCorbaServant.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeCreator.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeNode.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/util/ArrayTypeHelper.java
    tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/OperationMapper.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/OperationMappingTestCase.java
    tuscany/java/sca/modules/binding-corba-runtime/src/test/resources/enums.idl
    tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAInvocationProxy.java

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaInvoker.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaInvoker.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaInvoker.java Sat Aug 16 09:18:00 2008
@@ -19,15 +19,19 @@
 
 package org.apache.tuscany.sca.binding.corba.impl;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.util.Map;
 
 import org.apache.tuscany.sca.binding.corba.impl.exceptions.RequestConfigurationException;
 import org.apache.tuscany.sca.binding.corba.impl.reference.DynaCorbaRequest;
 import org.apache.tuscany.sca.binding.corba.impl.reference.DynaCorbaResponse;
+import org.apache.tuscany.sca.binding.corba.impl.util.OperationMapper;
 import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
 import org.omg.CORBA.Object;
 import org.osoa.sca.ServiceRuntimeException;
 
@@ -39,11 +43,13 @@
     private Object remoteObject;
     private Class<?> referenceClass;
     private Map<Method, String> operationsMap;
+    private Map<Operation, Method> operationMethodMapping;
 
-    public CorbaInvoker(Object remoteObject, Class<?> referenceClass, Map<Method, String> operationsMap) {
+    public CorbaInvoker(RuntimeComponentReference reference, Object remoteObject, Class<?> referenceClass, Map<Method, String> operationsMap) {
         this.remoteObject = remoteObject;
         this.referenceClass = referenceClass;
         this.operationsMap = operationsMap;
+        this.operationMethodMapping = OperationMapper.mapOperationToMethod(reference.getInterfaceContract().getInterface().getOperations(), referenceClass);
     }
 
     /**
@@ -55,12 +61,14 @@
             request.setReferenceClass(referenceClass);
             request.setOperationsMap(operationsMap);
             if (msg.getOperation().getOutputType() != null) {
-                request.setOutputType(msg.getOperation().getOutputType().getPhysical());
+                Annotation[] notes = operationMethodMapping.get(msg.getOperation()).getAnnotations();
+                request.setOutputType(msg.getOperation().getOutputType().getPhysical(), notes);
             }
             java.lang.Object[] args = msg.getBody();
             if (args != null) {
+                Annotation[][] notes = operationMethodMapping.get(msg.getOperation()).getParameterAnnotations();
                 for (int i = 0; i < args.length; i++) {
-                    request.addArgument(args[i]);
+                    request.addArgument(args[i], notes[i]);
                 }
             }
             if (msg.getOperation().getFaultTypes() != null) {

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaReferenceBindingProvider.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaReferenceBindingProvider.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaReferenceBindingProvider.java Sat Aug 16 09:18:00 2008
@@ -50,7 +50,7 @@
         this.host = host;
         this.reference = reference;
         this.referenceClass = ((JavaInterface)reference.getInterfaceContract().getInterface()).getJavaClass();
-        operationsMap = OperationMapper.mapMethodToOperation(referenceClass);
+        operationsMap = OperationMapper.mapMethodToOperationName(referenceClass);
     }
 
     /**
@@ -61,7 +61,7 @@
             if (remoteObject == null) {
                 remoteObject = host.lookup(binding.getCorbaname());    
             }
-            return new CorbaInvoker(remoteObject, referenceClass, operationsMap);
+            return new CorbaInvoker(reference, remoteObject, referenceClass, operationsMap);
         } catch (Exception e) {
         }
         return null;

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java Sat Aug 16 09:18:00 2008
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.binding.corba.impl.reference;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -85,12 +86,21 @@
     }
 
     /**
-     * Adds operation argument - stores arguments and caches its TypeTree
+     * Adds operation argument - stores arguments and caches its TypeTree. Annotations will be set to null by default.
      * 
      * @param argument
      */
     public void addArgument(java.lang.Object argument) throws RequestConfigurationException {
-        TypeTree tree = TypeTreeCreator.createTypeTree(argument.getClass());
+        addArgument(argument, null);
+    }
+    
+    /**
+     * Adds operation argument - stores arguments and caches its TypeTree
+     * 
+     * @param argument
+     */
+    public void addArgument(java.lang.Object argument, Annotation[] notes) throws RequestConfigurationException {
+        TypeTree tree = TypeTreeCreator.createTypeTree(argument.getClass(), notes);
         argumentsTypes.add(tree);
         arguments.add(argument);
     }
@@ -109,12 +119,21 @@
     }
 
     /**
-     * Sets return type for operation
+     * Sets return type for operation. Annotations will be set to null by default.
      * 
      * @param forClass
      */
     public void setOutputType(Class<?> forClass) throws RequestConfigurationException {
-        returnTree = TypeTreeCreator.createTypeTree(forClass);
+        setOutputType(forClass, null);
+    }
+    
+    /**
+     * Sets return type for operation
+     * 
+     * @param forClass
+     */
+    public void setOutputType(Class<?> forClass, Annotation[] notes) throws RequestConfigurationException {
+        returnTree = TypeTreeCreator.createTypeTree(forClass, notes);
     }
 
     /**
@@ -123,7 +142,7 @@
      * @param forClass
      */
     public void addExceptionType(Class<?> forClass) throws RequestConfigurationException {
-        TypeTree tree = TypeTreeCreator.createTypeTree(forClass);
+        TypeTree tree = TypeTreeCreator.createTypeTree(forClass, null);
         String exceptionId = Utils.getTypeId(forClass);
         exceptions.put(exceptionId, tree);
     }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/ComponentInvocationProxy.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/ComponentInvocationProxy.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/ComponentInvocationProxy.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/ComponentInvocationProxy.java Sat Aug 16 09:18:00 2008
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.binding.corba.impl.service;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -42,58 +43,21 @@
 public class ComponentInvocationProxy implements InvocationProxy {
 
     private RuntimeWire wire;
-    private RuntimeComponentService service;
     private Map<Method, Operation> methodOperationMapping;
+    private Map<Operation, Method> operationMethodMapping;
     private Map<String, Method> operationsMap;
     private Map<Operation, OperationTypes> operationsCache = new HashMap<Operation, OperationTypes>();
-    private Class<?> javaClass;
 
     public ComponentInvocationProxy(RuntimeComponentService service, RuntimeWire wire, Class<?> javaClass)
         throws RequestConfigurationException {
         this.wire = wire;
-        this.service = service;
-        this.javaClass = javaClass;
-        operationsMap = OperationMapper.mapOperationToMethod(javaClass);
-        createMethod2OperationMapping();
+        operationsMap = OperationMapper.mapOperationNameToMethod(javaClass);
+        operationMethodMapping = OperationMapper.mapOperationToMethod(service.getInterfaceContract().getInterface().getOperations(), javaClass);
+        methodOperationMapping = OperationMapper.mapMethodToOperation(service.getInterfaceContract().getInterface().getOperations(), javaClass);
         cacheOperationTypes(service.getInterfaceContract().getInterface().getOperations());
     }
 
     /**
-     * Maps Java methods to Tuscany operations
-     */
-    @SuppressWarnings("unchecked")
-    private void createMethod2OperationMapping() {
-        // for every operation find all methods with the same name, then
-        // compare operations and methods parameters
-        this.methodOperationMapping = new HashMap<Method, Operation>();
-        for (Operation operation : service.getInterfaceContract().getInterface().getOperations()) {
-            List<DataType> inputTypes = operation.getInputType().getLogical();
-            Method[] methods = javaClass.getMethods();
-            for (int i = 0; i < methods.length; i++) {
-                if (methods[i].getName().equals(operation.getName()) && inputTypes.size() == methods[i]
-                    .getParameterTypes().length) {
-                    Class<?>[] parameterTypes = methods[i].getParameterTypes();
-                    int j = 0;
-                    boolean parameterMatch = true;
-                    for (DataType dataType : inputTypes) {
-                        if (!dataType.getPhysical().equals(parameterTypes[j])) {
-                            parameterMatch = false;
-                            break;
-                        }
-                        j++;
-                    }
-                    if (parameterMatch) {
-                        // match found
-                        methodOperationMapping.put(methods[i], operation);
-                        break;
-                    }
-                }
-            }
-
-        }
-    }
-
-    /**
      * Caches TypeTree for every operation in backed component
      * 
      * @param operations
@@ -107,16 +71,21 @@
                 // cache output type tree
                 if (operation.getOutputType() != null && operation.getOutputType().getPhysical() != null
                     && !operation.getOutputType().getPhysical().equals(void.class)) {
+                    Annotation[] notes = operationMethodMapping.get(operation).getAnnotations();
                     TypeTree outputType =
-                        TypeTreeCreator.createTypeTree(operation.getOutputType().getPhysical());
+                        TypeTreeCreator.createTypeTree(operation.getOutputType().getPhysical(), notes);
                     operationTypes.setOutputType(outputType);
                 }
                 // cache input types trees
                 if (operation.getInputType() != null) {
+                    Method method = operationMethodMapping.get(operation);
+                    Annotation[][] notes = method.getParameterAnnotations();
+                    int i = 0;
                     for (DataType<List<DataType<?>>> type : operation.getInputType().getLogical()) {
                         Class<?> forClass = type.getPhysical();
-                        TypeTree inputType = TypeTreeCreator.createTypeTree(forClass);
+                        TypeTree inputType = TypeTreeCreator.createTypeTree(forClass, notes[i]);
                         inputInstances.add(inputType);
+                        i++;
                     }
 
                 }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/DynaCorbaServant.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/DynaCorbaServant.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/DynaCorbaServant.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/service/DynaCorbaServant.java Sat Aug 16 09:18:00 2008
@@ -103,7 +103,7 @@
                 try {
                     OutputStream out = rh.createExceptionReply();
                     Class<?> exceptionClass = ie.getTargetException().getClass();
-                    TypeTree tree = TypeTreeCreator.createTypeTree(exceptionClass);
+                    TypeTree tree = TypeTreeCreator.createTypeTree(exceptionClass, null);
                     String exceptionId = Utils.getTypeId(exceptionClass);
                     out.write_string(exceptionId);
                     TypeHelpersProxy.write(tree.getRootNode(), out, ie.getTargetException());

Added: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/AnnotationAttributes.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/AnnotationAttributes.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/AnnotationAttributes.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/AnnotationAttributes.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,46 @@
+/*
+ * 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.sca.binding.corba.impl.types;
+
+/**
+ * Holds information retrieved from objects annotations
+ */
+public class AnnotationAttributes {
+    
+    private boolean corbaArray;
+    private int[] corbaArrayLength;
+
+    public boolean isCorbaArray() {
+        return corbaArray;
+    }
+
+    public void setCorbaArray(boolean isCorbaArray) {
+        this.corbaArray = isCorbaArray;
+    }
+
+    public int[] getCorbaArrayLength() {
+        return corbaArrayLength;
+    }
+
+    public void setCorbaArrayLength(int[] corbaArrayLength) {
+        this.corbaArrayLength = corbaArrayLength;
+    }
+    
+}

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeCreator.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeCreator.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeCreator.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeCreator.java Sat Aug 16 09:18:00 2008
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.binding.corba.impl.types;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -30,6 +31,7 @@
 import java.util.Set;
 
 import org.apache.tuscany.sca.binding.corba.impl.exceptions.RequestConfigurationException;
+import org.apache.tuscany.sca.binding.corba.meta.CorbaArray;
 
 /**
  * @version $Rev$ $Date$
@@ -134,16 +136,43 @@
     }
 
     /**
+     * Return given array without first element
+     * @param array
+     * @return
+     */
+    private static int[] removeFirstElement(int[] array) {
+        int[] result = new int[array.length - 1];
+        System.arraycopy(array, 1, result, 0, result.length);
+        return result;
+    }
+
+    /**
+     * Converts objects annotations to structure which will be used by this class 
+     * @param notes
+     * @return
+     */
+    private static AnnotationAttributes createAnnotationAttributes(Annotation[] notes) {
+        AnnotationAttributes attrs = new AnnotationAttributes();
+        for (int i = 0; notes != null && i < notes.length; i++) {
+            if (notes[i].annotationType().equals(CorbaArray.class)) {
+                attrs.setCorbaArray(true);
+                attrs.setCorbaArrayLength(((CorbaArray)notes[i]).value());
+            }
+        }
+        return attrs;
+    }
+
+    /**
      * Creates tree for given type.
      * 
      * @param forClass
      * @return type tree
      */
-    public static TypeTree createTypeTree(Class<?> forClass)
-        throws RequestConfigurationException {
+    public static TypeTree createTypeTree(Class<?> forClass, Annotation[] notes) throws RequestConfigurationException {
         TypeTree tree = new TypeTree();
         TypeTreeNode rootNode = null;
-        rootNode = inspectClassHierarchy(forClass, tree);
+        AnnotationAttributes attrs = createAnnotationAttributes(notes);
+        rootNode = inspectClassHierarchy(forClass, attrs, tree);
         tree.setRootNode(rootNode);
         return tree;
 
@@ -156,32 +185,37 @@
      * @param tree
      * @return
      */
-    private static TypeTreeNode inspectClassHierarchy(Class<?> forClass, TypeTree tree)
+    private static TypeTreeNode inspectClassHierarchy(Class<?> forClass, AnnotationAttributes attributes, TypeTree tree)
         throws RequestConfigurationException {
-        
+
         TypeTreeNode node = null;
-        node = createTypeNode(forClass);
-        
+        node = createTypeNode(forClass, attributes);
+
         NodeType nodeType = node.getNodeType();
         TypeTreeNode[] children = null;
 
         if (nodeType.equals(NodeType.primitive)) {
             // stop condition for recurrent method
         } else if (nodeType.equals(NodeType.array)) {
-            // similar to sequence, but with fixed array length
-            // TODO: determine how array length will be declared
+            Class<?> reduced = reduceArrayDimension(node.getJavaClass());
+            children = new TypeTreeNode[1];
+            int[] newLengths = removeFirstElement(attributes.getCorbaArrayLength());
+            attributes.setCorbaArrayLength(newLengths);
+            children[0] = inspectClassHierarchy(reduced, attributes, tree);
         } else if (nodeType.equals(NodeType.sequence)) {
             // reducing sequence dimension
             Class<?> reduced = reduceArrayDimension(node.getJavaClass());
             children = new TypeTreeNode[1];
-            children[0] = inspectClassHierarchy(reduced, tree);
+            children[0] = inspectClassHierarchy(reduced, attributes, tree);
+            // System.arraycopy(src, srcPos, dest, destPos, length)
         } else if (nodeType.equals(NodeType.struct) || nodeType.equals(NodeType.exception)) {
             // inspect types for every structure member
             Field[] fields = node.getJavaClass().getFields();
             children = new TypeTreeNode[fields.length];
             for (int i = 0; i < fields.length; i++) {
                 Class<?> field = fields[i].getType();
-                TypeTreeNode child = inspectClassHierarchy(field, tree);
+                AnnotationAttributes fAttrs = createAnnotationAttributes(fields[i].getAnnotations());
+                TypeTreeNode child = inspectClassHierarchy(field, fAttrs, tree);
                 child.setName(fields[i].getName());
                 children[i] = child;
             }
@@ -204,11 +238,24 @@
      * @return node
      * @throws RequestConfigurationException
      */
-    private static TypeTreeNode createTypeNode(Class<?> forClass) throws RequestConfigurationException {
+    private static TypeTreeNode createTypeNode(Class<?> forClass, AnnotationAttributes attributes)
+        throws RequestConfigurationException {
         TypeTreeNode node = new TypeTreeNode();
-        if (forClass.isArray()) {
+        if (forClass.isArray() && !attributes.isCorbaArray()) {
             node.setNodeType(NodeType.sequence);
             node.setJavaClass(forClass);
+        } else if (forClass.isArray() && attributes.isCorbaArray()) {
+            node.setNodeType(NodeType.array);
+            node.setJavaClass(forClass);
+            try {
+                // set the actual array size for further use by ArrayTypeHelper
+                node.setAttributes(attributes.getCorbaArrayLength()[0]);
+            } catch (ArrayIndexOutOfBoundsException e) {
+                RequestConfigurationException exc =
+                    new RequestConfigurationException("Annotated array size doesn't match declared arrays size");
+                throw exc;
+            }
+
         } else if (primitives.contains(forClass)) {
             node.setNodeType(NodeType.primitive);
             node.setJavaClass(forClass);
@@ -234,7 +281,7 @@
         }
         return node;
     }
-    
+
     /**
      * Tells whether given class is structure
      * 
@@ -350,4 +397,5 @@
         } while (forClass != null && !forClass.equals(Object.class));
         return false;
     }
+
 }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeNode.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeNode.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeNode.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/TypeTreeNode.java Sat Aug 16 09:18:00 2008
@@ -30,6 +30,7 @@
     private TypeTreeNode[] children;
     private Class<?> javaClass;
     private String name;
+    private Object attributes;
 
     public String getName() {
         return name;
@@ -63,4 +64,12 @@
         this.javaClass = javaClass;
     }
 
+    public Object getAttributes() {
+        return attributes;
+    }
+
+    public void setAttributes(Object attributes) {
+        this.attributes = attributes;
+    }
+
 }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/util/ArrayTypeHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/util/ArrayTypeHelper.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/util/ArrayTypeHelper.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/types/util/ArrayTypeHelper.java Sat Aug 16 09:18:00 2008
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.binding.corba.impl.types.util;
 
+import java.lang.reflect.Array;
+
 import org.apache.tuscany.sca.binding.corba.impl.types.TypeTreeNode;
 import org.omg.CORBA.portable.InputStream;
 import org.omg.CORBA.portable.OutputStream;
@@ -29,13 +31,23 @@
 public class ArrayTypeHelper implements TypeHelper {
 
     public Object read(TypeTreeNode node, InputStream is) {
-        // TODO Auto-generated method stub
-        return null;
+        Object array = null;
+        try {
+            int size = (Integer)node.getAttributes();
+            array = Array.newInstance(node.getChildren()[0].getJavaClass(), size);
+            for (int i = 0; i < size; i++) {
+                Array.set(array, i, TypeHelpersProxy.read(node.getChildren()[0], is));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return array;
     }
 
     public void write(TypeTreeNode node, OutputStream os, Object data) {
-        // TODO Auto-generated method stub
-
+        for (int i = 0; i < (Integer)node.getAttributes(); i++) {
+            TypeHelpersProxy.write(node.getChildren()[0], os, Array.get(data, i));
+        }
     }
 
 }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/OperationMapper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/OperationMapper.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/OperationMapper.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/OperationMapper.java Sat Aug 16 09:18:00 2008
@@ -30,6 +30,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.omg.CORBA.portable.IDLEntity;
 
 /**
@@ -52,7 +54,7 @@
         }
 
         return allInterfaces;
-    }
+    }    
     
     /**
      * Maps Java methods to operation names
@@ -60,7 +62,7 @@
      * @return
      */
     @SuppressWarnings("unchecked")
-    public static Map<Method, String> mapMethodToOperation(Class<?> intfClass) {
+    public static Map<Method, String> mapMethodToOperationName(Class<?> intfClass) {
         return iiopMap(intfClass, false);
     }
 
@@ -70,7 +72,7 @@
      * @return
      */
     @SuppressWarnings("unchecked")
-    public static Map<String, Method> mapOperationToMethod(Class<?> intfClass) {
+    public static Map<String, Method> mapOperationNameToMethod(Class<?> intfClass) {
         return iiopMap(intfClass, true);
     }
 
@@ -524,4 +526,53 @@
         keywords.add("wstring");
     }
 
+    @SuppressWarnings("unchecked")
+    public static Map<Operation, Method> mapOperationToMethod(List<Operation> operations, Class<?> forClass) {
+        return (Map<Operation, Method>)createMethod2OperationMapping(operations, forClass, false);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public static Map<Method, Operation> mapMethodToOperation(List<Operation> operations, Class<?> forClass) {
+        return (Map<Method, Operation>)createMethod2OperationMapping(operations, forClass, true);
+    }
+    
+    /**
+     * Maps Java methods to Tuscany operations
+     */
+    @SuppressWarnings("unchecked")
+    private static Map createMethod2OperationMapping(List<Operation> operations, Class<?> forClass, boolean method2operation) {
+        // for every operation find all methods with the same name, then
+        // compare operations and methods parameters
+        Map mapping = new HashMap();
+        for (Operation operation : operations) {
+            List<DataType> inputTypes = operation.getInputType().getLogical();
+            Method[] methods = forClass.getMethods();
+            for (int i = 0; i < methods.length; i++) {
+                if (methods[i].getName().equals(operation.getName()) && inputTypes.size() == methods[i]
+                    .getParameterTypes().length) {
+                    Class<?>[] parameterTypes = methods[i].getParameterTypes();
+                    int j = 0;
+                    boolean parameterMatch = true;
+                    for (DataType dataType : inputTypes) {
+                        if (!dataType.getPhysical().equals(parameterTypes[j])) {
+                            parameterMatch = false;
+                            break;
+                        }
+                        j++;
+                    }
+                    if (parameterMatch) {
+                        // match found
+                        if (method2operation) {
+                            mapping.put(methods[i], operation);
+                        } else {
+                            mapping.put(operation, methods[i]);
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        return mapping;
+    }
+    
 }

Added: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/meta/CorbaArray.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/meta/CorbaArray.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/meta/CorbaArray.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/meta/CorbaArray.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,34 @@
+/*
+ * 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.sca.binding.corba.meta;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @version $Rev$ $Date$
+ * Declares CORBA arrays lengths
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CorbaArray {
+
+    int[] value();
+    
+}

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java Sat Aug 16 09:18:00 2008
@@ -20,6 +20,7 @@
 package org.apache.tuscany.sca.binding.corba.testing;
 
 import static junit.framework.Assert.fail;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Array;
@@ -34,6 +35,9 @@
 import org.apache.tuscany.sca.binding.corba.impl.service.DynaCorbaServant;
 import org.apache.tuscany.sca.binding.corba.impl.service.InvocationProxy;
 import org.apache.tuscany.sca.binding.corba.impl.types.util.Utils;
+import org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests;
+import org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTestsHelper;
+import org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct;
 import org.apache.tuscany.sca.binding.corba.testing.enums.Color;
 import org.apache.tuscany.sca.binding.corba.testing.enums.EnumManager;
 import org.apache.tuscany.sca.binding.corba.testing.enums.EnumManagerHelper;
@@ -51,6 +55,7 @@
 import org.apache.tuscany.sca.binding.corba.testing.generated.TestObjectHelper;
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.NonCorbaException;
 import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysSetterServant;
+import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysUnionsTuscanyServant;
 import org.apache.tuscany.sca.binding.corba.testing.servants.CalcServant;
 import org.apache.tuscany.sca.binding.corba.testing.servants.EnumManagerServant;
 import org.apache.tuscany.sca.binding.corba.testing.servants.InvalidTestObjectServant;
@@ -502,5 +507,55 @@
             }
         }
     }
+    
+    @Test
+    public void test_arraysPassing() {
+        try {
+            ArraysUnionsTuscanyServant arraysUnions = new ArraysUnionsTuscanyServant();
+            TestRuntimeComponentService service = new TestRuntimeComponentService(arraysUnions);
+            Class<?> javaClass = ((JavaInterface)service.getInterfaceContract().getInterface()).getJavaClass();
+            InvocationProxy proxy = new ComponentInvocationProxy(service, service.getRuntimeWire(null), javaClass);
+            DynaCorbaServant servant = new DynaCorbaServant(proxy, Utils.getTypeId(javaClass));
+            String[] ids = new String[] {"IDL:org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests:1.0"};
+            servant.setIds(ids);
+            bindServant(servant, "ArraysUnions");
+            Object reference = bindReference("ArraysUnions");
+            ArraysUnionsTests objRef = ArraysUnionsTestsHelper.narrow(reference);
+            String[][] stringArray = {{"Hello", "World"}, {"Hi", "Again"}};
+            String[][] result = objRef.passStringArray(stringArray);
+            for (int i = 0; i < stringArray.length; i++) {
+                for (int j = 0; j < stringArray[i].length; j++) {
+                    assertEquals(stringArray[i][j], result[i][j]);
+                }
+            }
+            TestStruct struct = new TestStruct();
+            String[] field1 = {"Hello", "World"};
+            int[][] field2 = { {4, 2, 2, 5}, {6, 12, 5, 8}};
+            float[][][] field3 = { { {2, 6}, {2, 7}, {9, 3}, {4, 6}}, { {3, 7}, {6, 6}, {3, 5}, {6, 2}}};
+            struct.oneDimArray = field1;
+            struct.twoDimArray = field2;
+            struct.threeDimArray = field3;
+            
+            TestStruct structResult = objRef.passTestStruct(struct);
+            for (int i = 0; i < struct.oneDimArray.length; i++) {
+                assertEquals(struct.oneDimArray[i], structResult.oneDimArray[i]);
+            }
+            for (int i = 0; i < struct.twoDimArray.length; i++) {
+                for (int j = 0; j < struct.twoDimArray[i].length; j++) {
+                    assertEquals(struct.twoDimArray[i][j], structResult.twoDimArray[i][j]);
+                }
+            }
+            for (int i = 0; i < struct.threeDimArray.length; i++) {
+                for (int j = 0; j < struct.threeDimArray[i].length; j++) {
+                    for (int k = 0; k < struct.threeDimArray[i][j].length; k++) {
+                        assertEquals(struct.threeDimArray[i][j][k], structResult.threeDimArray[i][j][k]);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
 
 }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java Sat Aug 16 09:18:00 2008
@@ -24,6 +24,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Array;
 
 import junit.framework.Assert;
@@ -37,7 +38,9 @@
 import org.apache.tuscany.sca.binding.corba.testing.exceptions.CalcPackage.NotSupported;
 import org.apache.tuscany.sca.binding.corba.testing.generated.SimpleStruct;
 import org.apache.tuscany.sca.binding.corba.testing.generated.SomeStruct;
+import org.apache.tuscany.sca.binding.corba.testing.hierarchy.ArraysTestStruct;
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.DummyObject;
+import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidCorbaArray;
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidEnum1;
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidEnum2;
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidEnum3;
@@ -45,6 +48,8 @@
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidStruct2;
 import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidStruct3;
 import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysSetterServant;
+import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysUnionsServant;
+import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysUnionsTuscanyServant;
 import org.apache.tuscany.sca.binding.corba.testing.servants.CalcServant;
 import org.apache.tuscany.sca.binding.corba.testing.servants.EnumManagerServant;
 import org.apache.tuscany.sca.binding.corba.testing.servants.ObjectManagerServant;
@@ -66,7 +71,8 @@
 
 /**
  * @version $Rev$ $Date$
- * Tests API for dynamic CORBA requests. Tests handling various Java types.
+ *          Tests API for dynamic CORBA requests. Tests handling various Java
+ *          types.
  */
 public class CorbaTypesTestCase {
     private static TransientNameServer server;
@@ -78,6 +84,7 @@
     private static Object refCalcObject;
     private static Object refObjectManager;
     private static Object refEnumManager;
+    private static Object refArraysUnions;
 
     /**
      * Spawns tnameserv process (must be in PATH). Initializes test servants and
@@ -109,6 +116,7 @@
             CalcServant calcObject = new CalcServant();
             ObjectManagerServant objectManager = new ObjectManagerServant();
             EnumManagerServant enumManager = new EnumManagerServant();
+            ArraysUnionsServant arraysUnions = new ArraysUnionsServant();
 
             orb.connect(singleSetter);
             orb.connect(arraysSetter);
@@ -140,6 +148,10 @@
             path = new NameComponent[] {nc};
             namingContext.rebind(path, enumManager);
 
+            nc = new NameComponent("ArraysUnions", "");
+            path = new NameComponent[] {nc};
+            namingContext.rebind(path, arraysUnions);
+
             NamingContextExt nce = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
 
             refArraysSetter = nce.resolve(nce.to_name("ArraysSetter"));
@@ -148,6 +160,7 @@
             refCalcObject = nce.resolve(nce.to_name("CalcObject"));
             refObjectManager = nce.resolve(nce.to_name("ObjectManager"));
             refEnumManager = nce.resolve(nce.to_name("EnumManager"));
+            refArraysUnions = nce.resolve(nce.to_name("ArraysUnions"));
 
         } catch (Exception e) {
             e.printStackTrace();
@@ -576,7 +589,7 @@
         } catch (Exception e) {
             assertTrue(e instanceof RequestConfigurationException);
         }
-        
+
         try {
             request = new DynaCorbaRequest(refArraysSetter, "whatever");
             request.setOutputType(SomeStruct.class);
@@ -624,7 +637,7 @@
     }
 
     /**
-     * Tests hanlding passing wrong params
+     * Tests handling passing wrong params
      */
     @Test
     public void test_systemException_BAD_PARAM() {
@@ -644,4 +657,106 @@
         }
     }
 
+    /**
+     * Tests passing CORBA arrays
+     */
+    @Test
+    public void test_arraysPassing() {
+        try {
+            DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray");
+            Annotation[] notes =
+                ArraysUnionsTuscanyServant.class.getMethod("passStringArray", new Class<?>[] {String[][].class})
+                    .getAnnotations();
+            request.setOutputType(String[][].class, notes);
+            String[][] argument = { {"Hello", "World"}, {"Hi", "again"}};
+            request.addArgument(argument, notes);
+            DynaCorbaResponse response = request.invoke();
+            String[][] result = (String[][])response.getContent();
+            for (int i = 0; i < argument.length; i++) {
+                for (int j = 0; j < argument[i].length; j++) {
+                    assertEquals(argument[i][j], result[i][j]);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+
+        try {
+            DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passTestStruct");
+            ArraysTestStruct arg = new ArraysTestStruct();
+            String[] field1 = {"Hello", "World"};
+            arg.field1 = field1;
+            int[][] field2 = { {4, 2, 2, 5}, {6, 12, 5, 8}};
+            arg.field2 = field2;
+            float[][][] field3 = { { {2, 6}, {2, 7}, {9, 3}, {4, 6}}, { {3, 7}, {6, 6}, {3, 5}, {6, 2}}};
+            arg.field3 = field3;
+            request.addArgument(arg);
+            request.setOutputType(ArraysTestStruct.class);
+            DynaCorbaResponse response = request.invoke();
+            ArraysTestStruct result = (ArraysTestStruct)response.getContent();
+            for (int i = 0; i < arg.field1.length; i++) {
+                assertEquals(arg.field1[i], result.field1[i]);
+            }
+            for (int i = 0; i < arg.field2.length; i++) {
+                for (int j = 0; j < arg.field2[i].length; j++) {
+                    assertEquals(arg.field2[i][j], result.field2[i][j]);
+                }
+            }
+            for (int i = 0; i < arg.field2.length; i++) {
+                for (int j = 0; j < arg.field2[i].length; j++) {
+                    for (int k = 0; k < arg.field3[i][j].length; k++) {
+                        assertEquals(arg.field3[i][j][k], result.field3[i][j][k]);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    /**
+     * Tests situation when CORBA array dimension size doesn't match
+     * CORBA array annotation arguments (which sets dimension lengths)
+     */
+    @Test
+    public void test_invalidArrayAnnotationSize() {
+        try {
+            DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray");
+            Annotation[] notes =
+                ArraysUnionsTuscanyServant.class.getMethod("passStringArray", new Class<?>[] {String[][].class})
+                    .getAnnotations();
+            request.setOutputType(String[][][].class, notes);
+            fail();
+        } catch (RequestConfigurationException e) {
+            // expected
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+        try {
+            DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray");
+            Annotation[] notes =
+                ArraysUnionsTuscanyServant.class.getMethod("passStringArray", new Class<?>[] {String[][].class})
+                    .getAnnotations();
+            request.addArgument(new String[0][0][0], notes);
+            fail();
+        } catch (RequestConfigurationException e) {
+            // expected
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+        try {
+            DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray");
+            request.addArgument(new InvalidCorbaArray(), null);
+            fail();
+        } catch (RequestConfigurationException e) {
+            // expected
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
 }

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/OperationMappingTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/OperationMappingTestCase.java?rev=686519&r1=686518&r2=686519&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/OperationMappingTestCase.java (original)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/OperationMappingTestCase.java Sat Aug 16 09:18:00 2008
@@ -38,7 +38,7 @@
      */
     @Test
     public void test_mappingRules() {
-        Map<Method, String> met2op = OperationMapper.mapMethodToOperation(MappingTestInterface.class);
+        Map<Method, String> met2op = OperationMapper.mapMethodToOperationName(MappingTestInterface.class);
         for (Method method : met2op.keySet()) {
             String name = method.getName();
             String translatedName = met2op.get(method);

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,13 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public interface ArraysUnionsTests extends ArraysUnionsTestsOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity 
+{
+} // interface ArraysUnionsTests

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHelper.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHelper.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHelper.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,85 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+abstract public class ArraysUnionsTestsHelper
+{
+  private static String  _id = "IDL:org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests:1.0";
+
+  public static void insert (org.omg.CORBA.Any a, org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests that)
+  {
+    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+    a.type (type ());
+    write (out, that);
+    a.read_value (out.create_input_stream (), type ());
+  }
+
+  public static org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests extract (org.omg.CORBA.Any a)
+  {
+    return read (a.create_input_stream ());
+  }
+
+  private static org.omg.CORBA.TypeCode __typeCode = null;
+  synchronized public static org.omg.CORBA.TypeCode type ()
+  {
+    if (__typeCode == null)
+    {
+      __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTestsHelper.id (), "ArraysUnionsTests");
+    }
+    return __typeCode;
+  }
+
+  public static String id ()
+  {
+    return _id;
+  }
+
+  public static org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests read (org.omg.CORBA.portable.InputStream istream)
+  {
+    return narrow (istream.read_Object (_ArraysUnionsTestsStub.class));
+  }
+
+  public static void write (org.omg.CORBA.portable.OutputStream ostream, org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests value)
+  {
+    ostream.write_Object ((org.omg.CORBA.Object) value);
+  }
+
+  public static org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests narrow (org.omg.CORBA.Object obj)
+  {
+    if (obj == null)
+      return null;
+    else if (obj instanceof org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests)
+      return (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests)obj;
+    else if (!obj._is_a (id ()))
+      throw new org.omg.CORBA.BAD_PARAM ();
+    else
+    {
+      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
+      org.apache.tuscany.sca.binding.corba.testing.arrays_unions._ArraysUnionsTestsStub stub = new org.apache.tuscany.sca.binding.corba.testing.arrays_unions._ArraysUnionsTestsStub ();
+      stub._set_delegate(delegate);
+      return stub;
+    }
+  }
+
+  public static org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests unchecked_narrow (org.omg.CORBA.Object obj)
+  {
+    if (obj == null)
+      return null;
+    else if (obj instanceof org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests)
+      return (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests)obj;
+    else
+    {
+      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
+      org.apache.tuscany.sca.binding.corba.testing.arrays_unions._ArraysUnionsTestsStub stub = new org.apache.tuscany.sca.binding.corba.testing.arrays_unions._ArraysUnionsTestsStub ();
+      stub._set_delegate(delegate);
+      return stub;
+    }
+  }
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHolder.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHolder.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHolder.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHolder.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,38 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public final class ArraysUnionsTestsHolder implements org.omg.CORBA.portable.Streamable
+{
+  public org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests value = null;
+
+  public ArraysUnionsTestsHolder ()
+  {
+  }
+
+  public ArraysUnionsTestsHolder (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests initialValue)
+  {
+    value = initialValue;
+  }
+
+  public void _read (org.omg.CORBA.portable.InputStream i)
+  {
+    value = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTestsHelper.read (i);
+  }
+
+  public void _write (org.omg.CORBA.portable.OutputStream o)
+  {
+    org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTestsHelper.write (o, value);
+  }
+
+  public org.omg.CORBA.TypeCode _type ()
+  {
+    return org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTestsHelper.type ();
+  }
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsOperations.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsOperations.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsOperations.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsOperations.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,15 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTestsOperations.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public interface ArraysUnionsTestsOperations 
+{
+  org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct passTestStruct (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct arg);
+  String[][] passStringArray (String[][] arg);
+} // interface ArraysUnionsTestsOperations

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHelper.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHelper.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHelper.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,76 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+abstract public class StringArrayHelper
+{
+  private static String  _id = "IDL:org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArray:1.0";
+
+  public static void insert (org.omg.CORBA.Any a, String[][] that)
+  {
+    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+    a.type (type ());
+    write (out, that);
+    a.read_value (out.create_input_stream (), type ());
+  }
+
+  public static String[][] extract (org.omg.CORBA.Any a)
+  {
+    return read (a.create_input_stream ());
+  }
+
+  private static org.omg.CORBA.TypeCode __typeCode = null;
+  synchronized public static org.omg.CORBA.TypeCode type ()
+  {
+    if (__typeCode == null)
+    {
+      __typeCode = org.omg.CORBA.ORB.init ().create_string_tc (0);
+      __typeCode = org.omg.CORBA.ORB.init ().create_array_tc (2, __typeCode );
+      __typeCode = org.omg.CORBA.ORB.init ().create_array_tc (2, __typeCode );
+      __typeCode = org.omg.CORBA.ORB.init ().create_alias_tc (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.id (), "StringArray", __typeCode);
+    }
+    return __typeCode;
+  }
+
+  public static String id ()
+  {
+    return _id;
+  }
+
+  public static String[][] read (org.omg.CORBA.portable.InputStream istream)
+  {
+    String value[][] = null;
+    value = new String[2][];
+    for (int _o0 = 0;_o0 < (2); ++_o0)
+    {
+      value[_o0] = new String[2];
+      for (int _o1 = 0;_o1 < (2); ++_o1)
+      {
+        value[_o0][_o1] = istream.read_string ();
+      }
+    }
+    return value;
+  }
+
+  public static void write (org.omg.CORBA.portable.OutputStream ostream, String[][] value)
+  {
+    if (value.length != (2))
+      throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+    for (int _i0 = 0;_i0 < (2); ++_i0)
+    {
+      if (value[_i0].length != (2))
+        throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+      for (int _i1 = 0;_i1 < (2); ++_i1)
+      {
+        ostream.write_string (value[_i0][_i1]);
+      }
+    }
+  }
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHolder.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHolder.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHolder.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHolder.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,39 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/StringArrayHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public final class StringArrayHolder implements org.omg.CORBA.portable.Streamable
+{
+  public String value[][] = null;
+
+  public StringArrayHolder ()
+  {
+  }
+
+  public StringArrayHolder (String[][] initialValue)
+  {
+    value = initialValue;
+  }
+
+  public void _read (org.omg.CORBA.portable.InputStream i)
+  {
+    value = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.read (i);
+  }
+
+  public void _write (org.omg.CORBA.portable.OutputStream o)
+  {
+    org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.write (o, value);
+  }
+
+  public org.omg.CORBA.TypeCode _type ()
+  {
+    return org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.type ();
+  }
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,28 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public final class TestStruct implements org.omg.CORBA.portable.IDLEntity
+{
+  public String oneDimArray[] = null;
+  public int twoDimArray[][] = null;
+  public float threeDimArray[][][] = null;
+
+  public TestStruct ()
+  {
+  } // ctor
+
+  public TestStruct (String[] _oneDimArray, int[][] _twoDimArray, float[][][] _threeDimArray)
+  {
+    oneDimArray = _oneDimArray;
+    twoDimArray = _twoDimArray;
+    threeDimArray = _threeDimArray;
+  } // ctor
+
+} // class TestStruct

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHelper.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHelper.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHelper.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,149 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+abstract public class TestStructHelper
+{
+  private static String  _id = "IDL:org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStruct/TestStruct:1.0";
+
+  public static void insert (org.omg.CORBA.Any a, org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct that)
+  {
+    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+    a.type (type ());
+    write (out, that);
+    a.read_value (out.create_input_stream (), type ());
+  }
+
+  public static org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct extract (org.omg.CORBA.Any a)
+  {
+    return read (a.create_input_stream ());
+  }
+
+  private static org.omg.CORBA.TypeCode __typeCode = null;
+  private static boolean __active = false;
+  synchronized public static org.omg.CORBA.TypeCode type ()
+  {
+    if (__typeCode == null)
+    {
+      synchronized (org.omg.CORBA.TypeCode.class)
+      {
+        if (__typeCode == null)
+        {
+          if (__active)
+          {
+            return org.omg.CORBA.ORB.init().create_recursive_tc ( _id );
+          }
+          __active = true;
+          org.omg.CORBA.StructMember[] _members0 = new org.omg.CORBA.StructMember [3];
+          org.omg.CORBA.TypeCode _tcOf_members0 = null;
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_string_tc (0);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_array_tc (2, _tcOf_members0 );
+          _members0[0] = new org.omg.CORBA.StructMember (
+            "oneDimArray",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().get_primitive_tc (org.omg.CORBA.TCKind.tk_long);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_array_tc (2, _tcOf_members0 );
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_array_tc (4, _tcOf_members0 );
+          _members0[1] = new org.omg.CORBA.StructMember (
+            "twoDimArray",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().get_primitive_tc (org.omg.CORBA.TCKind.tk_float);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_array_tc (2, _tcOf_members0 );
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_array_tc (4, _tcOf_members0 );
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_array_tc (2, _tcOf_members0 );
+          _members0[2] = new org.omg.CORBA.StructMember (
+            "threeDimArray",
+            _tcOf_members0,
+            null);
+          __typeCode = org.omg.CORBA.ORB.init ().create_struct_tc (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.id (), "TestStruct", _members0);
+          __active = false;
+        }
+      }
+    }
+    return __typeCode;
+  }
+
+  public static String id ()
+  {
+    return _id;
+  }
+
+  public static org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct read (org.omg.CORBA.portable.InputStream istream)
+  {
+    org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct value = new org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct ();
+    value.oneDimArray = new String[2];
+    for (int _o0 = 0;_o0 < (2); ++_o0)
+    {
+      value.oneDimArray[_o0] = istream.read_string ();
+    }
+    value.twoDimArray = new int[2][];
+    for (int _o1 = 0;_o1 < (2); ++_o1)
+    {
+      value.twoDimArray[_o1] = new int[4];
+      for (int _o2 = 0;_o2 < (4); ++_o2)
+      {
+        value.twoDimArray[_o1][_o2] = istream.read_long ();
+      }
+    }
+    value.threeDimArray = new float[2][][];
+    for (int _o3 = 0;_o3 < (2); ++_o3)
+    {
+      value.threeDimArray[_o3] = new float[4][];
+      for (int _o4 = 0;_o4 < (4); ++_o4)
+      {
+        value.threeDimArray[_o3][_o4] = new float[2];
+        for (int _o5 = 0;_o5 < (2); ++_o5)
+        {
+          value.threeDimArray[_o3][_o4][_o5] = istream.read_float ();
+        }
+      }
+    }
+    return value;
+  }
+
+  public static void write (org.omg.CORBA.portable.OutputStream ostream, org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct value)
+  {
+    if (value.oneDimArray.length != (2))
+      throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+    for (int _i0 = 0;_i0 < (2); ++_i0)
+    {
+      ostream.write_string (value.oneDimArray[_i0]);
+    }
+    if (value.twoDimArray.length != (2))
+      throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+    for (int _i1 = 0;_i1 < (2); ++_i1)
+    {
+      if (value.twoDimArray[_i1].length != (4))
+        throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+      for (int _i2 = 0;_i2 < (4); ++_i2)
+      {
+        ostream.write_long (value.twoDimArray[_i1][_i2]);
+      }
+    }
+    if (value.threeDimArray.length != (2))
+      throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+    for (int _i3 = 0;_i3 < (2); ++_i3)
+    {
+      if (value.threeDimArray[_i3].length != (4))
+        throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+      for (int _i4 = 0;_i4 < (4); ++_i4)
+      {
+        if (value.threeDimArray[_i3][_i4].length != (2))
+          throw new org.omg.CORBA.MARSHAL (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+        for (int _i5 = 0;_i5 < (2); ++_i5)
+        {
+          ostream.write_float (value.threeDimArray[_i3][_i4][_i5]);
+        }
+      }
+    }
+  }
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHolder.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHolder.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHolder.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHolder.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,38 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/TestStructHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public final class TestStructHolder implements org.omg.CORBA.portable.Streamable
+{
+  public org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct value = null;
+
+  public TestStructHolder ()
+  {
+  }
+
+  public TestStructHolder (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct initialValue)
+  {
+    value = initialValue;
+  }
+
+  public void _read (org.omg.CORBA.portable.InputStream i)
+  {
+    value = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.read (i);
+  }
+
+  public void _write (org.omg.CORBA.portable.OutputStream o)
+  {
+    org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.write (o, value);
+  }
+
+  public org.omg.CORBA.TypeCode _type ()
+  {
+    return org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.type ();
+  }
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsImplBase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsImplBase.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsImplBase.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsImplBase.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,75 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsImplBase.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public abstract class _ArraysUnionsTestsImplBase extends org.omg.CORBA.portable.ObjectImpl
+                implements org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests, org.omg.CORBA.portable.InvokeHandler
+{
+
+  // Constructors
+  public _ArraysUnionsTestsImplBase ()
+  {
+  }
+
+  private static java.util.Hashtable _methods = new java.util.Hashtable ();
+  static
+  {
+    _methods.put ("passTestStruct", new java.lang.Integer (0));
+    _methods.put ("passStringArray", new java.lang.Integer (1));
+  }
+
+  public org.omg.CORBA.portable.OutputStream _invoke (String $method,
+                                org.omg.CORBA.portable.InputStream in,
+                                org.omg.CORBA.portable.ResponseHandler $rh)
+  {
+    org.omg.CORBA.portable.OutputStream out = null;
+    java.lang.Integer __method = (java.lang.Integer)_methods.get ($method);
+    if (__method == null)
+      throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+
+    switch (__method.intValue ())
+    {
+       case 0:  // org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests/passTestStruct
+       {
+         org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct arg = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.read (in);
+         org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct $result = null;
+         $result = this.passTestStruct (arg);
+         out = $rh.createReply();
+         org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.write (out, $result);
+         break;
+       }
+
+       case 1:  // org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests/passStringArray
+       {
+         String arg[][] = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.read (in);
+         String $result[][] = null;
+         $result = this.passStringArray (arg);
+         out = $rh.createReply();
+         org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.write (out, $result);
+         break;
+       }
+
+       default:
+         throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+    }
+
+    return out;
+  } // _invoke
+
+  // Type-specific CORBA::Object operations
+  private static String[] __ids = {
+    "IDL:org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests:1.0"};
+
+  public String[] _ids ()
+  {
+    return (String[])__ids.clone ();
+  }
+
+
+} // class _ArraysUnionsTestsImplBase

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsStub.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsStub.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsStub.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsStub.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,80 @@
+package org.apache.tuscany.sca.binding.corba.testing.arrays_unions;
+
+
+/**
+* org/apache/tuscany/sca/binding/corba/testing/arrays_unions/_ArraysUnionsTestsStub.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from arrays_unions.idl
+* sobota, 16 sierpieñ 2008 00:51:16 CEST
+*/
+
+public class _ArraysUnionsTestsStub extends org.omg.CORBA.portable.ObjectImpl implements org.apache.tuscany.sca.binding.corba.testing.arrays_unions.ArraysUnionsTests
+{
+
+  public org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct passTestStruct (org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct arg)
+  {
+            org.omg.CORBA.portable.InputStream $in = null;
+            try {
+                org.omg.CORBA.portable.OutputStream $out = _request ("passTestStruct", true);
+                org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.write ($out, arg);
+                $in = _invoke ($out);
+                org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStruct $result = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.TestStructHelper.read ($in);
+                return $result;
+            } catch (org.omg.CORBA.portable.ApplicationException $ex) {
+                $in = $ex.getInputStream ();
+                String _id = $ex.getId ();
+                throw new org.omg.CORBA.MARSHAL (_id);
+            } catch (org.omg.CORBA.portable.RemarshalException $rm) {
+                return passTestStruct (arg        );
+            } finally {
+                _releaseReply ($in);
+            }
+  } // passTestStruct
+
+  public String[][] passStringArray (String[][] arg)
+  {
+            org.omg.CORBA.portable.InputStream $in = null;
+            try {
+                org.omg.CORBA.portable.OutputStream $out = _request ("passStringArray", true);
+                org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.write ($out, arg);
+                $in = _invoke ($out);
+                String $result[][] = org.apache.tuscany.sca.binding.corba.testing.arrays_unions.StringArrayHelper.read ($in);
+                return $result;
+            } catch (org.omg.CORBA.portable.ApplicationException $ex) {
+                $in = $ex.getInputStream ();
+                String _id = $ex.getId ();
+                throw new org.omg.CORBA.MARSHAL (_id);
+            } catch (org.omg.CORBA.portable.RemarshalException $rm) {
+                return passStringArray (arg        );
+            } finally {
+                _releaseReply ($in);
+            }
+  } // passStringArray
+
+  // Type-specific CORBA::Object operations
+  private static String[] __ids = {
+    "IDL:org/apache/tuscany/sca/binding/corba/testing/arrays_unions/ArraysUnionsTests:1.0"};
+
+  public String[] _ids ()
+  {
+    return (String[])__ids.clone ();
+  }
+
+  private void readObject (java.io.ObjectInputStream s) throws java.io.IOException
+  {
+     String str = s.readUTF ();
+     String[] args = null;
+     java.util.Properties props = null;
+     org.omg.CORBA.Object obj = org.omg.CORBA.ORB.init (args, props).string_to_object (str);
+     org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl) obj)._get_delegate ();
+     _set_delegate (delegate);
+  }
+
+  private void writeObject (java.io.ObjectOutputStream s) throws java.io.IOException
+  {
+     String[] args = null;
+     java.util.Properties props = null;
+     String str = org.omg.CORBA.ORB.init (args, props).object_to_string (this);
+     s.writeUTF (str);
+  }
+} // class _ArraysUnionsTestsStub

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/ArraysTestStruct.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/ArraysTestStruct.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/ArraysTestStruct.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/ArraysTestStruct.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.corba.testing.hierarchy;
+
+import org.apache.tuscany.sca.binding.corba.meta.CorbaArray;
+
+public final class ArraysTestStruct {
+
+    public ArraysTestStruct() {
+
+    }
+
+    public ArraysTestStruct(String[] field1, int[][] field2, float[][][] field3) {
+        this.field1 = field1;
+        this.field2 = field2;
+        this.field3 = field3;
+    }
+
+    @CorbaArray( {2})
+    public String[] field1;
+
+    @CorbaArray( {2, 4})
+    public int[][] field2;
+
+    @CorbaArray( {2, 4, 2})
+    public float[][][] field3;
+
+}

Added: tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/InvalidCorbaArray.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/InvalidCorbaArray.java?rev=686519&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/InvalidCorbaArray.java (added)
+++ tuscany/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/hierarchy/InvalidCorbaArray.java Sat Aug 16 09:18:00 2008
@@ -0,0 +1,38 @@
+/*
+ * 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.sca.binding.corba.testing.hierarchy;
+
+import org.apache.tuscany.sca.binding.corba.meta.CorbaArray;
+
+public final class InvalidCorbaArray {
+
+    // annotation argument array is not equal to declared arrays dimension 
+    @CorbaArray( {1})
+    public String[][] array;
+
+    public InvalidCorbaArray() {
+
+    }
+    
+    public InvalidCorbaArray(String[][] arg) {
+    
+    }
+
+}