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/01/31 19:44:03 UTC

svn commit: r501962 - in /incubator/yoko/trunk: bindings/src/main/java/org/apache/yoko/bindings/corba/ bindings/src/main/java/org/apache/yoko/bindings/corba/types/ bindings/src/test/java/org/apache/yoko/bindings/corba/ tools/src/main/java/org/apache/yo...

Author: bravi
Date: Wed Jan 31 11:44:02 2007
New Revision: 501962

URL: http://svn.apache.org/viewvc?view=rev&rev=501962
Log:
[YOKO-170] - Fixing the Choice types in the corba binding. Also enabled the test cases in the type test.

Modified:
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectReader.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStaxObject.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
    incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaTypeTest.java
    incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaHelper.java

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectReader.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectReader.java?view=diff&rev=501962&r1=501961&r2=501962
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectReader.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectReader.java Wed Jan 31 11:44:02 2007
@@ -313,49 +313,49 @@
 
     public void readUnion(CorbaObjectHandler obj) throws CorbaBindingException {
         CorbaUnionHandler unionHandler = (CorbaUnionHandler)obj;
-        CorbaObjectHandler discriminator = unionHandler.getDiscriminator();
-        
-        this.read(discriminator);
-        
-        String discLabel = null;
-        if (discriminator.getTypeCodeKind().value() == TCKind._tk_enum) {
-            discLabel = ((CorbaEnumHandler)discriminator).getValue();
-        } else {
-            discLabel = ((CorbaPrimitiveHandler)discriminator).getDataFromValue(); 
-        }
-        
-        // Now find the label in the union to get the right case
         Union unionType = (Union)unionHandler.getType();
         List<Unionbranch> branches = unionType.getUnionbranch();
-        Unionbranch defaultBranch = null;
-        boolean caseFound = false;
-        for (Iterator<Unionbranch> branchIter = branches.iterator(); branchIter.hasNext();) {
-            Unionbranch branch = branchIter.next();
-            if (branch.isSetDefault() && branch.isDefault()) {
-                defaultBranch = branch;
+        CorbaObjectHandler discriminator = unionHandler.getDiscriminator();
+        if (branches.size() > 0) {
+            this.read(discriminator);
+            String discLabel = null;
+            if (discriminator.getTypeCodeKind().value() == TCKind._tk_enum) {
+                discLabel = ((CorbaEnumHandler)discriminator).getValue();
+            } else {
+                discLabel = ((CorbaPrimitiveHandler)discriminator).getDataFromValue(); 
             }
-            List<CaseType> cases = branch.getCase();
-            for (Iterator<CaseType> caseIter = cases.iterator(); caseIter.hasNext();) {
-                CaseType c = caseIter.next();
-                if (c.getLabel().equalsIgnoreCase(discLabel)) {
-                    CorbaObjectHandler branchObj = unionHandler.getBranchByName(branch.getName());
-                    this.read(branchObj);
-                    unionHandler.setValue(branch.getName(), branchObj);
-                    caseFound = true;
+        
+            // Now find the label in the union to get the right case
+            Unionbranch defaultBranch = null;
+            boolean caseFound = false;
+            for (Iterator<Unionbranch> branchIter = branches.iterator(); branchIter.hasNext();) {
+                Unionbranch branch = branchIter.next();
+                if (branch.isSetDefault() && branch.isDefault()) {
+                    defaultBranch = branch;
+                }
+                List<CaseType> cases = branch.getCase();
+                for (Iterator<CaseType> caseIter = cases.iterator(); caseIter.hasNext();) {
+                    CaseType c = caseIter.next();
+                    if (c.getLabel().equalsIgnoreCase(discLabel)) {
+                        CorbaObjectHandler branchObj = unionHandler.getBranchByName(branch.getName());
+                        this.read(branchObj);
+                        unionHandler.setValue(branch.getName(), branchObj);
+                        caseFound = true;
+                        break;
+                    }
+                }
+                if (caseFound) {
                     break;
                 }
             }
-            if (caseFound) {
-                break;
+            
+            // If we never find a case that matches the value of the discriminiator, then we must have
+            // found the default case.
+            if (!caseFound && defaultBranch != null) {
+                CorbaObjectHandler branchObj = unionHandler.getBranchByName(defaultBranch.getName());
+                this.read(branchObj);
+                unionHandler.setValue(defaultBranch.getName(), branchObj);
             }
-        }
-        
-        // If we never find a case that matches the value of the discriminiator, then we must have
-        // found the default case.
-        if (!caseFound && defaultBranch != null) {
-            CorbaObjectHandler branchObj = unionHandler.getBranchByName(defaultBranch.getName());
-            this.read(branchObj);
-            unionHandler.setValue(defaultBranch.getName(), branchObj);
         }
     }
 

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java?view=diff&rev=501962&r1=501961&r2=501962
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java Wed Jan 31 11:44:02 2007
@@ -24,6 +24,8 @@
 import org.apache.schemas.yoko.bindings.corba.Enum;
 import org.apache.schemas.yoko.bindings.corba.Enumerator;
 import org.apache.schemas.yoko.bindings.corba.Exception;
+import org.apache.schemas.yoko.bindings.corba.Union;
+import org.apache.schemas.yoko.bindings.corba.Unionbranch;
 import org.apache.yoko.bindings.corba.types.CorbaAnyHandler;
 import org.apache.yoko.bindings.corba.types.CorbaArrayHandler;
 import org.apache.yoko.bindings.corba.types.CorbaEnumHandler;
@@ -229,11 +231,15 @@
     }
 
     public void writeUnion(CorbaObjectHandler obj) throws CorbaBindingException {
-        CorbaObjectHandler discriminator = ((CorbaUnionHandler)obj).getDiscriminator();
-        this.write(discriminator);
-        CorbaObjectHandler unionValue = ((CorbaUnionHandler)obj).getValue();
-        if (unionValue != null) {
-            this.write(unionValue);
+        Union unionType = (Union) obj.getType();
+        List<Unionbranch> branches = unionType.getUnionbranch();
+        if (branches.size() > 0) {
+            CorbaObjectHandler discriminator = ((CorbaUnionHandler)obj).getDiscriminator();
+            this.write(discriminator);
+            CorbaObjectHandler unionValue = ((CorbaUnionHandler)obj).getValue();
+            if (unionValue != null) {
+                this.write(unionValue);
+            }
         }
     }
 

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStaxObject.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStaxObject.java?view=diff&rev=501962&r1=501961&r2=501962
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStaxObject.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStaxObject.java Wed Jan 31 11:44:02 2007
@@ -54,6 +54,7 @@
 import org.apache.schemas.yoko.bindings.corba.Unionbranch;
 
 import org.apache.ws.commons.schema.XmlSchemaAttribute;
+import org.apache.ws.commons.schema.XmlSchemaChoice;
 import org.apache.ws.commons.schema.XmlSchemaComplexType;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaGroupBase;
@@ -929,73 +930,25 @@
             if (stype == null) {
                 stype = CorbaUtils.getXmlSchemaType(serviceInfo, el.getRefName());
             }       
+        } 
+        if (stype instanceof XmlSchemaComplexType) {
+            XmlSchemaComplexType ctype = (XmlSchemaComplexType) stype;
+            stype = ctype.getParticle();
         }
-        CorbaUnionHandler obj = null;
+        CorbaObjectHandler obj = null;
         if (!readElement) {
-            obj = readAttributeOrNillableElementFromStax(reader, elName, idlType, tc, schemaType);
+            obj = readAttributeOrNillableElementFromStax(reader, elName, idlType, tc, stype);
         } else {
-            try {
-                Union unionType = (Union) CorbaUtils.getCorbaType(idlType, typeMaps);
-                elName = reader.nextEvent().asStartElement().getName();
-                obj = new CorbaUnionHandler(elName, idlType, tc, unionType);
-                // Build the entire union with all branches, etc.  Then read info from the XML Event Reader
-                StartElement branchElement = reader.peek().asStartElement();
-                String branchName = branchElement.getName().getLocalPart();
-                List<Unionbranch> branches = unionType.getUnionbranch();
-                for (Iterator<Unionbranch> branchesIter = branches.iterator(); branchesIter.hasNext();) {
-                    Unionbranch branch = branchesIter.next();
-                    CorbaObjectHandler branchObj = null;
-                    if (branch.getName().equals(branchName)) {
-                        branchObj = readObjectFromStax(reader, branch.getIdltype(), stype, true);
-                        // We also need to set the discriminator since this is the branch with the actual
-                        // union value
-                        CorbaObjectHandler discObj = 
-                            CorbaHandlerUtils.createTypeHandler(orb,
-                                                                new QName("discriminator"),
-                                                                unionType.getDiscriminator(),
-                                                                typeMaps,
-                                                                serviceInfo);
-                        obj.setDiscriminator(discObj);
-
-                        // Determine the value of the discriminator.  
-                        List<CaseType> branchCases = branch.getCase();
-                        String discValue = null;
-                        if (branchCases.size() != 0) {
-                            // This represents a union case.  Set the discriminator based on the first
-                            // label value associated with the branch (since we don't have this information)
-                            // from the Stax representation of the Celtix object).
-                            CaseType caseLabel = branchCases.get(0);
-                            discValue = caseLabel.getLabel();
-                        } else {
-                            // This represents the default case.
-                            discValue = obj.createDefaultDiscriminatorLabel();
-                        }
-                        obj.setDiscriminatorValueFromData(discValue);
-                        obj.setValue(branchName, branchObj);
-                    } else {
-                        // Create an object holder with no value
-                        branchObj = CorbaHandlerUtils.createTypeHandler(orb,
-                                                                        new QName(branch.getName()),
-                                                                        branch.getIdltype(),
-                                                                        typeMaps,
-                                                                        serviceInfo);
-                    }
-                    obj.addCase(branchObj);
-                }
-                reader.nextEvent().asEndElement();
-            } catch (java.lang.Exception ex) {
-                LOG.log(Level.SEVERE, "Received exception while reading object of type " + idlType);
-                throw new CorbaBindingException("Error while reading union corba type", ex);
-            }
+            obj = readChoiceFromStax(reader, idlType, tc, stype);
         }
         return obj;
     }
  
-    private CorbaUnionHandler readAttributeOrNillableElementFromStax(XMLEventReader reader,
-                                                                     QName name,
-                                                                     QName idlType,
-                                                                     TypeCode tc,
-                                                                     XmlSchemaObject schemaType)
+    private CorbaObjectHandler readAttributeOrNillableElementFromStax(XMLEventReader reader,
+                                                                      QName name,
+                                                                      QName idlType,
+                                                                      TypeCode tc,
+                                                                      XmlSchemaObject schemaType)
         throws CorbaBindingException {
         Union unionType = (Union) CorbaUtils.getCorbaType(idlType, typeMaps);
         CorbaUnionHandler obj = new CorbaUnionHandler(name, idlType, tc, unionType);
@@ -1038,6 +991,79 @@
         return obj;
     }
    
+    protected CorbaObjectHandler readChoiceFromStax(XMLEventReader reader,
+                                                    QName idlType,
+                                                    TypeCode tc,
+                                                    XmlSchemaObject schemaType)
+        throws CorbaBindingException {
+        CorbaUnionHandler obj = null;
+        try {
+            XmlSchemaChoice choiceType = (XmlSchemaChoice) schemaType;
+            Union unionType = (Union) CorbaUtils.getCorbaType(idlType, typeMaps);
+            QName elName = reader.nextEvent().asStartElement().getName();
+            obj = new CorbaUnionHandler(elName, idlType, tc, unionType);
+            // Build the entire union with all branches, etc.  Then read info from the XML Event Reader
+            String branchName = null;
+            XMLEvent evt = reader.peek();
+            if (evt.isStartElement()) {
+                StartElement branchElement = evt.asStartElement();
+                branchName = branchElement.getName().getLocalPart();
+            }
+            List<Unionbranch> branches = unionType.getUnionbranch();
+            XmlSchemaObjectCollection items = choiceType.getItems();                
+            for (int i = 0; i < branches.size(); i++) {
+                Unionbranch branch = branches.get(i);
+                CorbaObjectHandler branchObj = null;
+                if (branch.getName().equals(branchName)) {
+                    branchObj = readObjectFromStax(reader, branch.getIdltype(), items.getItem(i), true);
+                    // We also need to set the discriminator since this is the branch with the actual
+                    // union value
+                    CorbaObjectHandler discObj = 
+                        CorbaHandlerUtils.createTypeHandler(orb,
+                                                            new QName("discriminator"),
+                                                            unionType.getDiscriminator(),
+                                                            typeMaps,
+                                                            serviceInfo);
+                    obj.setDiscriminator(discObj);
+                    
+                    // Determine the value of the discriminator.  
+                    List<CaseType> branchCases = branch.getCase();
+                    String discValue = null;
+                    if (branchCases.size() != 0) {
+                        // This represents a union case.  Set the discriminator based on the first
+                        // label value associated with the branch (since we don't have this information)
+                        // from the Stax representation of the Celtix object).
+                        CaseType caseLabel = branchCases.get(0);
+                        discValue = caseLabel.getLabel();
+                    } else {
+                        // This represents the default case.
+                        discValue = obj.createDefaultDiscriminatorLabel();
+                    }
+                    obj.setDiscriminatorValueFromData(discValue);
+                    obj.setValue(branchName, branchObj);
+                } else {
+                    XmlSchemaElement el = (XmlSchemaElement) items.getItem(i);
+                    QName qname = new QName("", branch.getName());
+                    if (CorbaUtils.isElementFormQualified(serviceInfo, el.getQName().getNamespaceURI())) {
+                        qname = el.getQName();
+                    }
+                    // Create an object holder with no value
+                    branchObj = CorbaHandlerUtils.createTypeHandler(orb,
+                                                                    qname,
+                                                                    branch.getIdltype(),
+                                                                    typeMaps,
+                                                                    serviceInfo);
+                }
+                obj.addCase(branchObj);
+            }
+            reader.nextEvent().asEndElement();
+        } catch (java.lang.Exception ex) {
+            LOG.log(Level.SEVERE, "Received exception while reading object of type " + idlType);
+            throw new CorbaBindingException("Error while reading union corba type", ex);
+        }
+        return obj;
+    }
+
     protected void writeUnionToStax(CorbaObjectHandler obj,
                                     QName objName,
                                     XmlSchemaObject schemaType,
@@ -1073,7 +1099,9 @@
             StartElement startEl = factory.createStartElement(objName, null, null);
             writer.add(startEl);
             CorbaObjectHandler unionValue = unionHandler.getValue();
-            writeObjectToStax(unionValue, stype, writer, factory, true);
+            if (unionValue != null) {
+                writeObjectToStax(unionValue, stype, writer, factory, true);
+            }
             EndElement endEl = factory.createEndElement(objName, null);
             writer.add(endEl);
         }

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java?view=diff&rev=501962&r1=501961&r2=501962
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java Wed Jan 31 11:44:02 2007
@@ -82,7 +82,6 @@
 
     public static TypeCode getTypeCode(ORB orb, QName type, CorbaType obj, List<CorbaTypeMap> typeMaps) {
         TypeCode tc = null;
-
         // first see if it is a primitive
         tc = getPrimitiveTypeCode(orb, type);
         if (tc == null) {

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=501962&r1=501961&r2=501962
==============================================================================
--- 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 Jan 31 11:44:02 2007
@@ -114,8 +114,6 @@
         XmlSchemaType schemaType = null;
         if (type != null) {
             schemaType = CorbaUtils.getXmlSchemaType(serviceInfo, type.getType());
-            String nsUri = getNamespaceURI(serviceInfo, type.getType());
-            name = new QName(nsUri, name.getLocalPart());
         }
         return initializeObjectHandler(orb, name, idlType, schemaType, typeMaps, serviceInfo);
     }
@@ -127,7 +125,12 @@
                                                              List<CorbaTypeMap> typeMaps,
                                                              ServiceInfo serviceInfo) {
         CorbaObjectHandler obj = createTypeHandler(orb, name, idlType, typeMaps, serviceInfo);
-        name = obj.getName();
+        if (obj.getType() != null) {
+            String nsUri = getNamespaceURI(serviceInfo, obj.getType().getType());
+            name = new QName(nsUri, obj.getName().getLocalPart());
+        } else {
+            name = obj.getName();
+        }
         if (!CorbaUtils.isPrimitiveIdlType(idlType)) {
             switch (obj.getTypeCode().kind().value()) {
             case TCKind._tk_array:

Modified: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaTypeTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaTypeTest.java?view=diff&rev=501962&r1=501961&r2=501962
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaTypeTest.java (original)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaTypeTest.java Wed Jan 31 11:44:02 2007
@@ -76,12 +76,6 @@
     public void testHexBinary() throws Exception  {
     }
 
-    public void testEmptyChoice() throws Exception {
-    }
-
-    public void testSimpleChoice() throws Exception {
-    }
-
     public void testNumberEnum() throws Exception {
     }
     public void testStringEnum() throws Exception {

Modified: incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaHelper.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaHelper.java?view=diff&rev=501962&r1=501961&r2=501962
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaHelper.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaHelper.java Wed Jan 31 11:44:02 2007
@@ -224,9 +224,9 @@
         QName choicename = null;
 
         if (schemaTypeName == null) {
-            choicename = createQNameTargetNamespace(defaultName.getLocalPart());
+            choicename = createQNameCorbaNamespace(defaultName.getLocalPart());
         } else {
-            choicename = createQNameTargetNamespace(schemaTypeName.getLocalPart());
+            choicename = createQNameCorbaNamespace(schemaTypeName.getLocalPart());
         }
         choicename = checkPrefix(choicename);
 
@@ -843,7 +843,6 @@
         throws Exception {
         QName name;
         Struct corbaStruct = null;
-        
         QName schematypeName = checkPrefix(complex.getQName());               
         if (schematypeName == null) {
             schematypeName = checkPrefix(defaultName);
@@ -1132,9 +1131,9 @@
 
         if (schematypeName == null) {
             schematypeName = defaultName;
-            name = createQNameTargetNamespace(defaultName.getLocalPart() + "Type");
+            name = createQNameCorbaNamespace(defaultName.getLocalPart() + "Type");
         } else {
-            name = createQNameTargetNamespace(schematypeName.getLocalPart());
+            name = createQNameCorbaNamespace(schematypeName.getLocalPart());
         }
 
         corbaUnion = new Union();
@@ -1216,9 +1215,9 @@
         
         if (schematypeName == null) {
             schematypeName = defaultName;
-            name = createQNameTargetNamespace(defaultName.getLocalPart() + "Type");
+            name = createQNameCorbaNamespace(defaultName.getLocalPart() + "Type");
         } else {
-            name = createQNameTargetNamespace(schematypeName.getLocalPart());
+            name = createQNameCorbaNamespace(schematypeName.getLocalPart());
         }
 
         return createUnion(name, (XmlSchemaChoice)complex.getParticle(), defaultName, schematypeName);