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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 11 06:06:03 EST 2010


Author: alex.loubyansky at jboss.com
Date: 2010-02-11 06:06:02 -0500 (Thu, 11 Feb 2010)
New Revision: 4032

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/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/TypeBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BeanHandler.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/GroupBeanHandler.java
Log:
made BeanHandler specialized for elements and GroupBeanHandler for groups, other 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-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AbstractPosition.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -72,7 +72,11 @@
       this.particle = particle;
       this.occurrence = 1;
       
-      this.skip = particle.getTerm().isSkip();
+      TermBinding term = particle.getTerm();
+      this.skip = term.isSkip();
+
+      if(particle.isRepeatable())
+         repeatableHandler = term.getRepeatableHandler();
    }
 
    public void setStack(PositionStack stack)
@@ -116,7 +120,6 @@
          log.trace(" end repeatable " + particle.getTerm());
       repeatableHandler.endRepeatableParticle(previous.o, repeatableParticleValue, qName, particle, previous.particle);
       repeatableParticleValue = null;
-      repeatableHandler = null;
    }
 
    public abstract void endParticle();
@@ -152,7 +155,6 @@
          if(this.repeatableParticleValue != null)
             throw new IllegalStateException("Previous repeatable particle hasn't been ended yet!");
          this.repeatableParticleValue = repeatableContainer;
-         this.repeatableHandler = repeatableHandler;
       }
    }
 

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-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementPosition.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -208,7 +208,7 @@
       while (nextPosition.next != null)
       {
          nextPosition.notSkippedParent = nextPosition.previous.getLastNotSkipped();
-         if (nextPosition.particle.isRepeatable())
+         if (nextPosition.repeatableHandler != null)
             nextPosition.startRepeatableParticle();
          nextPosition.stack = stack;
          nextPosition.initValue(atts);
@@ -538,7 +538,7 @@
          particle = new ParticleBinding(xsiElement, particle.getMinOccurs(), particle.getMaxOccurs(), particle.getMaxOccursUnbounded());
       }
 
