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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Feb 18 07:56:51 EST 2009


Author: alex.loubyansky at jboss.com
Date: 2009-02-18 07:56:51 -0500 (Wed, 18 Feb 2009)
New Revision: 2984

Added:
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoParticleGroups.java
   jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoPropertyGroups.java
   jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoParticleGroupsUnmarshalling.xml
   jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoPropertyGroupsUnmarshalling.xml
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/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroupUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/ElementOrderUnitTestCase.java
Log:
JBXB-180 (fixes related to re-using already bound model group)

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-02-17 14:44:21 UTC (rev 2983)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2009-02-18 12:56:51 UTC (rev 2984)
@@ -469,9 +469,49 @@
                         // hack
                      }
                      else
-                        throw new JBossXBRuntimeException("Element " + startName +
-                           " cannot appear in this position (possibly child elements of " +
-                           ((ElementBinding)stack.peek().particle.getTerm()).getQName() + " are in the wrong order)");
+                     {
+                        TermBinding t = cursor.getParticle().getTerm();
+                        StringBuffer sb = new StringBuffer(250);
+                        sb.append("Element ").append(startName).append(" cannot appear in this position (possibly child elements of ")
+                        .append(((ElementBinding)stack.peek().particle.getTerm()).getQName()).append(" are in the wrong order).")
+                        .append(" Correct order of the current ");
+                        
+                        QName name = ((ModelGroupBinding)t).getQName();
+                        if(name != null)
+                           sb.append(name);
+                        else if(t instanceof SequenceBinding)
+                           sb.append("sequence");
+                        else if(t instanceof ChoiceBinding)
+                           sb.append("choice");
+                        else
+                           sb.append("all");
+
+                        sb.append(" group:");
+                        for(ParticleBinding p : ((ModelGroupBinding)t).getParticles())
+                        {
+                           t = p.getTerm();
+                           sb.append(' ');
+                           if(t.isElement())
+                              sb.append(((ElementBinding)t).getQName());
+                           else if(t.isModelGroup())
+                           {
+                              if(t instanceof SequenceBinding)
+                                 sb.append("{sequence");
+                              else if(t instanceof ChoiceBinding)
+                                 sb.append("{choice");
+                              else
+                                 sb.append("{all");
+                              name = ((ModelGroupBinding)t).getQName();
+                              if(name != null)
+                                 sb.append(' ').append(name);
+                              sb.append('}');
+                           }
+                           else
+                              sb.append("{wildcard}");
+                        }
+
+                        throw new JBossXBRuntimeException(sb.toString());
+                     }
                   }
                }
                else

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2009-02-17 14:44:21 UTC (rev 2983)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2009-02-18 12:56:51 UTC (rev 2984)
@@ -1234,6 +1234,7 @@
       TypeInfo propertyType = property.getType();
       if (trace)
          log.trace("Processing type=" + property.getBeanInfo().getName() + " property=" + property.getName());
+      System.out.println("Processing type=" + property.getBeanInfo().getName() + " property=" + property.getName());
 
       // This is illegal
       XmlTransient xmlTransient = property.getUnderlyingAnnotation(XmlTransient.class);
@@ -1281,8 +1282,10 @@
          
          // if it's a model group then 
          propertyXmlModelGroup = componentClass.getUnderlyingAnnotation(JBossXmlModelGroup.class);
+         if(propertyXmlModelGroup != null)
+            System.out.println("model group ann: " + propertyXmlModelGroup.name());
          if (propertyXmlType == null && propertyXmlModelGroup != null)
-         {
+         {System.out.println("model group: " + propertyXmlModelGroup.name());
             // model group value handler based on the model group name
             // TODO what if it doesn't have a name?
             AbstractPropertyHandler propertyHandler = null;
@@ -1671,7 +1674,7 @@
       }
    }
 
