[jboss-svn-commits] JBoss Common SVN: r3932 - in jbossxb/trunk: src/main/java/org/jboss/xb/binding and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 15 06:08:04 EST 2010


Author: alex.loubyansky at jboss.com
Date: 2010-01-15 06:08:04 -0500 (Fri, 15 Jan 2010)
New Revision: 3932

Modified:
   jbossxb/trunk/.classpath
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerFactory.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.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/SequenceBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java
Log:
optimizations: don't duplicate setting parser features (such as validation and namespace awareness), move implementation of parsing-related interfaces into a single class to avoid more classes being loaded and initialized, some other minor changes

Modified: jbossxb/trunk/.classpath
===================================================================
--- jbossxb/trunk/.classpath	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/.classpath	2010-01-15 11:08:04 UTC (rev 3932)
@@ -5,7 +5,7 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="var" path="M2_REPO/junit/junit/4.4/junit-4.4.jar"/>
 	<classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1.1/activation-1.1.1.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.9.GA/jboss-common-core-2.2.9.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.9.GA/jboss-common-core-2.2.9.GA.jar" sourcepath="/M2_REPO/org/jboss/jboss-common-core/2.2.9.GA/jboss-common-core-2.2.9.GA-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
 	<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
 	<classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerFactory.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerFactory.java	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerFactory.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -33,8 +33,8 @@
 public abstract class UnmarshallerFactory
 {
    protected Map<String, Object> features;
-   protected Boolean validation = Boolean.TRUE;
-   protected Boolean namespaces = Boolean.TRUE;
+   protected Boolean validation;
+   protected Boolean namespaces;
 
    public static UnmarshallerFactory newInstance()
    {
@@ -102,14 +102,9 @@
 
          JBossXBParser parser = unmarshaller.getParser();
          if(validation != null)
-         {
             parser.setFeature(Unmarshaller.VALIDATION, validation.booleanValue());
-         }
-
          if(namespaces != null)
-         {
             parser.setFeature(Unmarshaller.NAMESPACES, namespaces.booleanValue());
-         }
 
          if(features != null)
          {

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -21,6 +21,7 @@
   */
 package org.jboss.xb.binding.parser.sax;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
 
@@ -45,10 +46,9 @@
  * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
  * @version <tt>$Revision$</tt>
  */
-public class SaxJBossXBParser
-   implements JBossXBParser
+public class SaxJBossXBParser implements JBossXBParser, org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler, ErrorHandler
 {
-   private static final Logger log = Logger.getLogger(SaxJBossXBParser.class);
+   private static final Logger log = Logger.getLogger("org.jboss.xb.binding.parser.sax.SaxJBossXBParser");
 
    private static final SAXParserFactory saxFactory = SAXParserFactory.newInstance();
    static
@@ -69,38 +69,42 @@
    private final SAXParser parser;
    private final XMLReader reader;
    private JBossXBParser.ContentHandler contentHandler;
-   private DelegatingContentHandler delegateHandler;
    private boolean trace;
 
    public SaxJBossXBParser()
       throws JBossXBException
    {
+      trace = log.isTraceEnabled();
       try
       {
          parser = saxFactory.newSAXParser();
+         reader = parser.getXMLReader();
       }
       catch(Exception e)
       {
          throw new JBossXBException("Failed to create a new SAX parser", e);
       }
 
-      try
-      {
-         reader = parser.getXMLReader();
-      }
-      catch(SAXException e1)
-      {
-         throw new JBossXBRuntimeException("Failed to get parser's XMLReader", e1);
-      }
-
-      delegateHandler = new DelegatingContentHandler();
-      reader.setContentHandler(delegateHandler);
-      reader.setErrorHandler(MetaDataErrorHandler.INSTANCE);
-      reader.setEntityResolver(new JBossEntityResolver());
+      reader.setContentHandler(this);
+      reader.setErrorHandler(this);
+      
+      reader.setEntityResolver(
+            new EntityResolver()
+            {
+               private EntityResolver delegate;
+               public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
+               {
+                  if(delegate == null)
+                     delegate = new JBossEntityResolver();
+                  return delegate.resolveEntity(publicId, systemId);
+               }               
+            }
+      );
+      
       // LexicalHandler
       try
       {
-         reader.setProperty("http://xml.org/sax/properties/lexical-handler", delegateHandler);
+         reader.setProperty("http://xml.org/sax/properties/lexical-handler", this);
       }
       catch(Exception e)
       {
@@ -153,7 +157,6 @@
    public void parse(String systemId, ContentHandler handler) throws JBossXBException
    {
       this.contentHandler = handler;
-      trace = log.isTraceEnabled();
       if(trace)
          logParserInfo();
       
@@ -180,7 +183,6 @@
    public void parse(InputSource source, ContentHandler handler) throws JBossXBException
    {
       this.contentHandler = handler;
-      trace = log.isTraceEnabled();
       if(trace)
          logParserInfo();
 
@@ -196,7 +198,6 @@
 
    public String getLocationAsString(String fileName)
    {
-      Locator locator = delegateHandler.getDocumentLocator();
       if (locator == null)
          return fileName;
       else
@@ -231,205 +232,185 @@
       log.trace(sb.toString());
    }
 
-   // Inner
+   // LexicalHandler
+   private Locator locator;
 
-   private final class DelegatingContentHandler
-      implements org.xml.sax.ContentHandler,
-      org.xml.sax.ext.LexicalHandler
+   public void comment(char[] ch, int start, int length) throws SAXException
    {
-      Locator locator;
-      // Begin LexicalHandler
+   }
 
-      public void comment(char[] ch, int start, int length) throws SAXException
+   public void startDTD(String name, String publicId, String systemId) throws SAXException
+   {
+      if (contentHandler instanceof DtdAwareContentHandler)
       {
-         // TODO Auto-generated method stub
-         
+         DtdAwareContentHandler dach = (DtdAwareContentHandler) contentHandler;
+         dach.startDTD(name, publicId, systemId);
       }
+   }
 
-      public void startDTD(String name, String publicId, String systemId) throws SAXException
+   public void endDTD() throws SAXException
+   {
+      if (contentHandler instanceof DtdAwareContentHandler)
       {
-         if( contentHandler instanceof DtdAwareContentHandler )
-         {
-            DtdAwareContentHandler dach = (DtdAwareContentHandler) contentHandler;
-            dach.startDTD(name, publicId, systemId);
-         }
+         DtdAwareContentHandler dach = (DtdAwareContentHandler) contentHandler;
+         dach.endDTD();
       }
-      public void endDTD() throws SAXException
-      {
-         if( contentHandler instanceof DtdAwareContentHandler )
-         {
-            DtdAwareContentHandler dach = (DtdAwareContentHandler) contentHandler;
-            dach.endDTD();
-         }
-      }
+   }
 
-      public void startEntity(String name) throws SAXException
-      {
-         // TODO Auto-generated method stub
-         
-      }
-      public void endEntity(String name) throws SAXException
-      {
-         // TODO Auto-generated method stub
-         
-      }
+   public void startEntity(String name) throws SAXException
+   {
+   }
 
-      public void startCDATA() throws SAXException
-      {
-         // TODO Auto-generated method stub
-         
-      }
-      public void endCDATA() throws SAXException
-      {
-         // TODO Auto-generated method stub
-         
-      }
+   public void endEntity(String name) throws SAXException
+   {
+   }
 
-      // End LexicalHandler
+   public void startCDATA() throws SAXException
+   {
+   }
 
+   public void endCDATA() throws SAXException
+   {
+   }
+
+   // ContentHandler
+
       public void endDocument()
-      {
-      }
+   {
+   }
 
-      public void startDocument()
-      {
-      }
+   public void startDocument()
+   {
+   }
 
-      public void characters(char ch[], int start, int length)
-      {
-         // todo look at this later
-         // do not notify content handler if these are just whitespaces
-         //int i = start;
-         //while(i < start + length)
-         //{
-         //   if(!Character.isWhitespace(ch[i++]))
-         //   {
-               contentHandler.characters(ch, start, length);
-         //      break;
-         //   }
-         //}
-      }
+   public void characters(char ch[], int start, int length)
+   {
+      // todo look at this later
+      // do not notify content handler if these are just whitespaces
+      //int i = start;
+      //while(i < start + length)
+      //{
+      //   if(!Character.isWhitespace(ch[i++]))
+      //   {
+      contentHandler.characters(ch, start, length);
+      //      break;
+      //   }
+      //}
+   }
 
-      public void ignorableWhitespace(char ch[], int start, int length)
-      {
-      }
+   public void ignorableWhitespace(char ch[], int start, int length)
+   {
+   }
 
-      public void endPrefixMapping(String prefix)
-      {
-         contentHandler.endPrefixMapping(prefix);
-      }
+   public void endPrefixMapping(String prefix)
+   {
+      contentHandler.endPrefixMapping(prefix);
+   }
 
-      public void skippedEntity(String name)
-      {
-      }
+   public void skippedEntity(String name)
+   {
+   }
 
-      public Locator getDocumentLocator()
-      {
-         return locator;
-      }
-      
-      public void setDocumentLocator(Locator locator)
-      {
-         this.locator = locator;
-      }
+   public Locator getDocumentLocator()
+   {
+      return locator;
+   }
 
-      public void processingInstruction(String target, String data)
-      {
-         contentHandler.processingInstruction(target, data);
-      }
+   public void setDocumentLocator(Locator locator)
+   {
+      this.locator = locator;
+   }
 
-      public void startPrefixMapping(String prefix, String uri)
-      {
-         contentHandler.startPrefixMapping(prefix, uri);
-      }
+   public void processingInstruction(String target, String data)
+   {
+      contentHandler.processingInstruction(target, data);
+   }
 
-      public void endElement(String namespaceURI, String localName, String qName)
+   public void startPrefixMapping(String prefix, String uri)
+   {
+      contentHandler.startPrefixMapping(prefix, uri);
+   }
+
+   public void endElement(String namespaceURI, String localName, String qName)
+   {
+      if (trace)
       {
-         if(trace)
+         String name = localName.length() == 0 ? qName : namespaceURI + ':' + localName;
+         log.trace("Enter endElement " + name);
+         try
          {
-            String name = localName.length() == 0 ? qName : namespaceURI + ':' + localName;
-            log.trace("Enter endElement " + name);
-            try
-            {
-               contentHandler.endElement(namespaceURI, localName, qName);
-            }
-            finally
-            {
-               log.trace("Exit endElement  " + name);
-            }
-         }
-         else
             contentHandler.endElement(namespaceURI, localName, qName);
+         }
+         finally
+         {
+            log.trace("Exit endElement  " + name);
+         }
       }
+      else
+         contentHandler.endElement(namespaceURI, localName, qName);
+   }
 
-      public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
+   public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
+   {
+      if (trace)
       {
-         if(trace)
+         String name = localName.length() == 0 ? qName : namespaceURI + ':' + localName;
+         log.trace("Enter startElement " + name);
+
+         try
          {
-            String name = localName.length() == 0 ? qName : namespaceURI + ':' + localName;
-            log.trace("Enter startElement " + name);
-            
-            try
-            {
-               contentHandler.startElement(namespaceURI, localName, qName, atts);
-            }
-            finally
-            {
-               log.trace("Exit startElement  " + name);
-            }
-         }
-         else
             contentHandler.startElement(namespaceURI, localName, qName, atts);
+         }
+         finally
+         {
+            log.trace("Exit startElement  " + name);
+         }
       }
+      else
+         contentHandler.startElement(namespaceURI, localName, qName, atts);
    }
 
-   private static final class MetaDataErrorHandler
-      implements ErrorHandler
+   // Error handling
+   
+   public void warning(SAXParseException exception)
    {
-      public static final ErrorHandler INSTANCE = new MetaDataErrorHandler();
+      log.warn(formatMessage(exception));
+   }
 
-      public void warning(SAXParseException exception)
-      {
-         log.warn(formatMessage(exception));
-      }
+   public void error(SAXParseException exception) throws SAXException
+   {
+      throw new SAXException(formatMessage(exception));
+   }
 
-      public void error(SAXParseException exception)
-         throws SAXException
-      {
-         throw new SAXException(formatMessage(exception));
-      }
+   public void fatalError(SAXParseException exception) throws SAXException
+   {
+      throw new SAXException(formatMessage(exception));
+   }
 
-      public void fatalError(SAXParseException exception)
-         throws SAXException
+   public String formatMessage(SAXParseException exception)
+   {
+      StringBuffer buffer = new StringBuffer(50);
+      buffer.append(exception.getMessage()).append(" @ ");
+      String location = exception.getPublicId();
+      if (location != null)
       {
-         throw new SAXException(formatMessage(exception));
+         buffer.append(location);
       }
-
-      public String formatMessage(SAXParseException exception)
+      else
       {
-         StringBuffer buffer = new StringBuffer(50);
-         buffer.append(exception.getMessage()).append(" @ ");
-         String location = exception.getPublicId();
-         if(location != null)
+         location = exception.getSystemId();
+         if (location != null)
          {
             buffer.append(location);
          }
          else
          {
-            location = exception.getSystemId();
-            if(location != null)
-            {
-               buffer.append(location);
-            }
-            else
-            {
-               buffer.append("*unknown*");
-            }
+            buffer.append("*unknown*");
          }
-         buffer.append('[');
-         buffer.append(exception.getLineNumber()).append(',');
-         buffer.append(exception.getColumnNumber()).append(']');
-         return buffer.toString();
       }
+      buffer.append('[');
+      buffer.append(exception.getLineNumber()).append(',');
+      buffer.append(exception.getColumnNumber()).append(']');
+      return buffer.toString();
    }
 }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -118,5 +118,13 @@
          nextNotFound();
          return null;
       }
+      
+      @Override
+      protected ParticleHandler getHandler()
+      {
+         TermBinding term = particle.getTerm();
+         ParticleHandler handler = ((ModelGroupBinding)term).getHandler();
+         return handler == null ? DefaultHandlers.ELEMENT_HANDLER : handler;
+      }
    }
 }

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-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -135,5 +135,13 @@
          nextNotFound();
          return null;
       }
+      
+      @Override
+      protected ParticleHandler getHandler()
+      {
+         TermBinding term = particle.getTerm();
+         ParticleHandler handler = ((ModelGroupBinding)term).getHandler();
+         return handler == null ? DefaultHandlers.ELEMENT_HANDLER : handler;
+      }
    }
 }

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-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -185,5 +185,13 @@
          super.nextNotFound();
          pos = -1;
       }
