[jboss-svn-commits] JBoss Common SVN: r3683 - in jbossxb/trunk/src: main/java/org/jboss/xb/builder and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 13 05:46:29 EST 2009


Author: alex.loubyansky at jboss.com
Date: 2009-11-13 05:46:28 -0500 (Fri, 13 Nov 2009)
New Revision: 3683

Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java
Log:
JBXB-232

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -208,33 +208,24 @@
          else
          {
             if(!item.ended) // could be ended if it's a choice
-            {
                endParticle(item, stack.peek1());
-            }
 
             ParticleBinding currentParticle = item.cursor.getCurrentParticle();
-            TermBinding term = currentParticle.getTerm();
-            if(item.repeatableParticleValue != null /* && currentParticle.isRepeatable()*/ && term.isWildcard())
-            {
+            if(item.repeatableParticleValue != null && currentParticle.getTerm().isWildcard())
                endRepeatableParticle(item, item.qName, currentParticle, item.particle);
-            }
 
             pop();
             if(item.particle.isRepeatable())
             {
                StackItem parentItem = stack.peek();
                if(parentItem.repeatableParticleValue != null)
-               {
                   endRepeatableParticle(parentItem, item.qName, item.particle, parentItem.particle);
-               }
             }
          }
       }
 
       if(elementBinding == null)
-      {
          throw new JBossXBRuntimeException("Failed to endElement " + qName + ": binding not found");
-      }
 
       if(!elementBinding.getQName().equals(endName))
       {
@@ -287,13 +278,9 @@
             
             schemaBinding = schemaResolver.resolve(namespaceURI, null, schemaLocation);
             if(schemaBinding != null)
-            {
                particle = schemaBinding.getElementParticle(startName);
-            }
             else
-            {
                throw new JBossXBRuntimeException("Failed to resolve schema nsURI=" + namespaceURI + " location=" + schemaLocation);
-            }
          }
          else
          {
@@ -327,9 +314,7 @@
                         {
                            pop();
                            if(parentItem.repeatableParticleValue != null)
-                           {
                               endRepeatableParticle(parentItem, item.qName, item.particle, parentItem.particle);
-                           }
                            continue;
                         }
                      }
@@ -452,25 +437,12 @@
                   StackItem poped = pop();
                   if(!poped.particle.isRepeatable() && stack.peek().cursor == null)
                   {
-                     // normally it should be an error
-                     // but there is an issue with wildcard binding: it is never bound as repeatable (but should be sometimes)
-                     // so, this hack will give another iteration over the whole parent type and make it seem like it's repeatable
-                     TermBinding popedTerm = poped.particle.getTerm();
-                     if(popedTerm instanceof SequenceBinding &&
-                           ((ModelGroupBinding)popedTerm).getParticles().size() == 1 &&
-                           ((ModelGroupBinding)popedTerm).getParticles().iterator().next().getTerm().isWildcard())
-                     {
-                        // hack
-                     }
-                     else
-                     {
-                        TermBinding t = cursor.getParticle().getTerm();
-                        StringBuffer sb = new StringBuffer(250);
-                        sb.append(startName).append(" cannot appear in this position. Expected content of ")
-                        .append(((ElementBinding)stack.peek().particle.getTerm()).getQName())
-                        .append(" is ").append(t);
-                        throw new JBossXBRuntimeException(sb.toString());
-                     }
+                     TermBinding t = cursor.getParticle().getTerm();
+                     StringBuffer sb = new StringBuffer(250);
+                     sb.append(startName).append(" cannot appear in this position. Expected content of ")
+                     .append(((ElementBinding)stack.peek().particle.getTerm()).getQName())
+                     .append(" is ").append(t);
+                     throw new JBossXBRuntimeException(sb.toString());
                   }
                }
                else
@@ -533,23 +505,14 @@
             (repeated ? stack.peek1().o : stack.peek().o);
          if(particle.getTerm().isWildcard())
          {
-            /*
-            WildcardBinding wildcard = (WildcardBinding)particle.getTerm();
-            ElementBinding element = wildcard.getElement(startName, atts);
-            */
             ElementBinding element = cursor.getElement();
             if(element == null)
-            {
-               throw new JBossXBRuntimeException("Failed to resolve element " +
-                  startName + " for wildcard."
-               );
-            }
+               throw new JBossXBRuntimeException("Failed to resolve element " + startName + " for wildcard.");
 
             if(!repeatedParticle && particle.isRepeatable())
-            {
                startRepeatableParticle(stack.peek(), parent, startName, particle);
-            }
-            particle = new ParticleBinding(element/*, particle.getMinOccurs(), particle.getMaxOccurs(), particle.getMaxOccursUnbounded()*/);
+
+            particle = new ParticleBinding(element);
          }
 
          ElementBinding element = (ElementBinding)particle.getTerm();