-      if (occurrence == 1 && particle.isRepeatable())
+      if (occurrence == 1 && repeatableHandler != null)
          startRepeatableParticle();
 
       TypeBinding type = element.getType();

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-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NonElementPosition.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -100,7 +100,7 @@
       while (nextPosition.next != null)
       {
          nextPosition.notSkippedParent = nextPosition.previous.getLastNotSkipped();
-         if (nextPosition.particle.isRepeatable())
+         if (nextPosition.repeatableHandler != null)
             nextPosition.startRepeatableParticle();
          nextPosition.stack = stack;
          nextPosition.initValue(atts);

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java	2010-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -49,7 +49,9 @@
  * @version <tt>$Revision$</tt>
  */
 public class TypeBinding
-{   
+{
+   private static final List<ElementInterceptor> EMPTY_ICEPTOR_LIST = Collections.<ElementInterceptor>emptyList();
+   
    protected QName qName;
    /** Map<QName, AttributeBinding>  */
    private Map<QName, AttributeBinding> attrs;
@@ -384,9 +386,9 @@
    public List<ElementInterceptor> getInterceptors(QName qName)
    {
       if(interceptors == null)
-         return Collections.<ElementInterceptor>emptyList();
+         return EMPTY_ICEPTOR_LIST;
       List<ElementInterceptor> list = interceptors.get(qName);
-      return list == null ? Collections.<ElementInterceptor>emptyList() : list;
+      return list == null ? EMPTY_ICEPTOR_LIST : list;
    }
    
    public TypeBinding getBaseType()

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2010-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -907,7 +907,7 @@
       // Create the handler
       BeanInfo beanInfo = JBossXBBuilder.configuration.getBeanInfo(typeInfo);
       BeanAdapterFactory beanAdapterFactory = createAdapterFactory(beanAdapterBuilderClass, beanInfo, factory);
-      BeanHandler handler = new BeanHandler(beanInfo.getName(), beanAdapterFactory);
+      BeanHandler handler = new BeanHandler(beanInfo.getName(), beanAdapterFactory, typeBinding);
       typeBinding.setHandler(handler);
       if (trace)
          log.trace("Created BeanHandler for type=" + beanInfo.getName() + " factory=" + factory);
@@ -1140,7 +1140,7 @@
       ModelGroupBinding model = null;
       boolean propOrderMissing = propertyNames.size() > 1 && determinePropertyOrder && accessOrder == XmlAccessOrder.UNDEFINED;
       if(jbossXmlType != null && !JBossXmlConstants.DEFAULT.equals(jbossXmlType.modelGroup()))
-         model = createModelGroup(jbossXmlType.modelGroup(), typeInfo, propOrderMissing, propertyOrder);
+         model = createModelGroup(jbossXmlType.modelGroup(), typeInfo, propOrderMissing, propertyOrder, null);
       else if (allBinding)
          model = new AllBinding(schemaBinding);
       else
@@ -1163,15 +1163,8 @@
       {
          typeParticle.setMinOccurs(0);
          typeParticle.setMaxOccursUnbounded(true);
-/*         TypeInfo memberBaseType = typeInfo.getComponentType();
+      }
 
-         JBossXmlModelGroup xmlModelGroup = ((ClassInfo) memberBaseType).getUnderlyingAnnotation(JBossXmlModelGroup.class);
-         if (xmlModelGroup != null)
-         {
-            bindParticlesModelGroup(typeBinding, model, memberBaseType, xmlModelGroup, true, beanAdapterFactory, null);
-         }
-*/      }
-
       // Determine the wildcard handler
       AbstractPropertyHandler wildcardHandler = null;
       if (wildcardProperty != null)
@@ -1326,7 +1319,7 @@
          particleBinding.setMaxOccurs(1);
          model.addParticle(particleBinding);
 
-         typeBinding.getWildcard().setWildcardHandler(childWildcardHandler);
+         typeBinding.getWildcard().setHandler(childWildcardHandler);
       }
 
       if (trace)
@@ -1525,7 +1518,8 @@
                   throw new IllegalStateException("Cannot wrap " + wrapperInfo.getName() + " not a bean type " + particleHandler);
                BeanHandler beanHandler = (BeanHandler) particleHandler;
                WrapperBeanAdapterFactory wrapperFactory = new WrapperBeanAdapterFactory(beanHandler.getBeanAdapterFactory(), propertyType.getType());
-               BeanHandler wrapperHandler = new BeanHandler(wrapperInfo.getName(), wrapperFactory);
+               BeanHandler wrapperHandler = new BeanHandler(wrapperInfo.getName(), wrapperFactory, elementTypeBinding);
+               elementTypeBinding.setHandler(wrapperHandler);
 
                // Steal the attributes
                Collection<AttributeBinding> otherAttributes = wrapperTypeBinding.getAttributes();
@@ -1537,7 +1531,6 @@
                      wrapperHandler.getAttributesHandler().addAttribute(other);
                   }
                }
-               elementTypeBinding.setHandler(wrapperHandler);
                elementTypeBinding.setSimpleType(wrapperTypeBinding.getSimpleType());
             }
             else
@@ -1891,7 +1884,6 @@
             // handler for the model group members
             BeanInfo groupBeanInfo = JBossXBBuilder.configuration.getBeanInfo(groupType);
             BeanAdapterFactory propBeanAdapterFactory = createAdapterFactory(DefaultBeanAdapterBuilder.class, groupBeanInfo, null);
-            BeanHandler propHandler = new GroupBeanHandler(groupBeanInfo.getName(), propBeanAdapterFactory);
 
             String[] memberOrder = annotation.propOrder();
             if (memberOrder.length == 0 || memberOrder[0].length() == 0)
@@ -1909,8 +1901,9 @@
             if (trace)
                log.trace("Property order for " + annotation.kind() + " property " + property.getName() + ": " + Arrays.asList(memberOrder));
 