-   private ModelGroupBinding bindModelGroup(JBossXmlModelGroup annotation, PropertyInfo property,
+   private void bindModelGroup(JBossXmlModelGroup annotation, PropertyInfo property,
          BeanAdapterFactory beanAdapterFactory, AbstractPropertyHandler propertyHandler,
          TypeBinding typeBinding, ModelGroupBinding parentGroup)
    {
@@ -1695,148 +1698,156 @@
          groupName = new QName(groupNs, annotation.name());
 
       ModelGroupBinding group = null;
+      boolean createGroup = true;
       if (groupName != null)
       {
          group = schemaBinding.getGroup(groupName);
          if(group != null)
+            createGroup = false;
+      }
+      
+      if(createGroup)
+      {
+         String kind = annotation.kind();
+         if (kind.equals(JBossXmlConstants.MODEL_GROUP_SEQUENCE))
+            group = new SequenceBinding(schemaBinding);
+         else if (kind.equals(JBossXmlConstants.MODEL_GROUP_CHOICE))
+            group = new ChoiceBinding(schemaBinding);
+         else if (kind.equals(JBossXmlConstants.MODEL_GROUP_ALL))
+            group = new AllBinding(schemaBinding);
+         else
+            throw new IllegalStateException("Unexpected JBossXmlModelGroup.kind=" + kind);
+
+         if (groupName != null)
          {
-            parentGroup.addParticle(new ParticleBinding(group, 0, 1, property.getType().isCollection()));
-            return group;
+            // TODO what if it doesn't have a name? should an artificial one be created?
+            group.setQName(groupName);
+            schemaBinding.addGroup(group.getQName(), group);
          }
       }
       
-      String kind = annotation.kind();
-      if (kind.equals(JBossXmlConstants.MODEL_GROUP_SEQUENCE))
-         group = new SequenceBinding(schemaBinding);
-      else if (kind.equals(JBossXmlConstants.MODEL_GROUP_CHOICE))
-         group = new ChoiceBinding(schemaBinding);
-      else if (kind.equals(JBossXmlConstants.MODEL_GROUP_ALL))
-         group = new AllBinding(schemaBinding);
-      else
-         throw new IllegalStateException("Unexpected JBossXmlModelGroup.kind=" + kind);
+      parentGroup.addParticle(new ParticleBinding(group, 0, 1, property.getType().isCollection()));
 
-      if (groupName != null)
-      {
-         // TODO what if it doesn't have a name? should an artificial one be created?
-         group.setQName(groupName);
-         schemaBinding.addGroup(group.getQName(), group);
-      }
-
-      parentGroup.addParticle(new ParticleBinding(group, 0, 1, property.getType().isCollection()));               
-
       TypeInfo groupType = property.getType();
       if(groupType.isCollection())
          groupType = ((ClassInfo)groupType).getComponentType();
 
       if(annotation.particles().length == 0)
       {
-         group.setSkip(Boolean.FALSE);
-         
-         // handler for the model group members
-         BeanInfo groupBeanInfo = JBossXBBuilder.configuration.getBeanInfo(groupType);
-         BeanAdapterFactory propBeanAdapterFactory = createAdapterFactory(DefaultBeanAdapterBuilder.class, groupBeanInfo, null);
-         BeanHandler propHandler = new BeanHandler(groupBeanInfo.getName(), propBeanAdapterFactory);
-         group.setHandler(propHandler);
-
-         String[] memberOrder = annotation.propOrder();
-         if (memberOrder.length == 0 || memberOrder[0].length() == 0)
+         if(createGroup)
          {
-            List<String> propNames = new ArrayList<String>();
-            for (PropertyInfo prop : groupBeanInfo.getProperties())
-               propNames.add(prop.getName());
-            memberOrder = propNames.toArray(new String[propNames.size()]);
-         }
+            group.setSkip(Boolean.FALSE);
 
-         if (trace)
-            log.trace("Property order for " + annotation.kind() + " property " + property.getName() + ": " + Arrays.asList(memberOrder));
+            // handler for the model group members
+            BeanInfo groupBeanInfo = JBossXBBuilder.configuration.getBeanInfo(groupType);
+            BeanAdapterFactory propBeanAdapterFactory = createAdapterFactory(DefaultBeanAdapterBuilder.class, groupBeanInfo, null);
+            BeanHandler propHandler = new BeanHandler(groupBeanInfo.getName(), propBeanAdapterFactory);
+            group.setHandler(propHandler);
 
-         // bind model group members
-         for (String memberPropName : memberOrder)
-         {
-            if ("class".equals(memberPropName))
-               continue;
+            String[] memberOrder = annotation.propOrder();
+            if (memberOrder.length == 0 || memberOrder[0].length() == 0)
+            {
+               List<String> propNames = new ArrayList<String>();
+               for (PropertyInfo prop : groupBeanInfo.getProperties())
+                  propNames.add(prop.getName());
+               memberOrder = propNames.toArray(new String[propNames.size()]);
+            }
 
-            PropertyInfo memberProp = groupBeanInfo.getProperty(memberPropName);
-            TypeInfo memberTypeInfo = memberProp.getType();
-            XmlElement memberXmlElement = memberProp.getUnderlyingAnnotation(XmlElement.class);
+            if (trace)
+               log.trace("Property order for " + annotation.kind() + " property " + property.getName() + ": " + Arrays.asList(memberOrder));
 
-            String memberNamespace = null;
-            String memberName = null;
-            if (memberXmlElement != null)
+            // bind model group members
+            for (String memberPropName : memberOrder)
             {
-               if (!XmlElement.DEFAULT.class.equals(memberXmlElement.type()))
-                  memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(memberXmlElement.type());
-               if (memberNamespace == null)
-                  memberNamespace = memberXmlElement.namespace();
-               memberName = memberXmlElement.name();
-            }
+               if ("class".equals(memberPropName))
+                  continue;
 
-            boolean isCol = false;
-            AbstractPropertyHandler memberPropertyHandler = null;
-            if (memberProp.getType().isCollection())
-            {
-               memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberProp.getType());
-               isCol = true;
-               // if memberXmlElement is present then the collection item type is set explicitly
-               if (memberXmlElement == null || XmlElement.DEFAULT.class.equals(memberXmlElement.type()))
+               PropertyInfo memberProp = groupBeanInfo.getProperty(memberPropName);
+               TypeInfo memberTypeInfo = memberProp.getType();
+               XmlElement memberXmlElement = memberProp.getUnderlyingAnnotation(XmlElement.class);
+
+               String memberNamespace = null;
+               String memberName = null;
+               if (memberXmlElement != null)
                {
-                  JBossXmlCollection jbossXmlCollection = memberProp.getUnderlyingAnnotation(JBossXmlCollection.class);
-                  if (jbossXmlCollection != null)
-                     memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(jbossXmlCollection.type());
+                  if (!XmlElement.DEFAULT.class.equals(memberXmlElement.type()))
+                     memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(memberXmlElement.type());
+                  if (memberNamespace == null)
+                     memberNamespace = memberXmlElement.namespace();
+                  memberName = memberXmlElement.name();
+               }
+
+               boolean isCol = false;
+               AbstractPropertyHandler memberPropertyHandler = null;
+               if (memberProp.getType().isCollection())
+               {
+                  memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberProp.getType());
+                  isCol = true;
+                  // if memberXmlElement is present then the collection item type is set explicitly
+                  if (memberXmlElement == null || XmlElement.DEFAULT.class.equals(memberXmlElement.type()))
+                  {
+                     JBossXmlCollection jbossXmlCollection = memberProp.getUnderlyingAnnotation(JBossXmlCollection.class);
+                     if (jbossXmlCollection != null)
+                        memberTypeInfo = memberTypeInfo.getTypeInfoFactory().getTypeInfo(jbossXmlCollection.type());
+                     memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
+                  }
+               }
+               // if it is bound with XmlElement.type to a collection
+               else if (memberTypeInfo.isCollection())
+               {
+                  memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberTypeInfo);
+                  isCol = true;
                   memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
                }
-            }
-            // if it is bound with XmlElement.type to a collection
-            else if (memberTypeInfo.isCollection())
-            {
-               memberPropertyHandler = new CollectionPropertyHandler(memberProp, memberTypeInfo);
-               isCol = true;
-               memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
-            }
-            else
-            {
-               memberPropertyHandler = new PropertyHandler(memberProp, memberTypeInfo);
-            }
+               else
+               {
+                  memberPropertyHandler = new PropertyHandler(memberProp, memberTypeInfo);
+               }
 
-            JBossXmlNsPrefix memberPrefix = memberProp.getUnderlyingAnnotation(JBossXmlNsPrefix.class);
-            String memberOverridenDefaultNamespace = defaultNamespace;
-            String prefixNs = null;
-            if (memberPrefix != null)
-            {
-               prefixNs = schemaBinding.getNamespace(memberPrefix.prefix());
-               if (prefixNs == null && memberPrefix.schemaTargetIfNotMapped())
-                  throw new IllegalStateException("Prefix '" + memberPrefix.prefix()
-                        + "' is not mapped to any namespace!");
+               JBossXmlNsPrefix memberPrefix = memberProp.getUnderlyingAnnotation(JBossXmlNsPrefix.class);
+               String memberOverridenDefaultNamespace = defaultNamespace;
+               String prefixNs = null;
+               if (memberPrefix != null)
+               {
+                  prefixNs = schemaBinding.getNamespace(memberPrefix.prefix());
+                  if (prefixNs == null && memberPrefix.schemaTargetIfNotMapped())
+                     throw new IllegalStateException("Prefix '" + memberPrefix.prefix() + "' is not mapped to any namespace!");
 
-               if (memberPrefix.applyToComponentQName())
-                  memberNamespace = prefixNs;
-            }
+                  if (memberPrefix.applyToComponentQName())
+                     memberNamespace = prefixNs;
+               }
 
-            QName memberQName = generateXmlName(memberProp.getName(), elementForm, memberNamespace, memberName);
-            propBeanAdapterFactory.addProperty(memberQName, memberPropertyHandler);
+               QName memberQName = generateXmlName(memberProp.getName(), elementForm, memberNamespace, memberName);
+               propBeanAdapterFactory.addProperty(memberQName, memberPropertyHandler);
 
-            if (prefixNs != null && memberPrefix.applyToComponentContent())
-               defaultNamespace = prefixNs;
+               if (prefixNs != null && memberPrefix.applyToComponentContent())
+                  defaultNamespace = prefixNs;
 
-            XBValueAdapter valueAdapter = null;
-            XmlJavaTypeAdapter xmlTypeAdapter = memberProp.getUnderlyingAnnotation(XmlJavaTypeAdapter.class);
-            if (xmlTypeAdapter != null)
-            {
-               valueAdapter = new XBValueAdapter(xmlTypeAdapter.value(), memberTypeInfo.getTypeInfoFactory());
-               memberTypeInfo = valueAdapter.getAdaptedTypeInfo();
-            }
+               try
+               {
+                  XBValueAdapter valueAdapter = null;
+                  XmlJavaTypeAdapter xmlTypeAdapter = memberProp.getUnderlyingAnnotation(XmlJavaTypeAdapter.class);
+                  if (xmlTypeAdapter != null)
+                  {
+                     valueAdapter = new XBValueAdapter(xmlTypeAdapter.value(), memberTypeInfo.getTypeInfoFactory());
+                     memberTypeInfo = valueAdapter.getAdaptedTypeInfo();
+                  }
 
-            TypeBinding memberTypeBinding = resolveTypeBinding(memberTypeInfo);
-            ElementBinding memberElement = createElementBinding(memberTypeInfo, memberTypeBinding, memberQName, false);
-            memberElement.setNillable(true);
-            memberElement.setValueAdapter(valueAdapter);
-            ParticleBinding memberParticle = new ParticleBinding(memberElement, 0, 1, isCol);
-            group.addParticle(memberParticle);
+                  TypeBinding memberTypeBinding = resolveTypeBinding(memberTypeInfo);
+                  ElementBinding memberElement = createElementBinding(memberTypeInfo, memberTypeBinding, memberQName, false);
+                  memberElement.setNillable(true);
+                  memberElement.setValueAdapter(valueAdapter);
+                  ParticleBinding memberParticle = new ParticleBinding(memberElement, 0, 1, isCol);
+                  group.addParticle(memberParticle);
 
-            if (trace)
-               log.trace("added " + memberParticle + " to " + annotation.kind() + ", property " + property.getName());
-
-            defaultNamespace = memberOverridenDefaultNamespace;
+                  if (trace)
+                     log.trace("added " + memberParticle + " to " + annotation.kind() + ", property " + property.getName());
+               }
+               finally
+               {
+                  defaultNamespace = memberOverridenDefaultNamespace;
+               }
+            }
          }
          
          // TODO what if it doesn't have a name?
