You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by br...@apache.org on 2007/03/28 12:55:27 UTC

svn commit: r523301 - in /incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba: runtime/CorbaStaxObject.java types/CorbaHandlerUtils.java utils/CorbaUtils.java

Author: bravi
Date: Wed Mar 28 05:55:26 2007
New Revision: 523301

URL: http://svn.apache.org/viewvc?view=rev&rev=523301
Log:
[YOKO-314] - Adding alias type support.

Modified:
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java?view=diff&rev=523301&r1=523300&r2=523301
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStaxObject.java Wed Mar 28 05:55:26 2007
@@ -43,6 +43,7 @@
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.wsdl11.WSDLServiceBuilder;
 
+import org.apache.schemas.yoko.bindings.corba.Alias;
 import org.apache.schemas.yoko.bindings.corba.Anonarray;
 import org.apache.schemas.yoko.bindings.corba.Anonsequence;
 import org.apache.schemas.yoko.bindings.corba.Array;
@@ -166,6 +167,18 @@
                                                     boolean isNested)
         throws CorbaBindingException {
         TypeCode tc = CorbaUtils.getTypeCode(orb, idlType, typeMaps);
+        try {
+            while (tc.kind().value() == TCKind._tk_alias) {
+                Alias alias = (Alias) CorbaUtils.getCorbaType(idlType, typeMaps);
+                if (alias == null) {
+                    throw new CorbaBindingException("Couldn't find corba alias type: " + idlType);
+                }
+                tc = tc.content_type();
+                idlType = alias.getBasetype();
+            }
+        } catch (Throwable ex) {
+            throw new CorbaBindingException(ex);
+        }
         CorbaObjectHandler obj = null;
         if (CorbaUtils.isPrimitiveIdlType(idlType)) {
             LOG.log(Level.INFO, "Reading primitive type from XML reader");

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java?view=diff&rev=523301&r1=523300&r2=523301
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java Wed Mar 28 05:55:26 2007
@@ -25,6 +25,7 @@
 
 import org.apache.cxf.service.model.ServiceInfo;
 
+import org.apache.schemas.yoko.bindings.corba.Alias;
 import org.apache.schemas.yoko.bindings.corba.Anonarray;
 import org.apache.schemas.yoko.bindings.corba.Anonsequence;
 import org.apache.schemas.yoko.bindings.corba.Array;
@@ -44,6 +45,7 @@
 import org.apache.ws.commons.schema.XmlSchemaObjectCollection;
 import org.apache.ws.commons.schema.XmlSchemaType;
 
+import org.apache.yoko.bindings.corba.CorbaBindingException;
 import org.apache.yoko.bindings.corba.CorbaTypeMap;
 import org.apache.yoko.bindings.corba.utils.CorbaUtils;
 import org.apache.yoko.wsdl.CorbaTypeImpl;
@@ -62,6 +64,18 @@
                                                        ServiceInfo serviceInfo) {
         CorbaObjectHandler handler = null;        
         TypeCode tc = CorbaUtils.getTypeCode(orb, idlType, typeMaps);
+        try {
+            while (tc.kind().value() == TCKind._tk_alias) {
+                Alias alias = (Alias) CorbaUtils.getCorbaType(idlType, typeMaps);
+                if (alias == null) {
+                    throw new CorbaBindingException("Couldn't find corba alias type: " + idlType);
+                }
+                tc = tc.content_type();
+                idlType = alias.getBasetype();
+            }
+        } catch (Throwable ex) {
+            throw new CorbaBindingException(ex);
+        }
         if (CorbaUtils.isPrimitiveIdlType(idlType)) {
             // Any is a special primitive
             if (tc.kind().value() == TCKind._tk_any) {

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java?view=diff&rev=523301&r1=523300&r2=523301
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java Wed Mar 28 05:55:26 2007
@@ -34,7 +34,7 @@
 import org.apache.cxf.service.model.SchemaInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 
-//import org.apache.schemas.yoko.bindings.corba.Alias;
+import org.apache.schemas.yoko.bindings.corba.Alias;
 import org.apache.schemas.yoko.bindings.corba.Anonarray;
 import org.apache.schemas.yoko.bindings.corba.Anonfixed;
 import org.apache.schemas.yoko.bindings.corba.Anonsequence;
@@ -115,6 +115,9 @@
             }
             tc = getComplexTypeCode(orb, type, obj, typeMaps);
         }
+        if (tc == null) {
+            throw new CorbaBindingException("Corba type node with qname " + type + " is not supported");
+        }
         return tc;
     }
 
@@ -139,16 +142,83 @@
 
     public static TypeCode getComplexTypeCode(ORB orb, QName type, Object obj, List<CorbaTypeMap> typeMaps) {
 
-        TypeCode tc = null;
+        TypeCode tc = getAnonTypeCode(orb, type, obj, typeMaps);
         
-        // Split all of these up into separate get*** methods.  One big method will not satisfy checkstyle
-        // rules
-        //if (obj instanceof Alias) {
-        //    Alias aliasType = (Alias)obj;
-        //    tc = orb.create_alias_tc(aliasType.getRepositoryID(), 
-        //                             aliasType.getName(), 
-        //                             getTypeCode(orb, aliasType.getBasetype(), typeMaps));
-        //} else if (obj instanceof Anonarray) {
+        if (tc == null) {
+            if (obj instanceof Alias) {
+                Alias aliasType = (Alias)obj;
+                tc = orb.create_alias_tc(aliasType.getRepositoryID(), 
+                                         aliasType.getName(), 
+                                         getTypeCode(orb, aliasType.getBasetype(), typeMaps));        
+            } else if (obj instanceof Array) {
+                Array arrayType = (Array)obj;
+                tc = orb.create_array_tc((int) arrayType.getBound(), 
+                                         getTypeCode(orb, arrayType.getElemtype(), typeMaps));
+                //} else if (obj instanceof Const) {
+                //    Const constType = (Const)obj;
+                //    tc = getTypeCode(orb, constType.getIdltype(), typeMaps);
+            } else if (obj instanceof Enum) {
+                Enum enumType = (Enum)obj;
+                String name = enumType.getName();
+                List enums = enumType.getEnumerator();
+                String[] members = new String[enums.size()];
+                
+                for (int i = 0; i < members.length; ++i) {
+                    members[i] = ((Enumerator) enums.get(i)).getValue();
+                }
+                name = getTypeCodeName(name);
+                tc = orb.create_enum_tc(enumType.getRepositoryID(), name, members);
+            } else if (obj instanceof Exception) {
+                Exception exceptType = (Exception)obj;
+                
+                // TODO: check to see if this is a recursive type.
+                List list = exceptType.getMember();
+                StructMember[] members = new StructMember[list.size()];
+                for (int i = 0; i < members.length; ++i) {
+                    MemberType member = (MemberType) list.get(i);
+                    members[i] = new StructMember(member.getName(), 
+                                                  getTypeCode(orb, member.getIdltype(), typeMaps), null);
+                }
+                String name = getTypeCodeName(exceptType.getName());
+                tc = orb.create_exception_tc(exceptType.getRepositoryID(), name, members);
+            } else if (obj instanceof Fixed) {
+                Fixed fixedType = (Fixed) obj;
+                tc = orb.create_fixed_tc((short) fixedType.getDigits(), (short) fixedType.getScale());
+            } else if (obj instanceof org.apache.schemas.yoko.bindings.corba.Object) {
+                org.apache.schemas.yoko.bindings.corba.Object objType =
+                    (org.apache.schemas.yoko.bindings.corba.Object)obj;
+                if (objType.getName().equals("CORBA.Object")) {
+                    tc = orb.create_interface_tc(objType.getRepositoryID(), "Object");
+                } else {
+                    tc = orb.create_interface_tc(objType.getRepositoryID(),
+                                                 getTypeCodeName(objType.getName()));
+                }
+            } else if (obj instanceof Sequence) {
+                Sequence seqType = (Sequence)obj;
+                tc = orb.create_sequence_tc((int) seqType.getBound(), 
+                                            getTypeCode(orb, seqType.getElemtype(), typeMaps));
+            } else if (obj instanceof Struct) {
+                Struct structType = (Struct)obj;
+                
+                // TODO: check to see if this is a recursive type.
+                List list = structType.getMember();
+                StructMember[] members = new StructMember[list.size()];
+                for (int i = 0; i < members.length; ++i) {
+                    MemberType member = (MemberType) list.get(i);
+                    members[i] = new StructMember(member.getName(), 
+                                                  getTypeCode(orb, member.getIdltype(), typeMaps), null);
+                }
+                String name = getTypeCodeName(structType.getName());
+                tc = orb.create_struct_tc(structType.getRepositoryID(), name, members);
+            } else if (obj instanceof Union) {
+                tc = getUnionTypeCode(orb, obj, typeMaps);
+            }
+        }
+        return tc;
+    }
+    
+    private static TypeCode getAnonTypeCode(ORB orb, QName type, Object obj, List<CorbaTypeMap> typeMaps) {
+        TypeCode tc = null;
         if (obj instanceof Anonarray) {
             Anonarray anonArrayType = (Anonarray)obj;
             tc = orb.create_array_tc((int) anonArrayType.getBound(), 
@@ -166,71 +236,10 @@
         } else if (obj instanceof Anonwstring) {
             Anonwstring anonWStringType = (Anonwstring)obj;
             tc = orb.create_wstring_tc((int)anonWStringType.getBound());
-        } else if (obj instanceof Array) {
-            Array arrayType = (Array)obj;
-            tc = orb.create_array_tc((int) arrayType.getBound(), 
-                                     getTypeCode(orb, arrayType.getElemtype(), typeMaps));
-        //} else if (obj instanceof Const) {
-        //    Const constType = (Const)obj;
-        //    tc = getTypeCode(orb, constType.getIdltype(), typeMaps);
-        } else if (obj instanceof Enum) {
-            Enum enumType = (Enum)obj;
-            String name = enumType.getName();
-            List enums = enumType.getEnumerator();
-            String[] members = new String[enums.size()];
-
-            for (int i = 0; i < members.length; ++i) {
-                members[i] = ((Enumerator) enums.get(i)).getValue();
-            }
-            name = getTypeCodeName(name);
-            tc = orb.create_enum_tc(enumType.getRepositoryID(), name, members);
-        } else if (obj instanceof Exception) {
-            Exception exceptType = (Exception)obj;
-
-            // TODO: check to see if this is a recursive type.
-            List list = exceptType.getMember();
-            StructMember[] members = new StructMember[list.size()];
-            for (int i = 0; i < members.length; ++i) {
-                MemberType member = (MemberType) list.get(i);
-                members[i] = new StructMember(member.getName(), 
-                                              getTypeCode(orb, member.getIdltype(), typeMaps), null);
-            }
-            String name = getTypeCodeName(exceptType.getName());
-            tc = orb.create_exception_tc(exceptType.getRepositoryID(), name, members);
-        } else if (obj instanceof Fixed) {
-            Fixed fixedType = (Fixed) obj;
-            tc = orb.create_fixed_tc((short) fixedType.getDigits(), (short) fixedType.getScale());
-        } else if (obj instanceof org.apache.schemas.yoko.bindings.corba.Object) {
-            org.apache.schemas.yoko.bindings.corba.Object objType =
-                (org.apache.schemas.yoko.bindings.corba.Object)obj;
-            if (objType.getName().equals("CORBA.Object")) {
-                tc = orb.create_interface_tc(objType.getRepositoryID(), "Object");
-            } else {
-                tc = orb.create_interface_tc(objType.getRepositoryID(), getTypeCodeName(objType.getName()));
-            }
-        } else if (obj instanceof Sequence) {
-            Sequence seqType = (Sequence)obj;
-            tc = orb.create_sequence_tc((int) seqType.getBound(), 
-                                        getTypeCode(orb, seqType.getElemtype(), typeMaps));
-        } else if (obj instanceof Struct) {
-            Struct structType = (Struct)obj;
-
-            // TODO: check to see if this is a recursive type.
-            List list = structType.getMember();
-            StructMember[] members = new StructMember[list.size()];
-            for (int i = 0; i < members.length; ++i) {
-                MemberType member = (MemberType) list.get(i);
-                members[i] = new StructMember(member.getName(), 
-                                              getTypeCode(orb, member.getIdltype(), typeMaps), null);
-            }
-            String name = getTypeCodeName(structType.getName());
-            tc = orb.create_struct_tc(structType.getRepositoryID(), name, members);
-        } else if (obj instanceof Union) {
-            tc = getUnionTypeCode(orb, obj, typeMaps);
         }
         return tc;
     }
-    
+
     public static TypeCode getUnionTypeCode(ORB orb, Object obj, List<CorbaTypeMap> typeMaps) {
         Union unionType = (Union)obj;