[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