@@ -1848,21 +1859,25 @@
          {
             XmlElement element = member.element();
             QName memberQName = generateXmlName(element.name(), XmlNsForm.QUALIFIED, element.namespace(), null);
-            TypeInfo memberTypeInfo = groupType.getTypeInfoFactory().getTypeInfo(member.type());
 
-            boolean isCol = false;
-            if (memberTypeInfo.isCollection())
+            if(createGroup)
             {
-               memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
-               isCol = true;
-            }
+               TypeInfo memberTypeInfo = groupType.getTypeInfoFactory().getTypeInfo(member.type());
 
-            TypeBinding memberTypeBinding = resolveTypeBinding(memberTypeInfo);
-            ElementBinding memberElement = createElementBinding(memberTypeInfo, memberTypeBinding, memberQName, false);
-            memberElement.setNillable(true);
-            ParticleBinding memberParticle = new ParticleBinding(memberElement, 0, 1, isCol);
-            group.addParticle(memberParticle);
+               boolean isCol = false;
+               if (memberTypeInfo.isCollection())
+               {
+                  memberTypeInfo = ((ClassInfo) memberTypeInfo).getComponentType();
+                  isCol = true;
+               }
 
+               TypeBinding memberTypeBinding = resolveTypeBinding(memberTypeInfo);
+               ElementBinding memberElement = createElementBinding(memberTypeInfo, memberTypeBinding, memberQName, false);
+               memberElement.setNillable(true);
+               ParticleBinding memberParticle = new ParticleBinding(memberElement, 0, 1, isCol);
+               group.addParticle(memberParticle);
+            }
+            
             if(propertyHandler != null)
                beanAdapterFactory.addProperty(memberQName, propertyHandler);
             else