-            group = createModelGroup(annotation.kind(), groupType, memberOrder.length > 1 && propOrderMissing, annotation.propOrder());
+            group = createModelGroup(annotation.kind(), groupType, memberOrder.length > 1 && propOrderMissing, annotation.propOrder(), groupName);
             group.setSkip(false);
+            GroupBeanHandler propHandler = new GroupBeanHandler(groupBeanInfo.getName(), propBeanAdapterFactory, group);
             group.setHandler(propHandler);
             // can't do it with global components
             //group.setHandler(new SetParentOverrideHandler(propHandler, propertyHandler));
@@ -1925,13 +1918,7 @@
             }
          }
          else
-            group = createModelGroup(annotation.kind(), groupType, propOrderMissing, annotation.propOrder());
-            
-         if (groupName != null)
-         {
-            group.setQName(groupName);
-            schemaBinding.addGroup(group.getQName(), group);
-         }
+            group = createModelGroup(annotation.kind(), groupType, propOrderMissing, annotation.propOrder(), groupName);
 
          if(property.getType().isArray())
             group.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(propertyHandler));
@@ -1983,7 +1970,7 @@
       defaultNamespace = overridenDefaultNamespace;
    }
 
-   private ModelGroupBinding createModelGroup(String kind, TypeInfo type, boolean propOrderMissing, String[] propertyOrder)
+   private ModelGroupBinding createModelGroup(String kind, TypeInfo type, boolean propOrderMissing, String[] propertyOrder, QName groupName)
    {
       ModelGroupBinding group;
       if (kind.equals(JBossXmlConstants.MODEL_GROUP_SEQUENCE))
@@ -2000,6 +1987,12 @@
          group = new AllBinding(schemaBinding);
       else
          throw new IllegalStateException("Unexpected JBossXmlModelGroup.kind=" + kind + " for type " + type.getName());
+      
+      if(groupName != null)
+      {
+         group.setQName(groupName);
+         schemaBinding.addGroup(groupName, group);
+      }
       return group;
    }
       
@@ -2248,7 +2241,7 @@
 
             entryType = new TypeBinding();
             entryType.setSchemaBinding(schemaBinding);
-            BeanHandler entryHandler = new BeanHandler(entryInfo.getName(), entryAdapterFactory);
+            BeanHandler entryHandler = new BeanHandler(entryInfo.getName(), entryAdapterFactory, entryType);
             entryType.setHandler(entryHandler);
 
             entryTypeInfo = JBossXBBuilder.configuration.getTypeInfo(DefaultMapEntry.class);                     