+
+      @Override
+      protected ParticleHandler getHandler()
+      {
+         TermBinding term = particle.getTerm();
+         ParticleHandler handler = ((ModelGroupBinding)term).getHandler();
+         return handler == null ? DefaultHandlers.ELEMENT_HANDLER : handler;
+      }
    }
 }

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	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -24,6 +24,7 @@
 import java.lang.reflect.Method;
 
 import javax.xml.namespace.QName;
+
 import org.jboss.logging.Logger;
 import org.jboss.xb.binding.AttributesImpl;
 import org.jboss.xb.binding.Constants;
@@ -48,7 +49,7 @@
 public class SundayContentHandler
    implements JBossXBParser.DtdAwareContentHandler, PositionStack
 {
-   final static Logger log = Logger.getLogger(SundayContentHandler.class);
+   private static Logger log;
 
    public final static Object NIL = new Object();
 
@@ -63,9 +64,7 @@
    private String dtdSystemId;
    private boolean sawDTD;
 
-   private boolean trace = log.isTraceEnabled();
-
-   private UnmarshallingContextImpl ctx = new UnmarshallingContextImpl();
+   private UnmarshallingContextImpl ctx;
    private NamespaceRegistry nsRegistry = new NamespaceRegistry();
 
    public SundayContentHandler(SchemaBinding schema)
@@ -237,7 +236,8 @@
       ElementBinding elementBinding = (ElementBinding) head.getParticle().getTerm();
       Object root = elementBinding.getType().getValueAdapter().cast(head.getValue(), Object.class);
       head = null;
-         
+      nsRegistry = null;
+      
       if (sawDTD)
       {
          // Probably should be integrated into schema binding?
@@ -251,7 +251,9 @@
          }
          catch (Exception e)
          {
-            if(trace)
+            if(log == null)
+               log = Logger.getLogger(SundayContentHandler.class);
+            if(log.isTraceEnabled())
                log.trace("No setDTD found on root: " + root);
          }
       }
