You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by ra...@apache.org on 2005/04/11 23:29:11 UTC

svn commit: r160955 - xmlbeans/trunk/src/tools/org/apache/xmlbeans/impl/xsd2inst xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values

Author: radup
Date: Mon Apr 11 14:29:09 2005
New Revision: 160955

URL: http://svn.apache.org/viewcvs?view=rev&rev=160955
Log:
Code refactoring for resolving anonymous simple types.
Fixed OOME when running xsd2inst over very large Schemas.
Fixed default value syncronization between store and XmlObject.


Modified:
    xmlbeans/trunk/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/XmlObjectBase.java

Modified: xmlbeans/trunk/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java?view=diff&r1=160954&r2=160955
==============================================================================
--- xmlbeans/trunk/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java (original)
+++ xmlbeans/trunk/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java Mon Apr 11 14:29:09 2005
@@ -68,12 +68,14 @@
 public class SampleXmlUtil
 {
     private boolean _soapEnc;
+    private static final int MAX_ELEMENTS = 1000;
+    private int _nElements;
 
     private SampleXmlUtil(boolean soapEnc)
     {
         _soapEnc = soapEnc;
     }
-    
+
     public static String createSampleForType(SchemaType sType)
     {
         XmlObject object = XmlObject.Factory.newInstance();
@@ -967,7 +969,7 @@
             return minOccurs;
         
         int result = minOccurs;
-        if (result == 0)
+        if (result == 0 && _nElements < MAX_ELEMENTS)
             result = 1;
         
         if (sp.getParticleType() != SchemaParticle.ELEMENT)
@@ -1020,6 +1022,7 @@
             xmlc.insertElement(element.getName().getLocalPart()); // soap encoded? drop namespaces.
         else
             xmlc.insertElement(element.getName().getLocalPart(), element.getName().getNamespaceURI());
+        _nElements++;
         /// -> <elem>^</elem>
         xmlc.toPrevToken();
         // -> <elem>stuff^</elem>

Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java?view=diff&r1=160954&r2=160955
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java Mon Apr 11 14:29:09 2005
@@ -632,8 +632,16 @@
         StscState state = StscState.get();
         String targetNamespace = sImpl.getTargetNamespace();
         boolean chameleon = (sImpl.getChameleonNamespace() != null);
+        List anonymousTypes = new ArrayList();
         if (parseTree.getSimpleType() != null)
         {
+            LocalSimpleType typedef = parseTree.getSimpleType();
+            SchemaTypeImpl anonType = StscTranslator.
+                translateAnonymousSimpleType(typedef, targetNamespace, chameleon,
+                    sImpl.getElemFormDefault(), sImpl.getAttFormDefault(),
+                    anonymousTypes, sImpl);
+            // This effectively disables support for simple types inside...
+            anonymousTypes.clear();
             state.warning("Nested simple types inside simple content restrictions are unsupported - ignoring", XmlErrorCodes.ILLEGAL_RESTRICTION, parseTree);
             // recovery: ignore the nested simple type element.
         }
@@ -710,7 +718,6 @@
         }
 
         // build attr model and anonymous types
-        List anonymousTypes = new ArrayList();
         SchemaAttributeModelImpl attrModel;
         if (baseType == null)
             attrModel = new SchemaAttributeModelImpl();

Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java?view=diff&r1=160954&r2=160955
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscSimpleTypeResolver.java Mon Apr 11 14:29:09 2005
@@ -208,14 +208,10 @@
         }
         else if (parseInner != null)
         {
-            itemImpl = new SchemaTypeImpl(sImpl.getContainer());
+            itemImpl = StscTranslator.translateAnonymousSimpleType(parseInner,
+                sImpl.getTargetNamespace(), sImpl.getChameleonNamespace() != null,
+                sImpl.getElemFormDefault(), sImpl.getAttFormDefault(), anonTypes, sImpl);
             errorLoc = parseInner;
-            itemImpl.setSimpleType(true);
-            itemImpl.setParseContext(parseInner, sImpl.getTargetNamespace(), sImpl.getChameleonNamespace() != null, sImpl.getElemFormDefault(), sImpl.getAttFormDefault(), false);
-            itemImpl.setOuterSchemaTypeRef(sImpl.getRef());
-            SchemaAnnotationImpl ann = SchemaAnnotationImpl.getAnnotation(sImpl.getContainer(), parseInner);
-            itemImpl.setAnnotation(ann);
-            anonTypes.add(itemImpl);
         }
         else
         {
@@ -317,15 +313,11 @@
         for (int i = 0; i < simpleTypes.length; i++)
         {
             // BUGBUG: see if non<simpleType> children can leak through
-            SchemaTypeImpl mImpl = new SchemaTypeImpl(sImpl.getContainer());
-            mImpl.setSimpleType(true);
-            mImpl.setParseContext(simpleTypes[i], sImpl.getTargetNamespace(), sImpl.getChameleonNamespace() != null, sImpl.getElemFormDefault(), sImpl.getAttFormDefault(), false);
+            SchemaTypeImpl mImpl = StscTranslator.translateAnonymousSimpleType(simpleTypes[i],
+                sImpl.getTargetNamespace(), sImpl.getChameleonNamespace() != null,
+                sImpl.getElemFormDefault(), sImpl.getAttFormDefault(), anonTypes, sImpl);
             memberImplList.add(mImpl);
-            mImpl.setOuterSchemaTypeRef(sImpl.getRef());
             mImpl.setAnonymousUnionMemberOrdinal(i + 1);
-            SchemaAnnotationImpl ann = SchemaAnnotationImpl.getAnnotation(sImpl.getContainer(), simpleTypes[i]);
-            mImpl.setAnnotation(ann);
-            anonTypes.add(mImpl);
         }
 
         // Recurse and resolve all member types
@@ -458,14 +450,9 @@
                 // recovery: oh well.
             }
             