@@ -1871,7 +1886,6 @@
       }
       
       defaultNamespace = overridenDefaultNamespace;
-      return group;
    }
       
    private SequenceBinding bindXmlElementWrapper(TypeInfo propertyType, ModelGroupBinding parentModel, XmlElementWrapper annotation, QName wrapperQName)

Added: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoParticleGroups.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoParticleGroups.java	                        (rev 0)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoParticleGroups.java	2009-02-18 12:56:51 UTC (rev 2984)
@@ -0,0 +1,109 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * A ReusedPropertiesGroup.
+ * 
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+ at XmlRootElement(name="main-root")
+ at XmlType(propOrder={"group1", "group2"})
+public class RootWithTwoParticleGroups
+{
+   private GroupWrapper1 group1;
+   private GroupWrapper2 group2;
+   
+   public GroupWrapper1 getGroup1()
+   {
+      return this.group1;
+   }
+   
+   public void setGroup1(GroupWrapper1 group1)
+   {
+      this.group1 = group1;
+   }
+
+   public GroupWrapper2 getGroup2()
+   {
+      return this.group2;
+   }
+   
+   public void setGroup2(GroupWrapper2 group2)
+   {
+      this.group2 = group2;
+   }
+   
+   public static class GroupWrapper1
+   {
+      private AbstractChoice group;
+      
+      public AbstractChoice getGroup()
+      {
+         return group;
+      }
+      
+      public void setGroup(AbstractChoice group)
+      {
+         this.group = group;
+      }
+      
+      public String getE()
+      {
+         return "";
+      }
+      
+      public void setE(String e)
+      {
+         
+      }
+   }
+
+   public static class GroupWrapper2
+   {
+      private AbstractChoice group;
+      
+      public AbstractChoice getGroup()
+      {
+         return group;
+      }
+      
+      public void setGroup(AbstractChoice group)
+      {
+         this.group = group;
+      }
+
+      public String getE()
+      {
+         return "";
+      }
+      
+      public void setE(String e)
+      {
+         
+      }
+   }
+}