@@ -302,6 +304,8 @@
 
    public UnmarshallingContextImpl getContext()
    {
+      if(ctx == null)
+         ctx = new UnmarshallingContextImpl();
       return ctx;
    }
 

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnorderedSequenceBinding.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -183,5 +183,13 @@
          nextNotFound();
          return null;
       }
+      
+      @Override
+      protected ParticleHandler getHandler()
+      {
+         TermBinding term = particle.getTerm();
+         ParticleHandler handler = ((ModelGroupBinding)term).getHandler();
+         return handler == null ? DefaultHandlers.ELEMENT_HANDLER : handler;
+      }
    }
 }

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-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -22,7 +22,6 @@
 package org.jboss.xb.binding.sunday.unmarshalling;
 
 import javax.xml.namespace.QName;
-import org.jboss.logging.Logger;
 import org.jboss.xb.binding.JBossXBRuntimeException;
 import org.jboss.xb.binding.ObjectLocalMarshaller;
 import org.jboss.xb.binding.Util;
@@ -37,7 +36,7 @@
 public class WildcardBinding
    extends TermBinding
 {
-   private static final Logger log = Logger.getLogger(WildcardBinding.class);
+   //private static final Logger log = Logger.getLogger(WildcardBinding.class);
 
    private static final short PC_LAX = 3;
    private static final short PC_SKIP = 2;
@@ -187,14 +186,14 @@
     */
    private ElementBinding getUnresolvedElement(QName qName, boolean required)
    {
-      if(log.isTraceEnabled())
+/*      if(log.isTraceEnabled())
       {
          log.trace(
             "getUnresolvedElement for " + qName + ", required=" + required
             + ", unresolvedElementHandler=" + unresolvedElementHandler
          );
       }
-
+*/
       if(unresolvedElementHandler == null)
       {
          if(required)
@@ -328,5 +327,11 @@
          nextNotFound();
          return null;
       }
+      
+      @Override
+      protected ParticleHandler getHandler()
+      {
+         return NoopParticleHandler.INSTANCE;
+      }
    }
 }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -24,15 +24,11 @@
 import javax.xml.namespace.QName;
 
 import org.jboss.logging.Logger;