@@ -622,9 +585,7 @@
          if(interceptors.size() + localInterceptors.size() > 0)
          {
             if (repeated)
-            {
                pop();
-            }
 
             for (int i = 0; i < localInterceptors.size(); ++i)
             {
@@ -666,28 +627,20 @@
          {
             ParticleBinding stackParticle = repeated ? stack.peek1().particle : stack.peek().particle;
             if(stackParticle != null)
-            {
                parentBinding = (ElementBinding)stackParticle.getTerm();
-            }
          }
 
          if(parentBinding != null && parentBinding.getSchema() != null)
-         {
             schemaBinding = parentBinding.getSchema();
-         }
 
          String msg = "Element " +
             startName +
             " is not bound " +
             (parentBinding == null ? "as a global element." : "in type " + parentBinding.getType().getQName());
          if(schemaBinding != null && schemaBinding.isStrictSchema())
-         {
             throw new JBossXBRuntimeException(msg);
-         }
          else if(trace)
-         {
             log.trace(msg);
-         }
       }
 
       if(repeated)
@@ -711,6 +664,7 @@
    private void endRepeatableParent(QName startName)
    {
       int stackIndex = stack.size() - 2;
+      StackItem item;
       StackItem parentItem = stack.peek1();
       ParticleBinding parentParticle = null;
       while(true)
@@ -724,20 +678,35 @@
             );
          }
 
+         item = parentItem;
+
          parentParticle = parentItem.particle;
          if(parentParticle.isRepeatable())
+         {
+            parentItem = stack.peek(stackIndex - 1);
+            endParticle(item, parentItem);
+
+            ParticleHandler handler = getHandler(item.particle);
+            item.reset();
+            item.o = handler.startParticle(parentItem.o, item.qName, item.particle, null, nsRegistry);
+
             break;
+         }
 
-         StackItem item = parentItem;
+         // wildcards are not on the stack
+         ParticleBinding currentParticle = parentItem.cursor.getCurrentParticle();
+         if(currentParticle.getTerm().isWildcard() && currentParticle.isRepeatable())
+            break;
+         
          parentItem = stack.peek(--stackIndex);
          endParticle(item, parentItem);
       }
 
-      if(!parentParticle.isRepeatable())
+/*      if(!parentParticle.isRepeatable())
       {
          StringBuffer msg = new StringBuffer();
 
-         StackItem item = stack.peek();
+         item = stack.peek();
          ParticleBinding currentParticle = item.particle;
          msg.append("Failed to start ").append(startName).append(": ")
             .append(currentParticle.getTerm())
@@ -780,23 +749,14 @@
 
          throw new JBossXBRuntimeException(msg.toString());
       }
-
-      // todo startName is wrong here
-      StackItem item = parentItem;
-      parentItem = stack.peek(stackIndex - 1);
-      endParticle(item, parentItem);
-
-      ParticleHandler handler = getHandler(item.particle);
-      item.reset();
-      item.o = handler.startParticle(parentItem.o, startName, item.particle, null, nsRegistry);
-
+*/
       while(++stackIndex < stack.size() - 1)
       {
          parentItem = item;
          item = stack.peek(stackIndex);
-         handler = getHandler(item.particle);
+         ParticleHandler handler = getHandler(item.particle);
          item.reset();
-         item.o = handler.startParticle(parentItem.o, startName, item.particle, null, nsRegistry);
+         item.o = handler.startParticle(parentItem.o, item.qName, item.particle, null, nsRegistry);
       }
    }
 
@@ -818,7 +778,7 @@
    {
       if (trace)
          log.trace(" end repeatable (" + stack.size() + "): " + particle.getTerm());
-      RepeatableParticleHandler repeatableHandler = parentItem.repeatableHandler; //particle.getTerm().getRepeatableHandler();
+      RepeatableParticleHandler repeatableHandler = parentItem.repeatableHandler;
       // the way it is now it's never null
       repeatableHandler.endRepeatableParticle(parentItem.o, parentItem.repeatableParticleValue, elementName, particle, parentParticle);
       parentItem.repeatableParticleValue = null;
@@ -832,15 +792,12 @@
          throw new JBossXBRuntimeException(item.particle.getTerm() + " has already been ended.");
       }
 