@@ -2293,9 +2286,9 @@
             keyValueSequence = new SequenceBinding(schemaBinding);                     
             if(entryType == null)
             {
-               BeanHandler entryHandler = new BeanHandler(entryInfo.getName(), entryAdapterFactory);
                keyValueSequence.setSkip(false);
                keyValueSequence.setQName(propertyQName);
+               GroupBeanHandler entryHandler = new GroupBeanHandler(entryInfo.getName(), entryAdapterFactory, keyValueSequence);
                schemaBinding.addGroup(keyValueSequence.getQName(), keyValueSequence);
                ParticleBinding keyValueParticle = new ParticleBinding(keyValueSequence, 0, -1, true);
                targetGroup.addParticle(keyValueParticle);

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-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BeanHandler.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -25,12 +25,10 @@
 import javax.xml.namespace.QName;
 
 import org.jboss.logging.Logger;
-import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.RegisteredAttributesHandler;
-import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ValueAdapter;
 import org.jboss.xb.spi.BeanAdapter;
 import org.jboss.xb.spi.BeanAdapterFactory;
@@ -40,22 +38,25 @@
  * BeanHandler.
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
  * @version $Revision: 1.1 $
  */
-public class BeanHandler /*extends DefaultElementHandler*/ implements ParticleHandler
+public class BeanHandler implements ParticleHandler
 {
    /** The log */
    protected static final Logger log = Logger.getLogger("org.jboss.xb.builder.runtime.BeanHandler");
    
    /** Whether trace is enabled */
-   private boolean trace = log.isTraceEnabled();
+   protected boolean trace = log.isTraceEnabled();
 
    /** The bean name */
-   private String name;
+   protected String name;
    
    /** The BeanAdapter */
-   private BeanAdapterFactory beanAdapterFactory;
+   protected BeanAdapterFactory beanAdapterFactory;
    
+   protected TypeBinding elementType;
+   
    private RegisteredAttributesHandler attrsHandler = new RegisteredAttributesHandler();
 
    /**
@@ -65,14 +66,17 @@
     * @param beanAdapterFactory the bean adapterFactory
     * @throws IllegalArgumentException for a null parameter
     */
-   public BeanHandler(String name, BeanAdapterFactory beanAdapterFactory)
+   public BeanHandler(String name, BeanAdapterFactory beanAdapterFactory, TypeBinding elementType)
    {
       if (name == null)
          throw new IllegalArgumentException("Null name");
       if (beanAdapterFactory == null)
          throw new IllegalArgumentException("Null bean adapter factory");
+      if (elementType == null)
+         throw new IllegalArgumentException("Null element type");
       this.name = name;
       this.beanAdapterFactory = beanAdapterFactory;
+      this.elementType = elementType;
    }
    
    /**
@@ -104,12 +108,8 @@
          throw new RuntimeException("QName " + elementName + " error invoking beanAdapterFactory.newInstance() for bean=" + name, t);
       }
 
-      TermBinding term = particle.getTerm();
-      if (o != null && term.isElement())
-      {
-         ElementBinding element = (ElementBinding) term;
-         attrsHandler.attributes(o, elementName, element.getType(), attrs, nsCtx);
-      }
+      if (o != null)
+         attrsHandler.attributes(o, elementName, elementType, attrs, nsCtx);
 
       return o;
    }
@@ -119,19 +119,11 @@
       if (trace)
          log.trace("setParent " + qName + " parent=" + BuilderUtil.toDebugString(parent) + " child=" + BuilderUtil.toDebugString(o));
 
-      TermBinding term = particle.getTerm();
-      if(term.isModelGroup())
-      {
-         QName modelGroupName = ((ModelGroupBinding)term).getQName();
-         if(modelGroupName != null)
-            qName = modelGroupName;
-      }
-
       BeanAdapter beanAdapter = (BeanAdapter) parent;
       AbstractPropertyHandler propertyHandler = beanAdapter.getPropertyHandler(qName);
       if (propertyHandler == null)
       {
-         if (term.getSchema().isStrictSchema())
+         if (elementType.getSchemaBinding().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/GroupBeanHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/GroupBeanHandler.java	2010-02-11 09:46:17 UTC (rev 4031)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/GroupBeanHandler.java	2010-02-11 11:06:02 UTC (rev 4032)
@@ -25,10 +25,12 @@
 import javax.xml.namespace.QName;
 
 import org.jboss.beans.info.spi.PropertyInfo;
+import org.jboss.logging.Logger;
 import org.jboss.xb.binding.JBossXBRuntimeException;
 import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
+import org.jboss.xb.binding.sunday.unmarshalling.ValueAdapter;
 import org.jboss.xb.spi.BeanAdapter;
 import org.jboss.xb.spi.BeanAdapterFactory;
 import org.xml.sax.Attributes;
@@ -47,29 +49,46 @@
  * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
  * @version $Revision: 1.1 $
  */
-public class GroupBeanHandler extends BeanHandler
+public class GroupBeanHandler implements ParticleHandler
 {
+   /** The log */
+   protected static final Logger log = Logger.getLogger("org.jboss.xb.builder.runtime.GroupBeanHandler");
    
-   public GroupBeanHandler(String name, BeanAdapterFactory beanAdapterFactory)
+   /** Whether trace is enabled */
+   protected boolean trace = log.isTraceEnabled();
+
+   /** The bean name */
+   protected String name;
+   
+   /** The BeanAdapter */
+   protected BeanAdapterFactory beanAdapterFactory;
+  
+   protected QName groupName;
+   
+   public GroupBeanHandler(String name, BeanAdapterFactory beanAdapterFactory, ModelGroupBinding group)
    {
-      super(name, beanAdapterFactory);
+      if (name == null)
+         throw new IllegalArgumentException("Null name");
+      if (beanAdapterFactory == null)
+         throw new IllegalArgumentException("Null bean adapter factory");
+      if(group == null)
+         throw new IllegalArgumentException("Null group");
+      if(group.getQName() == null)
+         throw new JBossXBRuntimeException("The group has to have a non-null QName.");
+
+      this.name = name;
+      this.beanAdapterFactory = beanAdapterFactory;
+      this.groupName = group.getQName();
    }
 
-   @Override
    public Object startParticle(Object parent, QName qName, ParticleBinding particle, Attributes attrs, NamespaceContext nsCtx)
    {
+      if (trace)
+         log.trace(" startElement " + qName + " bean=" + name + " parent=" + BuilderUtil.toDebugString(parent));
+
       if(!(parent instanceof BeanAdapter))
          throw new JBossXBRuntimeException("Parent expected to be an instance of BeanAdapter: " + parent);
-      
-      TermBinding term = particle.getTerm();
-      if(!term.isModelGroup())
-         throw new JBossXBRuntimeException("The term expected to be a model group: " + term);
-      
-      ModelGroupBinding group = (ModelGroupBinding) term;
-      QName groupName = group.getQName();
-      if(groupName == null)
-         throw new JBossXBRuntimeException("The group has to have a non-null QName. Failed to start element " + qName);
-      
+
       AbstractPropertyHandler groupHandler = ((BeanAdapter) parent).getPropertyHandler(groupName);
       if (groupHandler == null)
          throw new JBossXBRuntimeException("No property mapped for group " + qName + " in bean adapter" + ((BeanAdapter)parent).getValue()
@@ -92,11 +111,57 @@
       }
 
       if(groupValue == null || particle.isRepeatable())
-         return super.startParticle(parent, qName, particle, attrs, nsCtx);
+      {
+         try
+         {
+            return beanAdapterFactory.newInstance();
+         }
+         catch (Throwable t)
+         {
+            throw new RuntimeException("Element " + qName + " (group " + groupName +") error invoking beanAdapterFactory.newInstance() for bean=" + name, t);
+         }
+
+      }
       else
-         return new SingletonBeanAdapter(this.getBeanAdapterFactory(), groupValue);
+         return new SingletonBeanAdapter(beanAdapterFactory, groupValue);
    }
-      
+   
+   public void setParent(Object parent, Object o, QName qName,  ParticleBinding particle, ParticleBinding parentParticle)
+   {
+      if (trace)
+         log.trace("setParent " + qName + " parent=" + BuilderUtil.toDebugString(parent) + " child=" + BuilderUtil.toDebugString(o));
+
+      BeanAdapter beanAdapter = (BeanAdapter) parent;
+      AbstractPropertyHandler propertyHandler = beanAdapter.getPropertyHandler(groupName);
+      if (propertyHandler == null)
+      {
+         if (particle.getTerm().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));
+         return;
+      }
+
+      propertyHandler.doHandle(beanAdapter, o, qName);
+   }
+
+   public Object endParticle(Object o, QName qName, ParticleBinding particle)
+   {
+      if (trace)
+         log.trace("endElement " + qName + " o=" + BuilderUtil.toDebugString(o));
+
+      BeanAdapter beanAdapter = (BeanAdapter) o;
+      Object value = beanAdapter.getValue();
+
+      if(!particle.isRepeatable())
+      {
+         ValueAdapter valueAdapter = particle.getTerm().getValueAdapter();
+         if (valueAdapter != null)
+            value = valueAdapter.cast(value, null);
+      }
+      return value;
+   }
+
    private static class SingletonBeanAdapter extends BeanAdapter
    {
       private final Object value;



More information about the jboss-svn-commits mailing list