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/05/23 19:42:36 UTC

svn commit: r541045 - /incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/

Author: bravi
Date: Wed May 23 12:42:35 2007
New Revision: 541045

URL: http://svn.apache.org/viewvc?view=rev&rev=541045
Log:
[YOKO-366] - Adding support for more types.

Added:
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java   (with props)
Modified:
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumListener.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionListener.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveSequenceEventProducer.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java Wed May 23 12:42:35 2007
@@ -24,6 +24,12 @@
 public abstract class AbstractCorbaTypeListener implements CorbaTypeListener {
 
     protected QName currentElement;
+    protected CorbaObjectHandler value;
+
+    public AbstractCorbaTypeListener(CorbaObjectHandler handler) {
+        value = handler;
+    }
+
 
     public void processStartElement(QName name) {
         currentElement = name;
@@ -35,5 +41,8 @@
 
     public abstract void processCharacters(String text);
 
-    public abstract CorbaObjectHandler getCorbaObject();
+    public CorbaObjectHandler getCorbaObject() {
+        return value;
+    }
+
 }

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java?view=auto&rev=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java Wed May 23 12:42:35 2007
@@ -0,0 +1,51 @@
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.yoko.bindings.corba.CorbaTypeMap;
+
+import org.omg.CORBA.ORB;
+
+public abstract class AbstractNoStartEndEventProducer implements CorbaTypeEventProducer {
+    
+    protected CorbaTypeEventProducer currentEventProducer;
+    protected Iterator<CorbaObjectHandler> iterator;
+    protected CorbaTypeMap typeMap;
+    protected ServiceInfo serviceInfo;
+    protected ORB orb;
+
+    public String getLocalName() {
+        return currentEventProducer != null ? currentEventProducer.getLocalName() : null;
+    }
+
+    public QName getName() {
+        return currentEventProducer != null ? currentEventProducer.getName() : null;
+    }
+
+    public String getText() {
+        return currentEventProducer != null ? currentEventProducer.getText() : null;
+    }
+
+    public boolean hasNext() {
+        return (currentEventProducer != null
+                ? currentEventProducer.hasNext() : false)
+            || (iterator != null ? iterator.hasNext() : false); 
+    }
+
+    public int next() {
+        int event = -1;
+        if (currentEventProducer != null && currentEventProducer.hasNext()) {
+            event = currentEventProducer.next();
+        } else if (iterator != null && iterator.hasNext()) {
+            CorbaObjectHandler obj = iterator.next();
+            currentEventProducer = CorbaHandlerUtils.getTypeEventProducer(obj, typeMap, serviceInfo, orb);
+            event =  currentEventProducer.next();
+        } else {
+            throw new RuntimeException("hasNext reported in error as there is no next event");
+        }
+        return event;
+    }
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractNoStartEndEventProducer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java?view=auto&rev=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java Wed May 23 12:42:35 2007
@@ -0,0 +1,21 @@
+package org.apache.yoko.bindings.corba.types;
+
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.yoko.bindings.corba.CorbaTypeMap;
+
+import org.omg.CORBA.ORB;
+
+public class CorbaAnonStructEventProducer extends AbstractNoStartEndEventProducer {
+    
+    // No start and end elements for the sequence
+    public CorbaAnonStructEventProducer(CorbaObjectHandler h,
+                                        CorbaTypeMap tm,
+                                        ServiceInfo service,
+                                        ORB orbRef) {
+        CorbaStructHandler handler = (CorbaStructHandler)h;
+        iterator = handler.members.iterator();
+        typeMap = tm;
+        orb = orbRef;
+        serviceInfo = service;
+    }
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaAnonStructEventProducer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumListener.java Wed May 23 12:42:35 2007
@@ -18,23 +18,13 @@
  */
 package org.apache.yoko.bindings.corba.types;
 
-import javax.xml.namespace.QName;
-
-import org.omg.CORBA.TypeCode;
-
 public class CorbaEnumListener extends AbstractCorbaTypeListener {
 
-    private CorbaEnumHandler value;
-    
-    public CorbaEnumListener(QName enumName, QName enumIdlType, TypeCode enumTC, Object enumType) {
-        value = new CorbaEnumHandler(enumName, enumIdlType, enumTC, enumType);
-    }
-
-    public CorbaObjectHandler getCorbaObject() {
-        return value;
+    public CorbaEnumListener(CorbaObjectHandler handler) {
+        super(handler);
     }
 
     public void processCharacters(String text) {
-        value.setValue(text);
+        ((CorbaEnumHandler) value).setValue(text);
     }    
 }

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionListener.java Wed May 23 12:42:35 2007
@@ -23,12 +23,12 @@
 
 import org.apache.schemas.yoko.bindings.corba.Exception;
 import org.apache.schemas.yoko.bindings.corba.MemberType;
+
 import org.apache.yoko.bindings.corba.CorbaTypeMap;
 
 import org.omg.CORBA.ORB;
-import org.omg.CORBA.TypeCode;
 
-public class CorbaExceptionListener implements CorbaTypeListener {
+public class CorbaExceptionListener extends AbstractCorbaTypeListener {
 
     private CorbaExceptionHandler value;
     private int memberCount;
@@ -38,16 +38,14 @@
     private CorbaTypeMap typeMap;
     private ORB orb;
 
-    public CorbaExceptionListener(QName exName,
-                                  QName exIdlType,
-                                  TypeCode exTC,
-                                  Object exType,
+    public CorbaExceptionListener(CorbaObjectHandler handler,
                                   CorbaTypeMap map,
                                   ORB orbRef) {
-        value = new CorbaExceptionHandler(exName, exIdlType, exTC, exType);
+        super(handler);
+        value = (CorbaExceptionHandler) handler;
         orb = orbRef;
         typeMap = map;
-        exMembers = ((Exception) exType).getMember();
+        exMembers = ((Exception) handler.getType()).getMember();
     }
 
     public void processStartElement(QName name) {
@@ -78,9 +76,4 @@
     public void processCharacters(String text) {
         currentTypeListener.processCharacters(text);
     }
-
-    public CorbaObjectHandler getCorbaObject() {
-        return value;
-    }
-
 }

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java?view=auto&rev=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java Wed May 23 12:42:35 2007
@@ -0,0 +1,59 @@
+/**
+ * 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.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.yoko.bindings.corba.utils.CorbaUtils;
+
+public class CorbaFixedEventProducer implements CorbaTypeEventProducer {
+
+    int state;
+    int[] states = {XMLStreamReader.START_ELEMENT, XMLStreamReader.CHARACTERS, XMLStreamReader.END_ELEMENT};
+    final CorbaFixedHandler handler;
+    final QName name;
+
+    public CorbaFixedEventProducer(CorbaObjectHandler h, ServiceInfo service) {
+        handler = (CorbaFixedHandler) h;
+        name = CorbaUtils.processQName(handler.getName(), service);
+    }
+
+    public String getLocalName() {        
+        return handler.getSimpleName();
+    }
+
+    public String getText() {
+        return handler.getValueData();
+    }
+
+    public int next() {
+        return states[state++];
+    }
+
+    public QName getName() {
+        return name;
+    }
+
+    public boolean hasNext() {
+        return state < states.length;
+    }
+
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedEventProducer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java?view=auto&rev=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java Wed May 23 12:42:35 2007
@@ -0,0 +1,30 @@
+/**
+ * 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.yoko.bindings.corba.types;
+
+public class CorbaFixedListener extends AbstractCorbaTypeListener {
+
+    public CorbaFixedListener(CorbaObjectHandler handler) {
+        super(handler);
+    }
+
+    public void processCharacters(String text) {
+        ((CorbaFixedHandler) value).setValueFromData(text);
+    }    
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java Wed May 23 12:42:35 2007
@@ -180,6 +180,7 @@
                 initializeSequenceHandler(orb, obj, name, schemaType, typeMap, serviceInfo);
                 break;
             case TCKind._tk_struct:
+                //obj.setXmlSchemaObject(schemaType);
                 initializeStructHandler(orb, obj, name, schemaType, typeMap, serviceInfo);
                 break;
             case TCKind._tk_union:
@@ -350,6 +351,9 @@
                                                                    schemaObj,
                                                                    typeMap,
                                                                    serviceInfo);
+            if (isAnonType(schemaObj)) {
+                memberObj.setAnonymousType(true);
+            }
             ((CorbaStructHandler)obj).addMember(memberObj);
         }
     }
@@ -443,6 +447,7 @@
                                                     CorbaTypeMap typeMap,
                                                     ORB orb)
         throws CorbaBindingException {
+        CorbaObjectHandler handler = null;
         TypeCode tc = CorbaUtils.getTypeCode(orb, idlType, typeMap);
         try {
             while (tc.kind().value() == TCKind._tk_alias) {
@@ -459,7 +464,8 @@
         CorbaTypeListener result = null;
         if (CorbaUtils.isPrimitiveIdlType(idlType)) {
             LOG.log(Level.INFO, "Reading primitive type from XML reader");
-            result = new CorbaPrimitiveListener(name, idlType, tc, null);
+            handler = new CorbaPrimitiveHandler(name, idlType, tc, null);
+            result = new CorbaPrimitiveListener(handler);
         } else {
             CorbaTypeImpl type = CorbaUtils.getCorbaType(idlType, typeMap);
             switch (tc.kind().value()) {
@@ -471,18 +477,23 @@
                 break;
             case TCKind._tk_enum:
                 LOG.log(Level.INFO, "Reading enumeration type from XML reader");
-                result = new CorbaEnumListener(name, idlType, tc, type);
+                handler = new CorbaEnumHandler(name, idlType, tc, type);
+                result = new CorbaEnumListener(handler);
                 break;
             case TCKind._tk_except:
                 LOG.log(Level.INFO, "Reading exception type from XML reader");
-                result = new CorbaExceptionListener(name, idlType, tc, type, typeMap, orb);
+                handler = new CorbaExceptionHandler(name, idlType, tc, type);
+                result = new CorbaExceptionListener(handler, typeMap, orb);
                 break;
             case TCKind._tk_fixed:
                 LOG.log(Level.INFO, "Reading fixed type from XML reader");
+                handler = new CorbaFixedHandler(name, idlType, tc, type);
+                result = new CorbaFixedListener(handler);
                 break;
             case TCKind._tk_sequence:
                 LOG.log(Level.INFO, "Reading sequence type from XML reader");
-                result = new CorbaSequenceListener(name, idlType, tc, type, typeMap, orb);
+                handler = new CorbaSequenceHandler(name, idlType, tc, type);
+                result = new CorbaSequenceListener(handler, typeMap, orb);
                 break;
             case TCKind._tk_string:
             case TCKind._tk_wstring:
@@ -491,14 +502,17 @@
                 break;
             case TCKind._tk_struct:
                 LOG.log(Level.INFO, "Reading struct type from XML reader");
-                result = new CorbaStructListener(name, idlType, tc, type, typeMap, orb);
+                handler = new CorbaStructHandler(name, idlType, tc, type);
+                result = new CorbaStructListener(handler, typeMap, orb);
                 break;
             case TCKind._tk_union:
                 LOG.log(Level.INFO, "Reading union type from XML reader");
                 break;
             case TCKind._tk_objref:
                 LOG.log(Level.INFO, "Reading object reference from XML reader");
-                result = new CorbaObjectReferenceListener(name, idlType, tc, type, orb);
+                handler =
+                    new CorbaObjectReferenceHandler(name, idlType, tc, type);
+                result = new CorbaObjectReferenceListener(handler, orb);
                 break;
             default:
                 throw new CorbaBindingException("Unsupported complex type " + idlType);
@@ -518,7 +532,6 @@
         if (CorbaUtils.isPrimitiveIdlType(idlType)) {
             result = new CorbaPrimitiveTypeEventProducer(handler, serviceInfo);
         } else {
-            //CorbaTypeImpl type = CorbaUtils.getCorbaType(idlType, typeMap);
             switch (tc.kind().value()) {
             case TCKind._tk_any:
                 LOG.log(Level.INFO, "Reading any type from XML reader");
@@ -536,6 +549,7 @@
                 break;
             case TCKind._tk_fixed:
                 LOG.log(Level.INFO, "Reading fixed type from XML reader");
+                result = new CorbaFixedEventProducer(handler, serviceInfo);
                 break;
             case TCKind._tk_sequence:
                 LOG.log(Level.INFO, "Reading sequence type from XML reader");
@@ -552,7 +566,11 @@
                 break;
             case TCKind._tk_struct:
                 LOG.log(Level.INFO, "Reading struct type from XML reader");
-                result = new CorbaStructEventProducer(handler, typeMap, serviceInfo, orb);
+                if (handler.isAnonymousType()) {
+                    result = new CorbaAnonStructEventProducer(handler, typeMap, serviceInfo, orb);
+                } else {
+                    result = new CorbaStructEventProducer(handler, typeMap, serviceInfo, orb);
+                }
                 break;
             case TCKind._tk_union:
                 LOG.log(Level.INFO, "Reading union type from XML reader");
@@ -580,5 +598,14 @@
             seqElementType = type.getElemtype();
         }
         return CorbaUtils.isPrimitiveIdlType(seqElementType);
+    }
+
+    public static boolean isAnonType(XmlSchemaObject schemaObj) {
+        boolean result = false;        
+        if ((schemaObj != null) && !(schemaObj instanceof XmlSchemaElement)
+             && !(schemaObj instanceof XmlSchemaComplexType)) {
+            result = true;
+        }
+        return result;
     }
 }

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java Wed May 23 12:42:35 2007
@@ -33,6 +33,7 @@
     protected QName idlType;
     protected TypeCode typeCode;
     protected CorbaTypeImpl type;
+    protected boolean isAnon;
 
     public CorbaObjectHandler() {
     }
@@ -66,5 +67,13 @@
     
     public CorbaTypeImpl getType() {
         return type;
+    }
+
+    public void setAnonymousType(boolean anon) {
+        isAnon = anon;
+    }
+
+    public boolean isAnonymousType() {
+        return isAnon;
     }
 }

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java Wed May 23 12:42:35 2007
@@ -19,12 +19,9 @@
 
 package org.apache.yoko.bindings.corba.types;
 
-import javax.xml.namespace.QName;
-
 import org.apache.yoko.bindings.corba.utils.CorbaUtils;
 
 import org.omg.CORBA.ORB;
-import org.omg.CORBA.TypeCode;
 
 
 public class CorbaObjectReferenceListener extends AbstractCorbaTypeListener {
@@ -32,18 +29,12 @@
     private CorbaObjectReferenceHandler value;
     private ORB orb;
 
-    public CorbaObjectReferenceListener(QName objName,
-                                        QName objIdlType,
-                                        TypeCode objTC,
-                                        Object objType,
+    public CorbaObjectReferenceListener(CorbaObjectHandler handler,
                                         ORB orbRef) {
+        super(handler);
         orb = orbRef;
-        value = new CorbaObjectReferenceHandler(objName, objIdlType, objTC, objType);
+        value = (CorbaObjectReferenceHandler) handler;
         value.setReference(null);
-    }
-
-    public CorbaObjectHandler getCorbaObject() {
-        return value;
     }
 
     public void processCharacters(String text) {

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java Wed May 23 12:42:35 2007
@@ -18,23 +18,13 @@
  */
 package org.apache.yoko.bindings.corba.types;
 
-import javax.xml.namespace.QName;
-
-import org.omg.CORBA.TypeCode;
-
 public class CorbaPrimitiveListener extends AbstractCorbaTypeListener {
 
-    private CorbaPrimitiveHandler value;
-    
-    public CorbaPrimitiveListener(QName primName, QName primIdlType, TypeCode primTC, Object primType) {
-        value = new CorbaPrimitiveHandler(primName, primIdlType, primTC, primType);
-    }
-    
-    public CorbaObjectHandler getCorbaObject() {
-        return value;
-    }
+    public CorbaPrimitiveListener(CorbaObjectHandler handler) {
+        super(handler);
+    }   
     
     public void processCharacters(String text) {
-        value.setValueFromData(text);
+        ((CorbaPrimitiveHandler) value).setValueFromData(text);
     }
 }

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveSequenceEventProducer.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveSequenceEventProducer.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveSequenceEventProducer.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveSequenceEventProducer.java Wed May 23 12:42:35 2007
@@ -1,22 +1,12 @@
 package org.apache.yoko.bindings.corba.types;
 
-import java.util.Iterator;
-
-import javax.xml.namespace.QName;
-
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.yoko.bindings.corba.CorbaTypeMap;
 
 import org.omg.CORBA.ORB;
 
-public class CorbaPrimitiveSequenceEventProducer implements CorbaTypeEventProducer {
+public class CorbaPrimitiveSequenceEventProducer extends AbstractNoStartEndEventProducer {
     
-    protected CorbaTypeEventProducer currentEventProducer;
-    protected Iterator<CorbaObjectHandler> iterator;
-    private CorbaTypeMap typeMap;
-    private ServiceInfo serviceInfo;
-    private ORB orb;
-
     // No start and end elements for the sequence
     public CorbaPrimitiveSequenceEventProducer(CorbaObjectHandler h,
                                                CorbaTypeMap tm,
@@ -27,37 +17,5 @@
         typeMap = tm;
         orb = orbRef;
         serviceInfo = service;
-    }
-
-    public String getLocalName() {
-        return currentEventProducer != null ? currentEventProducer.getLocalName() : null;
-    }
-
-    public QName getName() {
-        return currentEventProducer != null ? currentEventProducer.getName() : null;
-    }
-
-    public String getText() {
-        return currentEventProducer != null ? currentEventProducer.getText() : null;
-    }
-
-    public boolean hasNext() {
-        return (currentEventProducer != null
-                ? currentEventProducer.hasNext() : false)
-            || (iterator != null ? iterator.hasNext() : false); 
-    }
-
-    public int next() {
-        int event = -1;
-        if (currentEventProducer != null && currentEventProducer.hasNext()) {
-            event = currentEventProducer.next();
-        } else if (iterator != null && iterator.hasNext()) {
-            CorbaObjectHandler obj = iterator.next();
-            currentEventProducer = CorbaHandlerUtils.getTypeEventProducer(obj, typeMap, serviceInfo, orb);
-            event =  currentEventProducer.next();
-        } else {
-            throw new RuntimeException("hasNext reported in error as there is no next event");
-        }
-        return event;
     }
 }

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java Wed May 23 12:42:35 2007
@@ -26,9 +26,8 @@
 import org.apache.yoko.bindings.corba.CorbaTypeMap;
 
 import org.omg.CORBA.ORB;
-import org.omg.CORBA.TypeCode;
 
-public class CorbaSequenceListener implements CorbaTypeListener {
+public class CorbaSequenceListener extends AbstractCorbaTypeListener {
 
     private CorbaSequenceHandler value;
     private QName seqElementType;
@@ -37,15 +36,14 @@
     private ORB orb;
     private CorbaTypeMap typeMap;
     
-    public CorbaSequenceListener(QName seqName,
-                                 QName seqIdlType,
-                                 TypeCode seqTC,
-                                 Object seqType,
+    public CorbaSequenceListener(CorbaObjectHandler handler,
                                  CorbaTypeMap map,
                                  ORB orbRef) {
-        value = new CorbaSequenceHandler(seqName, seqIdlType, seqTC, seqType);
+        super(handler);
+        value = (CorbaSequenceHandler) handler;
         orb = orbRef;
         typeMap = map;
+        Object seqType = handler.getType();
         if (seqType instanceof Anonsequence) {
             Anonsequence anonSeqType = (Anonsequence) seqType;
             seqElementType = anonSeqType.getElemtype();
@@ -53,10 +51,6 @@
             Sequence type = (Sequence) seqType;
             seqElementType = type.getElemtype();
         }
-    }
-    
-    public CorbaObjectHandler getCorbaObject() {
-        return value;
     }
 
     public void processStartElement(QName name) {

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java?view=diff&rev=541045&r1=541044&r2=541045
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java Wed May 23 12:42:35 2007
@@ -25,11 +25,11 @@
 import org.apache.schemas.yoko.bindings.corba.Struct;
 
 import org.apache.yoko.bindings.corba.CorbaTypeMap;
+import org.apache.yoko.bindings.corba.utils.CorbaUtils;
 
 import org.omg.CORBA.ORB;
-import org.omg.CORBA.TypeCode;
 
-public class CorbaStructListener implements CorbaTypeListener {
+public class CorbaStructListener extends AbstractCorbaTypeListener {
 
     private CorbaStructHandler value;
     private int memberCount;
@@ -39,29 +39,37 @@
     private CorbaTypeMap typeMap;
     private ORB orb;
 
-    public CorbaStructListener(QName structName,
-                               QName structIdlType,
-                               TypeCode structTC,
-                               Object structType,
+    public CorbaStructListener(CorbaObjectHandler handler,
                                CorbaTypeMap map,
                                ORB orbRef) {
-        value = new CorbaStructHandler(structName, structIdlType, structTC, structType);
+        super(handler);
         orb = orbRef;
         typeMap = map;
-        structMembers = ((Struct) structType).getMember();
+        structMembers = ((Struct) handler.getType()).getMember();
+        value = (CorbaStructHandler) handler;
     }
 
     public void processStartElement(QName name) {
-        //REVISIT, assume only elements not attrs
         if (currentTypeListener == null) {
-            memberElement = name;
+            QName elName = name;
+            MemberType member = structMembers.get(memberCount);
+            boolean anonType = !name.getLocalPart().equals(member.getName());
+            if (anonType) {
+                elName = CorbaUtils.getEmptyQName();
+            } else {
+                memberElement = name;
+            }
             currentTypeListener =
-                CorbaHandlerUtils.getTypeListener(name,
+                CorbaHandlerUtils.getTypeListener(elName,
                                                   structMembers.get(memberCount).getIdltype(),
                                                   typeMap,
                                                   orb);
             value.addMember(currentTypeListener.getCorbaObject());
             memberCount++;
+            if (anonType) {
+                currentTypeListener.getCorbaObject().setAnonymousType(true);
+                currentTypeListener.processStartElement(name);
+            }
         } else {
             currentTypeListener.processStartElement(name);
         }
@@ -71,17 +79,13 @@
         if (currentTypeListener != null) {
             currentTypeListener.processEndElement(name);
         }
-        if (memberElement.equals(name)) {
+        if ((memberElement != null) && (memberElement.equals(name))) {
             currentTypeListener = null;
         }
     }
 
     public void processCharacters(String text) {
         currentTypeListener.processCharacters(text);
-    }
-
-    public CorbaObjectHandler getCorbaObject() {
-        return value;
     }
 
 }