-      ParticleBinding modelGroupParticle = item.particle;
-      ParticleHandler handler = item.handler;//getHandler(modelGroupParticle);
+      ParticleHandler handler = item.handler;
+      Object o = handler.endParticle(item.o, item.qName, item.particle);
 
-      Object o = handler.endParticle(item.o, item.qName, modelGroupParticle);
-
       item.ended = true;
 
       // model group should always have parent particle
-      //item = (StackItem)stack.peek(parentStackPos);
       if(parentItem.o != null)
       {
          ParticleBinding parentParticle = getNotSkippedParent().particle;//item.particle;
@@ -848,12 +805,9 @@
             parentParticle = parentItem.particle;
          
          if(parentItem.repeatableParticleValue == null)
-            setParent(handler, parentItem.o, o, item.qName, modelGroupParticle, parentParticle);
+            setParent(handler, parentItem.o, o, item.qName, item.particle, parentParticle);
          else
-         {
-            //RepeatableParticleHandler repeatableHandler = modelGroupParticle.getTerm().getRepeatableHandler();
-            parentItem.repeatableHandler.addTermValue(parentItem.repeatableParticleValue, o, item.qName, modelGroupParticle, parentParticle, handler);
-         }
+            parentItem.repeatableHandler.addTermValue(parentItem.repeatableParticleValue, o, item.qName, item.particle, parentParticle, handler);
       }
    }
 
@@ -1148,9 +1102,7 @@
             if(notSkippedParentItem.repeatableParticleValue == null)
                setParent(handler, parent, o, endName, particle, parentParticle);
             else
-            {
                notSkippedParentItem.repeatableHandler.addTermValue(notSkippedParentItem.repeatableParticleValue, o, endName, particle, parentParticle, handler);
-            }
          }
          else if(parentParticle != null && hasWildcard && stack.size() > 1)
          {

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -501,7 +501,6 @@
     * @param typeInfo the type info
     * @return the type binding
     */
-   @SuppressWarnings("unchecked")
    protected TypeBinding resolveTypeBinding(TypeInfo typeInfo)
    {
       if (trace)
@@ -1238,24 +1237,32 @@
          TypeInfo wildcardType = wildcardProperty.getType();
          TypeInfo type = wildcardType;
 
+         WildcardBinding wildcard = new WildcardBinding(schemaBinding);
+         ParticleBinding particleBinding = new ParticleBinding(wildcard);
+         localModel.addParticle(particleBinding);
+         particleBinding.setMinOccurs(0);
+
          // Setup any new model and determine the wildcard type
          if (wildcardType.isArray())
          {
+            particleBinding.setMaxOccursUnbounded(true);
+            wildcard.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(beanAdapterFactory));
             type = ((ArrayInfo) wildcardType).getComponentType();
             if (trace)
                log.trace("Wildcard " + wildcardProperty.getName() + " is an array of type " + type.getName());
          }
          else if (wildcardType.isCollection())
          {
-            localModel = createCollection(localModel);
+            particleBinding.setMaxOccursUnbounded(true);
             type = ((ClassInfo)wildcardProperty.getType()).getComponentType();
             if (trace)
                log.trace("Wildcard " + wildcardProperty.getName() + " is a collection of type " + type.getName());
          }
+         else
+            particleBinding.setMaxOccurs(1);
 
          XmlAnyElement xmlAnyElement = wildcardProperty.getUnderlyingAnnotation(XmlAnyElement.class);
          boolean isLax = xmlAnyElement == null ? true : xmlAnyElement.lax();
-         WildcardBinding wildcard = new WildcardBinding(schemaBinding);
          if (isLax)
             wildcard.setProcessContents((short) 3); // Lax
          else
@@ -1268,20 +1275,8 @@
             wildcard.setUnresolvedCharactersHandler(DOMHandler.INSTANCE);
          }
 
-         // Bind the particle to the model
-         ParticleBinding particleBinding = new ParticleBinding(wildcard);
-         particleBinding.setMinOccurs(0);
-         particleBinding.setMaxOccurs(1);
-         localModel.addParticle(particleBinding);
-
          wildcard.setWildcardHandler((ParticleHandler) wildcardHandler);
-         beanAdapterFactory.setWildcardHandler(wildcardHandler);
-         
-         if(wildcardType.isArray())
-         {
-            particleBinding.setMaxOccursUnbounded(true);
-            wildcard.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(beanAdapterFactory));
-         }
+         beanAdapterFactory.setWildcardHandler(wildcardHandler);         
       }
 
       JBossXmlChildWildcard childWildcard = typeInfo.getUnderlyingAnnotation(JBossXmlChildWildcard.class);
