[jboss-svn-commits] JBoss Common SVN: r2972 - in jbossxb/trunk/src: main/java/org/jboss/xb/builder and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Feb 7 02:42:05 EST 2009
Author: alex.loubyansky at jboss.com
Date: 2009-02-07 02:42:05 -0500 (Sat, 07 Feb 2009)
New Revision: 2972
Added:
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ABSequence.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/CDSequence.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ElementOrderRoot.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/
jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/ElementOrderUnitTestCase.java
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidABSequence.xml
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidOneTwoOrder.xml
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidRepeatedCD.xml
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongABSequence.xml
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongOneTwoOrder.xml
jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongRepeatedCD.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/jbossxmlpreservewhitespace/support/CustomizedSchemaRoot.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/DefaultsRoot.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmltype/adapter/Adapted.java
Log:
JBXB-174, JBXB-175
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-05 15:30:13 UTC (rev 2971)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -451,11 +451,28 @@
List<ModelGroupBinding.Cursor> newCursors = cursor.startElement(startName, atts);
if(newCursors.isEmpty())
{
- if(!item.ended) // this is for choices
+ if(!item.ended)
+ endParticle(item, startName, 1);
+
+ StackItem poped = pop();
+
+ if(!poped.particle.isRepeatable() && stack.peek().cursor == null)
{
- endParticle(item, startName, 1);
+ // 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
+ 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)");
}
- pop();
}
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-05 15:30:13 UTC (rev 2971)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -880,12 +880,14 @@
property.getUnderlyingAnnotation(XmlElementRefs.class) == null)
ignoreXmlAnyElement = true;
}
- else if (!seenXmlAnyElement && wildcardProperty == null && property.getType().getName().equals(org.w3c.dom.Element.class.getName()))
+ else if (property.getType().getName().equals(org.w3c.dom.Element.class.getName()) && !seenXmlAnyElement && wildcardProperty == null)
{
if (trace)
- log.trace("Using type=" + beanInfo.getName() + " property=" + property.getName() + " as the base wildcard");
+ log.trace("Using type=" + beanInfo.getName() + " property=" + property.getName()
+ + " as the base wildcard");
if (wildcardProperty != null)
- throw new RuntimeException("@XmlAnyElement seen on two properties: " + property.getName() + " and " + wildcardProperty.getName());
+ throw new RuntimeException("@XmlAnyElement seen on two properties: " + property.getName() + " and "
+ + wildcardProperty.getName());
wildcardProperty = property;
}
@@ -1059,6 +1061,7 @@
typeParticle.setMinOccurs(0);
typeParticle.setMaxOccursUnbounded(true);
TypeInfo memberBaseType = typeInfo.getComponentType();
+
JBossXmlModelGroup xmlModelGroup = ((ClassInfo) memberBaseType)
.getUnderlyingAnnotation(JBossXmlModelGroup.class);
if (xmlModelGroup != null && xmlModelGroup.particles().length > 0)
@@ -1230,7 +1233,7 @@
// Dom element?
if (Element.class.getName().equals(type.getName()))
- {
+ {System.out.println("wildcard prop " + wildcardProperty.getName());
wildcard.setUnresolvedElementHandler(DOMHandler.INSTANCE);
wildcard.setUnresolvedCharactersHandler(DOMHandler.INSTANCE);
}
@@ -1324,7 +1327,7 @@
{
// this is the type that should be analyzed
propertyType = propertyType.getTypeInfoFactory().getTypeInfo(xmlCol.type());
- }
+ }
}
// Is this property bound to a model group
else if (!property.getType().isPrimitive())
@@ -1341,192 +1344,18 @@
JBossXmlModelGroup xmlModelGroup = propClassInfo.getUnderlyingAnnotation(JBossXmlModelGroup.class);
if (xmlModelGroup != null && xmlModelGroup.particles().length == 0)
{
- if (trace)
- log.trace("Property " + property.getName() + " is bound to " + xmlModelGroup.kind());
-
- String groupNs = defaultNamespace;
- String overridenDefaultNamespace = defaultNamespace;
- JBossXmlNsPrefix nsPrefix = property.getUnderlyingAnnotation(JBossXmlNsPrefix.class);
- if (nsPrefix != null)
- {
- String ns = schemaBinding.getNamespace(nsPrefix.prefix());
- if (ns == null && nsPrefix.schemaTargetIfNotMapped())
- {
- throw new IllegalStateException("Prefix '" + nsPrefix.prefix()
- + "' is not mapped to any namespace!");
- }
-
- if(nsPrefix.applyToComponentQName())
- groupNs = ns;
- if(nsPrefix.applyToComponentContent())
- defaultNamespace = ns;
- }
+ ModelGroupBinding group = bindModelGroupType(property, model, beanAdapterFactory, propClassInfo, xmlModelGroup);
+ model.addParticle(new ParticleBinding(group));
- QName groupName = null;
- if (!JBossXmlConstants.DEFAULT.equals(xmlModelGroup.name()))
- groupName = new QName(groupNs, xmlModelGroup.name());
-
- ModelGroupBinding propertyGroup = null;
- if (groupName != null)
- propertyGroup = schemaBinding.getGroup(groupName);
-
- if (propertyGroup == null)
- {
- if (xmlModelGroup.kind().equals(JBossXmlConstants.MODEL_GROUP_SEQUENCE))
- {
- propertyGroup = new SequenceBinding(schemaBinding);
- }
- else if (xmlModelGroup.kind().equals(JBossXmlConstants.MODEL_GROUP_CHOICE))
- {
- propertyGroup = new ChoiceBinding(schemaBinding);
- }
- else if (xmlModelGroup.kind().equals(JBossXmlConstants.MODEL_GROUP_ALL))
- {
- propertyGroup = new AllBinding(schemaBinding);
- }
- else
- {
- throw new IllegalStateException("Unexpected JBossXmlModelGroup.kind=" + xmlModelGroup.kind());
- }
-
- if (groupName != null)
- {
- // TODO what if it doesn't have a name? should an artificial one be created?
- propertyGroup.setQName(groupName);
- schemaBinding.addGroup(propertyGroup.getQName(), propertyGroup);
- }
-
- propertyGroup.setSkip(Boolean.FALSE);
-
- // handler for the model group members
- BeanInfo propBeanInfo = JBossXBBuilder.configuration.getBeanInfo(propClassInfo);
- BeanAdapterFactory propBeanAdapterFactory = createAdapterFactory(DefaultBeanAdapterBuilder.class, propBeanInfo, null);
- BeanHandler propHandler = new BeanHandler(propBeanInfo.getName(), propBeanAdapterFactory);
- propertyGroup.setHandler(propHandler);
-
- String[] memberOrder = xmlModelGroup.propOrder();
- if (memberOrder.length == 0 || memberOrder[0].length() == 0)
- {
- List<String> propNames = new ArrayList<String>();
- for (PropertyInfo prop : propBeanInfo.getProperties())
- {
- propNames.add(prop.getName());
- }
- memberOrder = propNames.toArray(new String[propNames.size()]);
- }
-
- if (trace)
- log.trace("Property order for " + xmlModelGroup.kind() + " property " + property.getName() + ": "
- + Arrays.asList(memberOrder));
-
- // bind model group members
- for (String memberPropName : memberOrder)
- {
- if ("class".equals(memberPropName))
- {
- continue;
- }
-
- PropertyInfo memberProp = propBeanInfo.getProperty(memberPropName);
- TypeInfo memberTypeInfo = memberProp.getType();
- XmlElement memberXmlElement = memberProp.getUnderlyingAnnotation(XmlElement.class);
-
- String memberNamespace = null;
- String memberName = null;
- if (memberXmlElement != null)
- {
- 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();
- }
- 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!");
-
- if(memberPrefix.applyToComponentQName())
- memberNamespace = prefixNs;
- }
-
- QName memberQName = generateXmlName(memberProp.getName(), elementForm, memberNamespace, memberName);
- propBeanAdapterFactory.addProperty(memberQName, memberPropertyHandler);
-
- 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();
- }
-
- 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);
- propertyGroup.addParticle(memberParticle);
-
- if (trace)
- log.trace("added " + memberParticle + " to " + xmlModelGroup.kind() + ", property " + property.getName());
-
- defaultNamespace = memberOverridenDefaultNamespace;
- }
- }
-
- defaultNamespace = overridenDefaultNamespace;
-
- model.addParticle(new ParticleBinding(propertyGroup));
-
// model group value handler based on the model group name
// TODO what if it doesn't have a name?
AbstractPropertyHandler propertyHandler = null;
- if (propertyType.isCollection())
+ if (propClassInfo.isCollection())
propertyHandler = new CollectionPropertyHandler(property, propClassInfo);
else
- {
propertyHandler = new PropertyHandler(property, propClassInfo);
- }
- beanAdapterFactory.addProperty(propertyGroup.getQName(), propertyHandler);
+ beanAdapterFactory.addProperty(group.getQName(), propertyHandler);
+
return;
}
}
@@ -1767,15 +1596,28 @@
// here we get the comp type based on the non-overriden property type...
// which feels like a weak point
TypeInfo typeArg = ((ClassInfo)property.getType()).getComponentType();
-
- if (typeArg != null && ((ClassInfo)typeArg).getUnderlyingAnnotation(JBossXmlModelGroup.class) == null)
- {// it may be a model group in which case we don't want to change the type
- // TODO yes, this is another hack with collections
- JBossXmlChild xmlChild = ((ClassInfo) propertyType).getUnderlyingAnnotation(JBossXmlChild.class);
- if (xmlChild == null && localPropertyType.equals(propertyType))
- { // the localPropertyType was not overriden previously so use the collection parameter type
- localPropertyType = typeArg;
+ if (typeArg != null)
+ {
+ JBossXmlModelGroup xmlModelGroup = typeArg.isPrimitive() ? null : ((ClassInfo)typeArg).getUnderlyingAnnotation(JBossXmlModelGroup.class);
+ if(xmlModelGroup != null)
+ {
+ if (xmlModelGroup.particles().length == 0)
+ {
+ ModelGroupBinding group = bindModelGroupType(property, model, beanAdapterFactory, (ClassInfo)typeArg, xmlModelGroup);
+ model.addParticle(new ParticleBinding(group, 0, 1, true));
+ // TODO what if it doesn't have a name?
+ beanAdapterFactory.addProperty(group.getQName(), propertyHandler);
+ return;
+ }
}
+ else
+ {
+ JBossXmlChild xmlChild = ((ClassInfo) propertyType).getUnderlyingAnnotation(JBossXmlChild.class);
+ if (xmlChild == null && localPropertyType.equals(propertyType))
+ { // the localPropertyType was not overriden previously so use the collection parameter type
+ localPropertyType = typeArg;
+ }
+ }
}
}
// TODO this shouldn't be here (because localPropertyType should specify an item?)
@@ -1792,7 +1634,7 @@
propertyHandler = new CollectionPropertyHandler(property, localPropertyType);
}
isCol = true;
- localPropertyType = ((ClassInfo)localPropertyType).getComponentType();
+ localPropertyType = ((ClassInfo)localPropertyType).getComponentType();
}
else if (localPropertyType.isMap())
{
@@ -1877,6 +1719,184 @@
defaultNamespace = overridenDefaultNamespace;
}
}
+
+ private ModelGroupBinding bindModelGroupType(PropertyInfo property, ModelGroupBinding model,
+ BeanAdapterFactory beanAdapterFactory, ClassInfo propClassInfo, JBossXmlModelGroup xmlModelGroup)
+ {
+ if (trace)
+ log.trace("Property " + property.getName() + " is bound to " + xmlModelGroup.kind());
+
+ String groupNs = defaultNamespace;
+ String overridenDefaultNamespace = defaultNamespace;
+ JBossXmlNsPrefix nsPrefix = property.getUnderlyingAnnotation(JBossXmlNsPrefix.class);
+ if (nsPrefix != null)
+ {
+ String ns = schemaBinding.getNamespace(nsPrefix.prefix());
+ if (ns == null && nsPrefix.schemaTargetIfNotMapped())
+ {
+ throw new IllegalStateException("Prefix '" + nsPrefix.prefix() + "' is not mapped to any namespace!");
+ }
+
+ if (nsPrefix.applyToComponentQName())
+ groupNs = ns;
+ if (nsPrefix.applyToComponentContent())
+ defaultNamespace = ns;
+ }
+
+ QName groupName = null;
+ if (!JBossXmlConstants.DEFAULT.equals(xmlModelGroup.name()))
+ groupName = new QName(groupNs, xmlModelGroup.name());
+
+ ModelGroupBinding propertyGroup = null;
+ if (groupName != null)
+ propertyGroup = schemaBinding.getGroup(groupName);
+
+ if (propertyGroup == null)
+ {
+ if (xmlModelGroup.kind().equals(JBossXmlConstants.MODEL_GROUP_SEQUENCE))
+ {
+ propertyGroup = new SequenceBinding(schemaBinding);
+ }
+ else if (xmlModelGroup.kind().equals(JBossXmlConstants.MODEL_GROUP_CHOICE))
+ {
+ propertyGroup = new ChoiceBinding(schemaBinding);
+ }
+ else if (xmlModelGroup.kind().equals(JBossXmlConstants.MODEL_GROUP_ALL))
+ {
+ propertyGroup = new AllBinding(schemaBinding);
+ }
+ else
+ {
+ throw new IllegalStateException("Unexpected JBossXmlModelGroup.kind=" + xmlModelGroup.kind());
+ }
+
+ if (groupName != null)
+ {
+ // TODO what if it doesn't have a name? should an artificial one be created?
+ propertyGroup.setQName(groupName);
+ schemaBinding.addGroup(propertyGroup.getQName(), propertyGroup);
+ }
+
+ propertyGroup.setSkip(Boolean.FALSE);
+
+ // handler for the model group members
+ BeanInfo propBeanInfo = JBossXBBuilder.configuration.getBeanInfo(propClassInfo);
+ BeanAdapterFactory propBeanAdapterFactory = createAdapterFactory(DefaultBeanAdapterBuilder.class,
+ propBeanInfo, null);
+ BeanHandler propHandler = new BeanHandler(propBeanInfo.getName(), propBeanAdapterFactory);
+ propertyGroup.setHandler(propHandler);
+
+ String[] memberOrder = xmlModelGroup.propOrder();
+ if (memberOrder.length == 0 || memberOrder[0].length() == 0)
+ {
+ List<String> propNames = new ArrayList<String>();
+ for (PropertyInfo prop : propBeanInfo.getProperties())
+ {
+ propNames.add(prop.getName());
+ }
+ memberOrder = propNames.toArray(new String[propNames.size()]);
+ }
+
+ if (trace)
+ log.trace("Property order for " + xmlModelGroup.kind() + " property " + property.getName() + ": " + Arrays.asList(memberOrder));
+
+ // bind model group members
+ for (String memberPropName : memberOrder)
+ {
+ if ("class".equals(memberPropName))
+ {
+ continue;
+ }
+
+ PropertyInfo memberProp = propBeanInfo.getProperty(memberPropName);
+ TypeInfo memberTypeInfo = memberProp.getType();
+ XmlElement memberXmlElement = memberProp.getUnderlyingAnnotation(XmlElement.class);
+
+ String memberNamespace = null;
+ String memberName = null;
+ if (memberXmlElement != null)
+ {
+ 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();
+ }
+ 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!");
+
+ if (memberPrefix.applyToComponentQName())
+ memberNamespace = prefixNs;
+ }
+
+ QName memberQName = generateXmlName(memberProp.getName(), elementForm, memberNamespace, memberName);
+ propBeanAdapterFactory.addProperty(memberQName, memberPropertyHandler);
+
+ 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();
+ }
+
+ 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);
+ propertyGroup.addParticle(memberParticle);
+
+ if (trace)
+ log.trace("added " + memberParticle + " to " + xmlModelGroup.kind() + ", property " + property.getName());
+
+ defaultNamespace = memberOverridenDefaultNamespace;
+ }
+ }
+
+ defaultNamespace = overridenDefaultNamespace;
+ return propertyGroup;
+ }
private SequenceBinding bindXmlElementWrapper(TypeInfo propertyType, ModelGroupBinding parentModel, boolean wrapperNillable, QName wrapperQName)
{
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/CustomizedSchemaRoot.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/CustomizedSchemaRoot.java 2009-02-05 15:30:13 UTC (rev 2971)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/CustomizedSchemaRoot.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -23,6 +23,7 @@
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
import org.jboss.xb.annotations.JBossXmlPreserveWhitespace;
import org.jboss.xb.annotations.JBossXmlSchema;
@@ -35,6 +36,7 @@
*/
@XmlRootElement(name="root")
@JBossXmlSchema(normalizeSpace=true)
+ at XmlType(propOrder={"schemaDefaults", "preserveTrue", "preserveFalse"})
public class CustomizedSchemaRoot
{
private String schemaDefaults;
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/DefaultsRoot.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/DefaultsRoot.java 2009-02-05 15:30:13 UTC (rev 2971)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/jbossxmlpreservewhitespace/support/DefaultsRoot.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -23,6 +23,7 @@
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
import org.jboss.xb.annotations.JBossXmlPreserveWhitespace;
@@ -33,6 +34,7 @@
* @version $Revision: 1.1 $
*/
@XmlRootElement(name="root")
+ at XmlType(propOrder={"schemaDefaults", "preserveTrue", "preserveFalse"})
public class DefaultsRoot
{
private String schemaDefaults;
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmltype/adapter/Adapted.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmltype/adapter/Adapted.java 2009-02-05 15:30:13 UTC (rev 2971)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmltype/adapter/Adapted.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -31,7 +31,7 @@
* @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
- at XmlType(namespace="testNamespace", name="adapted")
+ at XmlType(namespace="testNamespace", name="adapted", propOrder={"property1", "property2"})
@JBossXmlType(beanAdapterBuilder=TestBeanAdapterBuilder.class)
public class Adapted
{
Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ABSequence.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ABSequence.java (rev 0)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ABSequence.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,62 @@
+/*
+ * 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.xml.elementorder.support;
+
+import javax.xml.bind.annotation.XmlElement;
+
+import org.jboss.xb.annotations.JBossXmlConstants;
+import org.jboss.xb.annotations.JBossXmlModelGroup;
+
+/**
+ * A ABSequence.
+ *
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+ at JBossXmlModelGroup(name="abSequence", kind=JBossXmlConstants.MODEL_GROUP_SEQUENCE, propOrder={"a", "b"})
+public class ABSequence
+{
+ private String a;
+ private String b;
+
+ @XmlElement(required=true)
+ public String getA()
+ {
+ return a;
+ }
+
+ public void setA(String a)
+ {
+ this.a = a;
+ }
+
+ @XmlElement(required=true)
+ public String getB()
+ {
+ return b;
+ }
+
+ public void setB(String b)
+ {
+ this.b = b;
+ }
+}
Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/CDSequence.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/CDSequence.java (rev 0)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/CDSequence.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,62 @@
+/*
+ * 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.xml.elementorder.support;
+
+import javax.xml.bind.annotation.XmlElement;
+
+import org.jboss.xb.annotations.JBossXmlConstants;
+import org.jboss.xb.annotations.JBossXmlModelGroup;
+
+/**
+ * A ABSequence.
+ *
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+ at JBossXmlModelGroup(name="cdSequence", kind=JBossXmlConstants.MODEL_GROUP_SEQUENCE, propOrder={"c", "d"})
+public class CDSequence
+{
+ private String c;
+ private String d;
+
+ @XmlElement(required=true)
+ public String getC()
+ {
+ return c;
+ }
+
+ public void setC(String c)
+ {
+ this.c = c;
+ }
+
+ @XmlElement(required=true)
+ public String getD()
+ {
+ return d;
+ }
+
+ public void setD(String d)
+ {
+ this.d = d;
+ }
+}
Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ElementOrderRoot.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ElementOrderRoot.java (rev 0)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/support/ElementOrderRoot.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,83 @@
+/*
+ * 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.xml.elementorder.support;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * A ElementOrderRoot.
+ *
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+ at XmlRootElement(name="root")
+ at XmlType(propOrder={"first", "second", "ABSequence", "repeatedCD"})
+public class ElementOrderRoot
+{
+ private String first;
+ private String second;
+ private ABSequence abSequence;
+ private List<CDSequence> repeatedCD;
+
+ public String getFrist()
+ {
+ return first;
+ }
+
+ public void setFirst(String first)
+ {
+ this.first = first;
+ }
+
+ public String getSecond()
+ {
+ return second;
+ }
+
+ public void setSecond(String second)
+ {
+ this.second = second;
+ }
+
+ public ABSequence getABSequence()
+ {
+ return abSequence;
+ }
+
+ public void setABSequence(ABSequence abSequence)
+ {
+ this.abSequence = abSequence;
+ }
+
+ public List<CDSequence> getRepeatedCD()
+ {
+ return repeatedCD;
+ }
+
+ public void setRepeatedCD(List<CDSequence> repeatedCD)
+ {
+ this.repeatedCD = repeatedCD;
+ }
+}
Added: 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 (rev 0)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/elementorder/test/ElementOrderUnitTestCase.java 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,121 @@
+/*
+ * 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.xml.elementorder.test;
+
+import java.util.List;
+
+import org.jboss.test.xb.builder.AbstractBuilderTest;
+import org.jboss.test.xml.elementorder.support.ABSequence;
+import org.jboss.test.xml.elementorder.support.CDSequence;
+import org.jboss.test.xml.elementorder.support.ElementOrderRoot;
+import org.jboss.xb.binding.JBossXBException;
+import org.jboss.xb.binding.JBossXBRuntimeException;
+
+/**
+ * A ElementOrderUnitTestCase.
+ *
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
+ * @version $Revision: 1.1 $
+ */
+public class ElementOrderUnitTestCase extends AbstractBuilderTest
+{
+ public ElementOrderUnitTestCase(String name)
+ {
+ super(name);
+ }
+
+ public void testValidOneTwoOrder() throws Exception
+ {
+ ElementOrderRoot o = (ElementOrderRoot) unmarshalObject(ElementOrderRoot.class);
+ assertEquals("one", o.getFrist());
+ assertEquals("two", o.getSecond());
+ }
+
+ public void testWrongOneTwoOrder() throws Exception
+ {
+ try
+ {
+ unmarshalObject(ElementOrderRoot.class);
+ fail("Element first cannot appear in this position (possibly child elements of root are in the wrong order)");
+ }
+ 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());
+ }
+ }
+
+ public void testValidABSequence() throws Exception
+ {
+ ElementOrderRoot o = (ElementOrderRoot) unmarshalObject(ElementOrderRoot.class);
+ ABSequence ab = o.getABSequence();
+ assertNotNull(ab);
+ assertEquals("a", ab.getA());
+ assertEquals("b", ab.getB());
+ }
+
+ public void testWrongABSequence() throws Exception
+ {
+ try
+ {
+ unmarshalObject(ElementOrderRoot.class);
+ fail("Element a cannot appear in this position (possibly child elements of root are in the wrong order)");
+ }
+ 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());
+ }
+ }
+
+ public void testValidRepeatedCD() throws Exception
+ {
+ ElementOrderRoot o = (ElementOrderRoot) unmarshalObject(ElementOrderRoot.class);
+ List<CDSequence> repeatedCD = o.getRepeatedCD();
+ assertNotNull(repeatedCD);
+ assertEquals(2, repeatedCD.size());
+ CDSequence cd = repeatedCD.get(0);
+ assertNotNull(cd);
+ assertEquals("c1", cd.getC());
+ assertEquals("d1", cd.getD());
+ cd = repeatedCD.get(1);
+ assertNotNull(cd);
+ assertEquals("c2", cd.getC());
+ assertEquals("d2", cd.getD());
+ }
+
+ // TODO this is a known failure
+ // the impl doesn't check XmlElement.required=true and since the sequence is repeatable, the test passes
+ public void testWrongRepeatedCD() throws Exception
+ {
+ try
+ {
+ unmarshalObject(ElementOrderRoot.class);
+ fail("Element d cannot appear in this position (possibly child elements of root are in the wrong order)");
+ }
+ catch(JBossXBException e)
+ {
+ JBossXBRuntimeException re = (JBossXBRuntimeException) e.getCause();
+ assertEquals("Element d cannot appear in this position (possibly child elements of root are in the wrong order)", re.getMessage());
+ }
+ }
+}
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidABSequence.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidABSequence.xml (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidABSequence.xml 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,4 @@
+<root>
+ <a>a</a>
+ <b>b</b>
+</root>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidOneTwoOrder.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidOneTwoOrder.xml (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidOneTwoOrder.xml 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,4 @@
+<root>
+ <first>one</first>
+ <second>two</second>
+</root>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidRepeatedCD.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidRepeatedCD.xml (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testValidRepeatedCD.xml 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,6 @@
+<root>
+ <c>c1</c>
+ <d>d1</d>
+ <c>c2</c>
+ <d>d2</d>
+</root>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongABSequence.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongABSequence.xml (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongABSequence.xml 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,4 @@
+<root>
+ <b>b</b>
+ <a>a</a>
+</root>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongOneTwoOrder.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongOneTwoOrder.xml (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongOneTwoOrder.xml 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,4 @@
+<root>
+ <second>two</second>
+ <first>one</first>
+</root>
Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongRepeatedCD.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongRepeatedCD.xml (rev 0)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/elementorder/test/ElementOrder_testWrongRepeatedCD.xml 2009-02-07 07:42:05 UTC (rev 2972)
@@ -0,0 +1,4 @@
+<root>
+ <d>d1</d>
+ <c>c1</c>
+</root>
More information about the jboss-svn-commits
mailing list