Added: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoPropertyGroups.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoPropertyGroups.java	                        (rev 0)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/support/RootWithTwoPropertyGroups.java	2009-02-18 12:56:51 UTC (rev 2984)
@@ -0,0 +1,89 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * A ReusedPropertiesGroup.
+ * 
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+ at XmlRootElement(name="main-root")
+ at XmlType(propOrder={"group1", "group2"})
+public class RootWithTwoPropertyGroups
+{
+   private GroupWrapper1 group1;
+   private GroupWrapper2 group2;
+   
+   public GroupWrapper1 getGroup1()
+   {
+      return this.group1;
+   }
+   
+   public void setGroup1(GroupWrapper1 group1)
+   {
+      this.group1 = group1;
+   }
+
+   public GroupWrapper2 getGroup2()
+   {
+      return this.group2;
+   }
+   
+   public void setGroup2(GroupWrapper2 group2)
+   {
+      this.group2 = group2;
+   }
+   
+   public static class GroupWrapper1
+   {
+      private PropertiesSequence group;
+      
+      public PropertiesSequence getGroup()
+      {
+         return group;
+      }
+      
+      public void setGroup(PropertiesSequence group)
+      {
+         this.group = group;
+      }
+   }
+
+   public static class GroupWrapper2
+   {
+      private PropertiesSequence group;
+      
+      public PropertiesSequence getGroup()
+      {
+         return group;
+      }
+      
+      public void setGroup(PropertiesSequence group)
+      {
+         this.group = group;
+      }
+   }
+}

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroupUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroupUnitTestCase.java	2009-02-17 14:44:21 UTC (rev 2983)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroupUnitTestCase.java	2009-02-18 12:56:51 UTC (rev 2984)
@@ -46,6 +46,10 @@
 import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithPropertiesChoiceCollection;
 import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithPropertiesSequence;
 import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithPropertiesSequenceCollection;
+import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithTwoParticleGroups;
+import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithTwoPropertyGroups;
+import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithTwoPropertyGroups.GroupWrapper1;
+import org.jboss.test.xb.builder.object.type.jbossxmlmodelgroup.support.RootWithTwoPropertyGroups.GroupWrapper2;
 import org.jboss.xb.binding.sunday.unmarshalling.AllBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ChoiceBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
@@ -79,6 +83,26 @@
       assertEquals("c", g.getC());
    }
 
+   public void testRootWithTwoPropertyGroupsUnmarshalling() throws Exception
+   {
+      RootWithTwoPropertyGroups o = unmarshalObject(RootWithTwoPropertyGroups.class);
+      GroupWrapper1 gw1 = o.getGroup1();
+      assertNotNull(gw1);
+      PropertiesSequence g = gw1.getGroup();
+      assertNotNull(g);
+      assertEquals("a", g.getA());
+      assertEquals("b", g.getB());
+      assertEquals("c", g.getC());
+      
+      GroupWrapper2 gw2 = o.getGroup2();
+      assertNotNull(gw2);
+      g = gw2.getGroup();
+      assertNotNull(g);
+      assertEquals("a", g.getA());
+      assertEquals("b", g.getB());
+      assertEquals("c", g.getC());
+   }
+
    public void testPropertiesSequenceCollectionUnmarshalling() throws Exception
    {
       RootWithPropertiesSequenceCollection o = unmarshalObject(RootWithPropertiesSequenceCollection.class);
@@ -192,6 +216,24 @@
       assertEquals("b", choice.getValue());
    }
 