-import org.jboss.xb.binding.sunday.unmarshalling.DefaultHandlers;
-import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.NoopParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.PositionStack;
 import org.jboss.xb.binding.sunday.unmarshalling.RepeatableParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.TermBeforeSetParentCallback;
-import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler.UnmarshallingContextImpl;
 import org.xml.sax.Attributes;
@@ -143,7 +139,7 @@
    public void initValue(Attributes atts)
    {
       if(handler == null)
-         handler = getHandler(particle.getTerm());
+         handler = getHandler();
       Object parent = previous == null ? null : previous.getValue();
       o = handler.startParticle(parent, qName, particle, atts, stack.getNamespaceRegistry());
    }
@@ -221,16 +217,5 @@
                parentPosition.getParticle(), handler);
    }
 
-   private ParticleHandler getHandler(TermBinding term)
-   {
-      ParticleHandler handler = null;
-      if(term.isModelGroup())
-         handler = ((ModelGroupBinding)term).getHandler();
-      else if(term.isWildcard())
-         //handler = ((WildcardBinding)term).getWildcardHandler();
-         handler = NoopParticleHandler.INSTANCE;
-      else
-         throw new IllegalArgumentException("Unexpected term " + term);
-      return handler == null ? DefaultHandlers.ELEMENT_HANDLER : handler;
-   }
+   protected abstract ParticleHandler getHandler();
 }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java	2010-01-15 00:55:51 UTC (rev 3931)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java	2010-01-15 11:08:04 UTC (rev 3932)
@@ -621,4 +621,10 @@
          indentation = null;
       }
    }
+   
+   @Override
+   protected ParticleHandler getHandler()
+   {
+      return DefaultHandlers.ELEMENT_HANDLER;
+   }
 }
\ No newline at end of file



More information about the jboss-svn-commits mailing list