You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2009/03/06 05:07:41 UTC

svn commit: r750763 - in /cxf/trunk: common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaUtils.java rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java

Author: bimargulies
Date: Fri Mar  6 04:07:39 2009
New Revision: 750763

URL: http://svn.apache.org/viewvc?rev=750763&view=rev
Log:
Aegis wasn't always xs:import-ing array types across namespaces. It also was never setting maxOccurs into the schema,
and it was setting minOccurs wrong a fair part of the time.

Modified:
    cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaUtils.java
    cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaUtils.java?rev=750763&r1=750762&r2=750763&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaUtils.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/common/xmlschema/XmlSchemaUtils.java Fri Mar  6 04:07:39 2009
@@ -201,7 +201,7 @@
      * @param namespaceUri
      */
     public static void addImportIfNeeded(XmlSchema schema, String namespaceUri) {
-        // no need to import nothing or the XSD schema.
+        // no need to import nothing or the XSD schema, or the schema we are fixing.
         if ("".equals(namespaceUri) 
             || XmlSchemaConstants.XSD_NAMESPACE_URI.equals(namespaceUri)
             || schema.getTargetNamespace().equals(namespaceUri)) {

Modified: cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java?rev=750763&r1=750762&r2=750763&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java Fri Mar  6 04:07:39 2009
@@ -436,19 +436,36 @@
         return type;
     }
 
-    private void writeTypeReference(QName name, XmlSchemaElement element, Type type) {
+    private void writeTypeReference(QName name, XmlSchemaElement element, Type type, 
+                                    XmlSchema schemaRoot) {
         if (type.isAbstract()) {
             element.setName(name.getLocalPart());
             element.setSchemaTypeName(type.getSchemaType());
+            XmlSchemaUtils.addImportIfNeeded(schemaRoot, type.getSchemaType().getNamespaceURI());
 
-            int minOccurs = getTypeInfo().getMinOccurs(name);
+            /*
+             * This seems to bespeak some sort of confusion. The problem is that
+             * no one ever implemented getMinOccurs(name) to even look at the per-element data.
+             */
+            long minOccurs = -1;
+            long maxOccurs = -1;
+            if (type instanceof ArrayType) {
+                ArrayType arrayType = (ArrayType) type;
+                minOccurs = arrayType.getMinOccurs();
+                maxOccurs = arrayType.getMaxOccurs();
+            } else {
+                minOccurs = getTypeInfo().getMinOccurs(name);
+            }
             /*
              * Old code had ridiculous '!=0' here, which cannot have been right.
              */
             if (minOccurs != -1) {
                 element.setMinOccurs(minOccurs);
             }
-
+            if (maxOccurs != -1) {
+                element.setMaxOccurs(maxOccurs);
+            }
+            
             element.setNillable(getTypeInfo().isNillable(name));
         } else {
             element.setRefName(type.getSchemaType());
@@ -703,7 +720,7 @@
                 XmlSchemaUtils.addImportIfNeeded(root, AbstractTypeCreator.HTTP_CXF_APACHE_ORG_ARRAYS);
             }
 
-            writeTypeReference(name, element, type);
+            writeTypeReference(name, element, type, root);
             needXmime |= type.usesXmime();
             needUtilityTypes |= type.usesUtilityTypes();
         }