+   public void testRootWithTwoParticleGroupsUnmarshalling() throws Exception
+   {
+      RootWithTwoParticleGroups o = unmarshalObject(RootWithTwoParticleGroups.class);
+      RootWithTwoParticleGroups.GroupWrapper1 group1 = o.getGroup1();
+      assertNotNull(group1);
+      AbstractChoice choice = group1.getGroup();
+      assertNotNull(choice);
+      assertTrue(choice instanceof ChoiceB);
+      assertEquals("b", choice.getValue());
+      
+      RootWithTwoParticleGroups.GroupWrapper2 group2 = o.getGroup2();
+      assertNotNull(group2);
+      choice = group2.getGroup();
+      assertNotNull(choice);
+      assertTrue(choice instanceof ChoiceA);
+      assertEquals("a", choice.getValue());
+   }
+
    public void testParticlesChoiceCollectionUnmarshalling() throws Exception
    {
       RootWithParticlesChoiceCollection o = unmarshalObject(RootWithParticlesChoiceCollection.class);
@@ -231,11 +273,16 @@
       TermBinding t = e.getType().getParticle().getTerm();
       assertTrue(t instanceof SequenceBinding);
       SequenceBinding s = (SequenceBinding) t;
+      assertParticleChoiceBinding(s);
+   }
+
+   private void assertParticleChoiceBinding(SequenceBinding s)
+   {
       Collection<ParticleBinding> particles = s.getParticles();
       assertEquals(2, particles.size());
       Iterator<ParticleBinding> i = particles.iterator();
       ParticleBinding p = i.next();
-      t = p.getTerm();
+      TermBinding t = p.getTerm();
       assertTrue(t instanceof ChoiceBinding);
       assertEquals(1, p.getMaxOccurs());
       assertFalse(p.getMaxOccursUnbounded());
@@ -345,6 +392,68 @@
       assertEquals(new QName("e"), ((ElementBinding)t).getQName());
    }
 