@@ -1982,29 +1977,11 @@
    }
 
    /**
-    * Create a collection
-    * 
-    * @param localModel the current model
-    * @return the new local model
-    */
-   private ModelGroupBinding createCollection(ModelGroupBinding localModel)
-   {
-      SequenceBinding sequenceBinding = new SequenceBinding(schemaBinding);
-      sequenceBinding.setHandler(BuilderParticleHandler.INSTANCE);
-      ParticleBinding particle = new ParticleBinding(sequenceBinding);
-      particle.setMinOccurs(0);
-      particle.setMaxOccursUnbounded(true);
-      localModel.addParticle(particle);
-      return sequenceBinding;
-   }
-
-   /**
     * Add a namespace to the schema
     * 
     * @param namespace the namespace
     * @param erase whether to erase if there was only the default namespace
     */
-   @SuppressWarnings("unchecked")
    private void addNamespace(String namespace, boolean erase)
    {
       Set<String> namespaces = schemaBinding.getNamespaces();
@@ -2123,10 +2100,6 @@
             throw new IllegalStateException("Failed to create an instance of " + adapterImplClass.getName(), e);
          }
 
-//         ClassInfo adapterImplInfo = (ClassInfo) factory.getTypeInfo(adapterImplClass);
-//         ClassInfo xmlAdapterInfo = adapterImplInfo.getGenericSuperclass();
-//         TypeInfo type = xmlAdapterInfo.getActualTypeArguments()[0];
-         
          adaptedType = ((ParameterizedType)adapterImplClass.getGenericSuperclass()).getActualTypeArguments()[0];
          adaptedTypeInfo = factory.getTypeInfo(adaptedType);
       }

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -272,11 +272,26 @@
       Collection<ParticleBinding> particles = sequence.getParticles();
       assertTrue(particles.size() == 1);
       ParticleBinding particle = particles.iterator().next();
+      assertFalse(particle.getMaxOccursUnbounded());
       term = particle.getTerm();
       assertNotNull(term);
       return term;
    }
 
+   protected TermBinding assertSingleRepeatableSequence(TermBinding term)
+   {
+      assertNotNull(term);
+      assertTrue(term instanceof SequenceBinding || term instanceof UnorderedSequenceBinding);
+      ModelGroupBinding sequence = (ModelGroupBinding) term;
+      Collection<ParticleBinding> particles = sequence.getParticles();
+      assertTrue(particles.size() == 1);
+      ParticleBinding particle = particles.iterator().next();
+      assertTrue(particle.getMaxOccursUnbounded());
+      term = particle.getTerm();
+      assertNotNull(term);
+      return term;
+   }
+
    /**
     * Find the xml
     * 

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -82,7 +82,7 @@
       assertNotNull(particle);
       TermBinding term = particle.getTerm();
       assertNotNull(term);
-      term = assertSingleSequence(term);
+      term = assertSingleRepeatableSequence(term);
       assertTrue(term instanceof WildcardBinding);
       WildcardBinding wildcardBinding = type.getWildcard();
       assertNotNull(wildcardBinding);

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -82,7 +82,7 @@
       assertNotNull(particle);
       TermBinding term = particle.getTerm();
       assertNotNull(term);
-      term = assertSingleSequence(term);
+      term = assertSingleRepeatableSequence(term);
       assertTrue(term instanceof WildcardBinding);
       WildcardBinding wildcardBinding = type.getWildcard();
       assertNotNull(wildcardBinding);

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -34,7 +34,6 @@
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
@@ -85,9 +84,7 @@
       assertNotNull(particle);
       TermBinding term = particle.getTerm();
       assertNotNull(term);
-      term = assertSingleSequence(term);
-      assertTrue(term instanceof SequenceBinding);
-      term = assertSingleSequence(term);
+      term = assertSingleRepeatableSequence(term);
       assertTrue(term instanceof WildcardBinding);
       WildcardBinding wildcardBinding = type.getWildcard();
       assertNotNull(wildcardBinding);

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java	2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java	2009-11-13 10:46:28 UTC (rev 3683)
@@ -36,7 +36,6 @@
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
@@ -85,9 +84,7 @@
       assertNotNull(particle);
       TermBinding term = particle.getTerm();
       assertNotNull(term);
-      term = assertSingleSequence(term);
-      assertTrue(term instanceof SequenceBinding);
-      term = assertSingleSequence(term);
+      term = assertSingleRepeatableSequence(term);
       assertTrue(term instanceof WildcardBinding);
       WildcardBinding wildcardBinding = type.getWildcard();
       assertNotNull(wildcardBinding);



More information about the jboss-svn-commits mailing list