[jboss-svn-commits] JBoss Common SVN: r3960 - in jbossxb/trunk/src: main/java/org/jboss/xb/builder and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jan 29 06:00:23 EST 2010
Author: alex.loubyansky at jboss.com
Date: 2010-01-29 06:00:22 -0500 (Fri, 29 Jan 2010)
New Revision: 3960
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/ArrayWrapperRepeatableParticleHandler.java
jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BeanHandler.java
jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java
jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java
jbossxb/trunk/src/test/java/org/jboss/test/xml/MapsUnitTestCase.java
Log:
don't invoke handlers for skipped particles/positions, other minor optimizations
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -58,6 +58,8 @@
protected AbstractPosition next;
private AbstractPosition notSkippedParent;
+ protected boolean skip;
+
protected AbstractPosition(QName qName, ParticleBinding particle)
{
if (particle == null)
@@ -69,6 +71,8 @@
this.particle = particle;
this.occurrence = 1;
+
+ this.skip = particle.getTerm().isSkip();
}
public void setStack(PositionStack stack)
@@ -123,6 +127,12 @@
protected void initValue(Attributes atts)
{
+ if(skip)
+ {
+ o = previous == null ? null : previous.o;
+ return;
+ }
+
if(handler == null)
handler = getHandler();
Object parent = previous == null ? null : previous.o;
@@ -155,8 +165,7 @@
AbstractPosition wildcardPosition = null;
while(position != null)
{
- ParticleBinding particle = position.particle;
- if(!particle.getTerm().isSkip() || position.repeatableParticleValue != null)
+ if(!position.skip || position.repeatableParticleValue != null)
{
notSkippedParent = position;
return position;
@@ -167,7 +176,7 @@
return wildcardPosition;
}
- if(particle.getTerm().isWildcard())
+ if(position.particle.getTerm().isWildcard())
wildcardPosition = position;
position = position.previous;
}
@@ -177,14 +186,24 @@
protected void setParent(AbstractPosition parentPosition, ParticleHandler handler)
{
+ if(skip)
+ return;
+
if(repeatableParticleValue != null)
{
repeatableHandler.addTermValue(repeatableParticleValue, o, qName, particle, parentPosition.particle, handler);
}
- else if(parentPosition.repeatableParticleValue == null || !parentPosition.particle.getTerm().isSkip())
+ else if(parentPosition.repeatableParticleValue != null && parentPosition.skip)
{
+ parentPosition.repeatableHandler.addTermValue(
+ parentPosition.repeatableParticleValue,
+ o, qName, particle,
+ parentPosition.particle, handler);
+ }
+ else
+ {
TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback();
- if(beforeSetParent != null)
+ if (beforeSetParent != null)
{
UnmarshallingContextImpl ctx = stack.getContext();
ctx.parent = parentPosition.o;
@@ -193,14 +212,9 @@
o = beforeSetParent.beforeSetParent(o, ctx);
ctx.clear();
}
-
+
handler.setParent(parentPosition.o, o, qName, particle, parentPosition.particle);
}
- else
- parentPosition.repeatableHandler.addTermValue(
- parentPosition.repeatableParticleValue,
- o, qName, particle,
- parentPosition.particle, handler);
}
protected abstract ParticleHandler getHandler();
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -118,11 +118,14 @@
next.previous = this;
++occurrence;
- o = handler.endParticle(o, qName, particle);
- if(previous.o != null)
- setParent(previous, handler);
- initValue(atts);
-
+ if(!skip)
+ {
+ o = handler.endParticle(o, qName, particle);
+ if (previous.o != null)
+ setParent(previous, handler);
+ initValue(atts);
+ }
+
if (trace)
log.trace("found " + qName + " in " + ChoiceBinding.this + ", term=" + choice.getTerm());
return this;
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -72,6 +72,26 @@
public static ParticleHandler XOP_HANDLER = new XOPElementHandler();
+ public static ParticleHandler UOE_PARTICLE_HANDLER = new ParticleHandler()
+ {
+ public Object endParticle(Object o, QName elementName, ParticleBinding particle)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle,
+ ParticleBinding parentParticle)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
+ NamespaceContext nsCtx)
+ {
+ throw new UnsupportedOperationException();
+ }
+ };
+
public static ParticleHandler NOOP_PARTICLE_HANDLER = new ParticleHandler()
{
public Object endParticle(Object o, QName elementName, ParticleBinding particle)
@@ -90,7 +110,7 @@
return parent;
}
};
-
+
public static RepeatableParticleHandler REPEATABLE_HANDLER = new RepeatableParticleHandler()
{
public Object startRepeatableParticle(Object parent, QName startName, ParticleBinding particle)
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -268,6 +268,10 @@
public void endParticle()
{
+ ended = true;
+ if(skip)
+ return;
+
ElementBinding element = (ElementBinding) particle.getTerm();
TypeBinding type = element.getType();
@@ -477,8 +481,6 @@
o = parent;
}
}
-
- ended = true;
}
public ElementPosition startParticle(QName startName, Attributes atts)
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -55,12 +55,15 @@
if(ended)
throw new JBossXBRuntimeException("The position has already been ended!");
- o = handler.endParticle(o, qName, particle);
- ended = true;
+ if(!skip)
+ {
+ o = handler.endParticle(o, qName, particle);
+ ended = true;
+
+ if (previous.o != null)
+ setParent(previous, handler);
+ }
- if(previous.o != null)
- setParent(previous, handler);
-
if(repeatableParticleValue != null)
endRepeatableParticle();
}
@@ -70,13 +73,16 @@
if(ended)
throw new JBossXBRuntimeException("The position has already been ended!");
- o = handler.endParticle(o, qName, particle);
+ if (!skip)
+ {
+ o = handler.endParticle(o, qName, particle);
- // model group should always have parent particle
- AbstractPosition parentPosition = notSkippedParent();
- if(parentPosition.o != null)
- setParent(parentPosition, handler);
-
+ // model group should always have parent particle
+ AbstractPosition parentPosition = notSkippedParent();
+ if (parentPosition.o != null)
+ setParent(parentPosition, handler);
+ }
+
// if it is repeatable then this is the repeatable parent
if(!particle.isRepeatable())
previous.repeatForChild(atts);
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -151,11 +151,14 @@
next.previous = this;
++occurrence;
- o = handler.endParticle(o, qName, particle);
- if(previous.o != null)
- setParent(previous, handler);
- initValue(atts);
-
+ if(!skip)
+ {
+ o = handler.endParticle(o, qName, particle);
+ if (previous.o != null)
+ setParent(previous, handler);
+ initValue(atts);
+ }
+
if(trace)
log.trace("found " + qName + " in " + SequenceBinding.this);
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -315,11 +315,13 @@
next.previous = this;
++occurrence;
- o = handler.endParticle(o, qName, particle);
- if(previous.o != null)
- setParent(previous, handler);
- //o = initValue(stack.parent().getValue(), atts);
-
+ if(!skip)
+ {
+ o = handler.endParticle(o, qName, particle);
+ if (previous.o != null)
+ setParent(previous, handler);
+ //o = initValue(stack.parent().getValue(), atts);
+ }
return this;
}
}
@@ -331,7 +333,7 @@
@Override
protected ParticleHandler getHandler()
{
- return DefaultHandlers.NOOP_PARTICLE_HANDLER;
+ return DefaultHandlers.UOE_PARTICLE_HANDLER;
}
}
}
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -1140,7 +1140,7 @@
if (trace)
log.trace(model.getGroupType() + " model group for type=" + beanInfo.getName());
- model.setHandler(BuilderParticleHandler.PARENT_ELEMENT);
+ model.setHandler(BuilderParticleHandler.setParentDelegate(typeBinding.getHandler()));
ParticleBinding typeParticle = new ParticleBinding(model);
typeParticle.setMinOccurs(1);
typeParticle.setMaxOccurs(1);
@@ -1447,7 +1447,7 @@
if (elements.length > 1)
{
ChoiceBinding choice = new ChoiceBinding(schemaBinding);
- choice.setHandler(BuilderParticleHandler.PARENT_GROUP);
+ choice.setHandler(BuilderParticleHandler.parentGroup(localModel));
ParticleBinding particleBinding = new ParticleBinding(choice);
particleBinding.setMinOccurs(0);
// WARN normally maxOccursUnbounded should be set to true in this case
@@ -1558,7 +1558,7 @@
}
else
{
- elementTypeBinding.setHandler(BuilderParticleHandler.PARENT_GROUP);
+ elementTypeBinding.setHandler(BuilderParticleHandler.parentGroup(localModel));
}
elementTypeBinding.setSchemaBinding(schemaBinding);
ElementBinding elementBinding = createElementBinding(localPropertyType, elementTypeBinding, propertyQName, false);
@@ -1571,7 +1571,7 @@
// Setup the child model
ChoiceBinding childModel = new ChoiceBinding(schemaBinding);
- childModel.setHandler(BuilderParticleHandler.PARENT_ELEMENT);
+ childModel.setHandler(BuilderParticleHandler.setParentDelegate(elementTypeBinding.getHandler()));
ParticleBinding particleBinding = new ParticleBinding(childModel);
particleBinding.setMinOccurs(0);
particleBinding.setMaxOccurs(1);
@@ -1966,10 +1966,10 @@
{
TypeBinding wrapperType = new TypeBinding();
SequenceBinding seq = new SequenceBinding(schemaBinding);
- seq.setHandler(BuilderParticleHandler.PARENT_ELEMENT);
+ seq.setHandler(DefaultHandlers.UOE_PARTICLE_HANDLER);
ParticleBinding particle = new ParticleBinding(seq);
wrapperType.setParticle(particle);
- wrapperType.setHandler(DefaultHandlers.NOOP_PARTICLE_HANDLER);
+ wrapperType.setHandler(DefaultHandlers.UOE_PARTICLE_HANDLER);
ElementBinding wrapperElement = createElementBinding(propertyType, wrapperType, wrapperQName, false);
wrapperElement.setNillable(annotation.nillable());
@@ -2194,7 +2194,6 @@
BeanAdapterFactory entryAdapterFactory = null;
BeanInfo entryInfo = JBossXBBuilder.configuration.getBeanInfo(DefaultMapEntry.class);
entryAdapterFactory = createAdapterFactory(DefaultBeanAdapterBuilder.class, entryInfo, null);
- BeanHandler entryHandler = new BeanHandler(entryInfo.getName(), entryAdapterFactory);
TypeBinding entryType = null;
TypeInfo entryTypeInfo = null;
@@ -2209,6 +2208,7 @@
entryType = new TypeBinding();
entryType.setSchemaBinding(schemaBinding);
+ BeanHandler entryHandler = new BeanHandler(entryInfo.getName(), entryAdapterFactory);
entryType.setHandler(entryHandler);
entryTypeInfo = JBossXBBuilder.configuration.getTypeInfo(DefaultMapEntry.class);
@@ -2252,6 +2252,7 @@
keyValueSequence = new SequenceBinding(schemaBinding);
if(entryType == null)
{
+ BeanHandler entryHandler = new BeanHandler(entryInfo.getName(), entryAdapterFactory);
keyValueSequence.setSkip(false);
keyValueSequence.setQName(propertyQName);
schemaBinding.addGroup(keyValueSequence.getQName(), keyValueSequence);
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/ArrayWrapperRepeatableParticleHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/ArrayWrapperRepeatableParticleHandler.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/ArrayWrapperRepeatableParticleHandler.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -61,8 +61,6 @@
public void addTermValue(Object particleValue, Object termValue, QName elementName, ParticleBinding particle,
ParticleBinding parentParticle, ParticleHandler handler)
{
- if(particle.getTerm().isSkip())
- return;
ValueAdapter valueAdapter = particle.getTerm().getValueAdapter();
if(valueAdapter != null)
termValue = valueAdapter.cast(termValue, null);
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BeanHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BeanHandler.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BeanHandler.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -45,7 +45,7 @@
public class BeanHandler /*extends DefaultElementHandler*/ implements ParticleHandler
{
/** The log */
- private final Logger log = Logger.getLogger(getClass());
+ protected static final Logger log = Logger.getLogger("org.jboss.xb.builder.runtime.BeanHandler");
/** Whether trace is enabled */
private boolean trace = log.isTraceEnabled();
@@ -110,6 +110,7 @@
ElementBinding element = (ElementBinding) term;
attrsHandler.attributes(o, elementName, element.getType(), attrs, nsCtx);
}
+
return o;
}
@@ -120,25 +121,22 @@
TermBinding term = particle.getTerm();
ValueAdapter valueAdapter = null;
- if(term.isModelGroup())
+ if(term.isElement()) // elements appear much more often than model groups
{
+ valueAdapter = ((ElementBinding)term).getValueAdapter();
+ }
+ else if(term.isModelGroup())
+ {
QName modelGroupName = ((ModelGroupBinding)term).getQName();
if(modelGroupName != null)
- {
qName = modelGroupName;
- }
- }
- else if(term.isElement())
- {
- valueAdapter = ((ElementBinding)term).getValueAdapter();
- }
+ }
BeanAdapter beanAdapter = (BeanAdapter) parent;
AbstractPropertyHandler propertyHandler = beanAdapter.getPropertyHandler(qName);
if (propertyHandler == null)
{
- TermBinding element = term;
- if (element.getSchema().isStrictSchema())
+ if (term.getSchema().isStrictSchema())
throw new RuntimeException("QName " + qName + " unknown property parent=" + BuilderUtil.toDebugString(parent) + " child=" + BuilderUtil.toDebugString(o) + " available=" + beanAdapter.getAvailable());
if (trace)
log.trace("QName " + qName + " unknown property parent=" + BuilderUtil.toDebugString(parent) + " child=" + BuilderUtil.toDebugString(o));
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -24,6 +24,8 @@
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
+import org.jboss.xb.binding.JBossXBRuntimeException;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultHandlers;
import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
@@ -41,59 +43,7 @@
{
/** The singleton instance */
public static final BuilderParticleHandler INSTANCE = new BuilderParticleHandler();
-
- public static final ParticleHandler PARENT_ELEMENT = new ParticleHandler()
- {
- public Object endParticle(Object o, QName elementName, ParticleBinding particle)
- {
- return o;
- }
- public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
- {
- if (particle.getTerm().isElement())
- {
- ParticleHandler particleHandler = ((ElementBinding)parentParticle.getTerm()).getType().getHandler();
- if(particleHandler != null)
- particleHandler.setParent(parent, o, elementName, particle, parentParticle);
- }
- }
-
- public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
- NamespaceContext nsCtx)
- {
- return parent;
- }
- };
-
- public static final ParticleHandler PARENT_GROUP = new ParticleHandler()
- {
- public Object endParticle(Object o, QName elementName, ParticleBinding particle)
- {
- return o;
- }
-
- public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
- {
- if (particle.getTerm().isElement())
- {
- TermBinding parentTerm = parentParticle.getTerm();
- if (!parentTerm.isSkip())
- {
- ParticleHandler particleHandler = ((ModelGroupBinding)parentTerm).getHandler();
- if(particleHandler != null)
- particleHandler.setParent(parent, o, elementName, particle, parentParticle);
- }
- }
- }
-
- public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
- NamespaceContext nsCtx)
- {
- return parent;
- }
- };
-
public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs, NamespaceContext nsCtx)
{
return parent;
@@ -123,4 +73,40 @@
{
return o;
}
+
+ public static ParticleHandler setParentDelegate(final ParticleHandler typeHandler)
+ {
+ return new ParticleHandler()
+ {
+ private final ParticleHandler delegate = typeHandler;
+
+ public Object endParticle(Object o, QName elementName, ParticleBinding particle)
+ {
+ return o;
+ }
+
+ public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
+ {
+ if (particle.getTerm().isElement())
+ delegate.setParent(parent, o, elementName, particle, parentParticle);
+ }
+
+ public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
+ NamespaceContext nsCtx)
+ {
+ return parent;
+ }
+ };
+ }
+
+ public static ParticleHandler parentGroup(final ModelGroupBinding group)
+ {
+ if(group.isSkip())
+ return DefaultHandlers.UOE_PARTICLE_HANDLER;
+
+ ParticleHandler handler = group.getHandler();
+ if(handler == null)
+ throw new JBossXBRuntimeException("The group is expected to have a non-null handler: " + group);
+ return setParentDelegate(handler);
+ }
}
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/CollectionPropertyHandler.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -34,6 +34,7 @@
import org.jboss.reflect.spi.ConstructorInfo;
import org.jboss.reflect.spi.TypeInfo;
import org.jboss.xb.annotations.JBossXmlCollection;
+import org.jboss.xb.binding.JBossXBRuntimeException;
import org.jboss.xb.spi.BeanAdapter;
/**
@@ -115,8 +116,19 @@
@SuppressWarnings("unchecked")
public void handle(PropertyInfo propertyInfo, TypeInfo propertyType, Object parent, Object child, QName qName)
{
- if (componentType != null && child != null && componentType.isInstance(child) == false)
- throw new IllegalArgumentException("Child is not an instance of " + componentType + ", child: " + child);
+ if (componentType != null && child != null)
+ {
+ if(!componentType.isInstance(child))
+ throw new IllegalArgumentException("Child is not an instance of " + componentType + ", child: " + child);
+ try
+ {
+ child = componentType.convertValue(child);
+ }
+ catch (Throwable e)
+ {
+ throw new JBossXBRuntimeException("QName " + qName + " error converting " + BuilderUtil.toDebugString(child) + " to type " + componentType.getName(), e);
+ }
+ }
BeanAdapter beanAdapter = (BeanAdapter) parent;
@@ -153,18 +165,7 @@
}
}
- // Now add
- try
- {
- if (componentType != null && child != null)
- c.add(componentType.convertValue(child));
- else
- c.add(child);
- }
- catch (Throwable t)
- {
- throw new RuntimeException("QName " + qName + " error adding " + BuilderUtil.toDebugString(child) + " to collection " + BuilderUtil.toDebugString(c), t);
- }
+ c.add(child);
}
private static interface CollectionFactory
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/MapsUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/MapsUnitTestCase.java 2010-01-27 15:44:50 UTC (rev 3959)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/MapsUnitTestCase.java 2010-01-29 11:00:22 UTC (rev 3960)
@@ -320,6 +320,7 @@
);
// sequence entry
+ entrySeq.setSkip(false);
entrySeq.setHandler(new ParticleHandler()
{
public Object startParticle(Object parent,
More information about the jboss-svn-commits
mailing list