+   public void testRootWithTwoPropertyGroupsBinding() throws Exception
+   {
+      SchemaBinding schema = JBossXBBuilder.build(RootWithTwoPropertyGroups.class);
+      ElementBinding e = schema.getElement(new QName("main-root"));
+      assertNotNull(e);
+      TermBinding t = e.getType().getParticle().getTerm();
+      assertTrue(t instanceof SequenceBinding);
+      Collection<ParticleBinding> particles = ((SequenceBinding)t).getParticles();
+      assertEquals(2, particles.size());
+      Iterator<ParticleBinding> i = particles.iterator();
+      ParticleBinding p = i.next();
+      t = p.getTerm();
+      assertTrue(t.isElement());
+      assertEquals(0, p.getMinOccurs());
+      assertEquals(1, p.getMaxOccurs());
+      assertFalse(p.getMaxOccursUnbounded());
+      e = (ElementBinding) t;
+      assertEquals(new QName("group1"), e.getQName());
+      assertPropertiesSequenceBinding((SequenceBinding)e.getType().getParticle().getTerm(), false);
+      
+      p = i.next();
+      t = p.getTerm();
+      assertTrue(t.isElement());
+      assertEquals(0, p.getMinOccurs());
+      assertEquals(1, p.getMaxOccurs());
+      assertFalse(p.getMaxOccursUnbounded());
+      e = (ElementBinding) t;
+      assertEquals(new QName("group2"), e.getQName());
+      assertPropertiesSequenceBinding((SequenceBinding)e.getType().getParticle().getTerm(), false);
+   }
+
+   public void testRootWithTwoParticleGroupsBinding() throws Exception
+   {
+      SchemaBinding schema = JBossXBBuilder.build(RootWithTwoParticleGroups.class);
+      ElementBinding e = schema.getElement(new QName("main-root"));
+      assertNotNull(e);
+      TermBinding t = e.getType().getParticle().getTerm();
+      assertTrue(t instanceof SequenceBinding);
+      Collection<ParticleBinding> particles = ((SequenceBinding)t).getParticles();
+      assertEquals(2, particles.size());
+      Iterator<ParticleBinding> i = particles.iterator();
+      ParticleBinding p = i.next();
+      t = p.getTerm();
+      assertTrue(t.isElement());
+      assertEquals(0, p.getMinOccurs());
+      assertEquals(1, p.getMaxOccurs());
+      assertFalse(p.getMaxOccursUnbounded());
+      e = (ElementBinding) t;
+      assertEquals(new QName("group1"), e.getQName());
+      assertParticleChoiceBinding((SequenceBinding) e.getType().getParticle().getTerm());
+      
+      p = i.next();
+      t = p.getTerm();
+      assertTrue(t.isElement());
+      assertEquals(0, p.getMinOccurs());
+      assertEquals(1, p.getMaxOccurs());
+      assertFalse(p.getMaxOccursUnbounded());
+      e = (ElementBinding) t;
+      assertEquals(new QName("group2"), e.getQName());
+      assertParticleChoiceBinding((SequenceBinding) e.getType().getParticle().getTerm());
+   }
+
    private void assertPropertiesSequenceBinding(Class<?> root, boolean inCollection)
    {
       SchemaBinding schema = JBossXBBuilder.build(root);
@@ -353,10 +462,15 @@
       TermBinding t = e.getType().getParticle().getTerm();
       assertTrue(t instanceof SequenceBinding);
       SequenceBinding s = (SequenceBinding) t;
+      assertPropertiesSequenceBinding(s, inCollection);
+   }
+
+   private void assertPropertiesSequenceBinding(SequenceBinding s, boolean inCollection)
+   {
       Collection<ParticleBinding> particles = s.getParticles();
       assertEquals(1, particles.size());
       ParticleBinding p = particles.iterator().next();
-      t = p.getTerm();
+      TermBinding t = p.getTerm();
       assertTrue(t instanceof SequenceBinding);
       //assertEquals(0, p.getMinOccurs());
       assertEquals(1, p.getMaxOccurs());

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/ElementOrderUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/ElementOrderUnitTestCase.java	2009-02-17 14:44:21 UTC (rev 2983)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/ElementOrderUnitTestCase.java	2009-02-18 12:56:51 UTC (rev 2984)
@@ -60,7 +60,8 @@
       catch(JBossXBException e)
       {
          JBossXBRuntimeException re = (JBossXBRuntimeException) e.getCause();
-         assertEquals("Element first cannot appear in this position (possibly child elements of root are in the wrong order)", re.getMessage());
+         assertEquals("Element first cannot appear in this position (possibly child elements of root are in the wrong order). " +
+               "Correct order of the current sequence group: first second {sequence abSequence} {sequence cdSequence}", re.getMessage());
       }
    }
    
@@ -83,7 +84,8 @@
       catch(JBossXBException e)
       {
          JBossXBRuntimeException re = (JBossXBRuntimeException) e.getCause();
-         assertEquals("Element a cannot appear in this position (possibly child elements of root are in the wrong order)", re.getMessage());
+         assertEquals("Element a cannot appear in this position (possibly child elements of root are in the wrong order). " +
+               "Correct order of the current sequence group: first second {sequence abSequence} {sequence cdSequence}", re.getMessage());
       }
    }
    

Added: jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoParticleGroupsUnmarshalling.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoParticleGroupsUnmarshalling.xml	                        (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoParticleGroupsUnmarshalling.xml	2009-02-18 12:56:51 UTC (rev 2984)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<main-root>
+   <group1>
+      <b>b</b>
+   </group1>
+   <group2>
+      <a>a</a>
+   </group2>
+</main-root>

Added: jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoPropertyGroupsUnmarshalling.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoPropertyGroupsUnmarshalling.xml	                        (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xb/builder/object/type/jbossxmlmodelgroup/test/JBossXmlModelGroup_testRootWithTwoPropertyGroupsUnmarshalling.xml	2009-02-18 12:56:51 UTC (rev 2984)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<main-root>
+   <group1>
+      <c>c</c>
+      <b>b</b>
+      <a>a</a>
+   </group1>
+   <group2>
+      <c>c</c>
+      <b>b</b>
+      <a>a</a>
+   </group2>
+</main-root>
\ No newline at end of file




More information about the jboss-svn-commits mailing list