-            baseImpl = new SchemaTypeImpl(sImpl.getContainer());
-            baseImpl.setSimpleType(true);
-            baseImpl.setParseContext(parseInner, sImpl.getTargetNamespace(), sImpl.getChameleonNamespace() != null, sImpl.getElemFormDefault(), sImpl.getAttFormDefault(), false);
-            // baseImpl.setSkippedAnonymousType(true);
-            baseImpl.setOuterSchemaTypeRef(sImpl.getRef());
-            SchemaAnnotationImpl ann = SchemaAnnotationImpl.getAnnotation(sImpl.getContainer(), parseInner);
-            baseImpl.setAnnotation(ann);
-            anonTypes.add(baseImpl);
+            baseImpl = StscTranslator.translateAnonymousSimpleType(parseInner,
+                sImpl.getTargetNamespace(), sImpl.getChameleonNamespace() != null,
+                sImpl.getElemFormDefault(), sImpl.getAttFormDefault(), anonTypes, sImpl);
         }
         else
         {

Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java?view=diff&r1=160954&r2=160955
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java Mon Apr 11 14:29:09 2005
@@ -53,6 +53,7 @@
 import org.apache.xmlbeans.impl.xb.xsdschema.NamedGroup;
 import org.apache.xmlbeans.impl.xb.xsdschema.RedefineDocument.Redefine;
 import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument.Schema;
+import org.apache.xmlbeans.impl.xb.xsdschema.SimpleType;
 import org.apache.xmlbeans.impl.xb.xsdschema.TopLevelAttribute;
 import org.apache.xmlbeans.impl.xb.xsdschema.TopLevelComplexType;
 import org.apache.xmlbeans.impl.xb.xsdschema.TopLevelElement;
@@ -811,6 +812,22 @@
         sType.setName(name);
         sType.setAnnotation(SchemaAnnotationImpl.getAnnotation(state.getContainer(targetNamespace), xsdType));
         sType.setUserData(getUserData(xsdType));
+        return sType;
+    }
+
+    /*package*/ static SchemaTypeImpl translateAnonymousSimpleType(SimpleType typedef,
+        String targetNamespace, boolean chameleon, String elemFormDefault,
+        String attFormDefault, List anonymousTypes, SchemaType outerType)
+    {
+        StscState state = StscState.get();
+        SchemaTypeImpl sType = new SchemaTypeImpl(state.getContainer(targetNamespace));
+        sType.setSimpleType(true);
+        sType.setParseContext(typedef, targetNamespace, chameleon,
+            elemFormDefault, attFormDefault, false);
+        sType.setOuterSchemaTypeRef(outerType.getRef());
+        sType.setAnnotation(SchemaAnnotationImpl.getAnnotation(state.getContainer(targetNamespace), typedef));
+        sType.setUserData(getUserData(typedef));
+        anonymousTypes.add(sType);
         return sType;
     }
 

Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/XmlObjectBase.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/XmlObjectBase.java?view=diff&r1=160954&r2=160955
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/XmlObjectBase.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/XmlObjectBase.java Mon Apr 11 14:29:09 2005
@@ -1079,7 +1079,8 @@
         if ((_flags & FLAG_STORE) != 0)
         {
             _flags &= ~FLAG_VALUE_DATED;
-            get_store().store_text(v);
+            if ((_flags & FLAG_SETTINGDEFAULT) == 0)
+                get_store().store_text(v);
             if (wasNilled)
                 get_store().invalidate_nil();
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: commits-help@xmlbeans.apache.org