[jboss-svn-commits] JBoss Common SVN: r2141 - in jbossxb/branches/as405/src: main/java/org/jboss/xb/binding/sunday/unmarshalling test/java/org/jboss/test/xml

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 24 17:58:59 EDT 2006


Author: alex.loubyansky at jboss.com
Date: 2006-10-24 17:58:54 -0400 (Tue, 24 Oct 2006)
New Revision: 2141

Modified:
   jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
   jbossxb/branches/as405/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java
Log:
don't use characters handler for elements of simple types that are xop-optimized

Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2006-10-24 21:51:59 UTC (rev 2140)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2006-10-24 21:58:54 UTC (rev 2141)
@@ -255,12 +255,12 @@
                         ElementBinding xopInclude = new ElementBinding(schema, Constants.QNAME_XOP_INCLUDE, xopIncludeType);
 
                         particle = new ParticleBinding(xopInclude);
-                        
-                        ElementBinding parentElement = (ElementBinding) stack.peek().particle.getTerm();
+
+                        ElementBinding parentElement = (ElementBinding) item.particle.getTerm();
                         parentElement.setXopUnmarshaller(schema.getXopUnmarshaller());
-                        
+
                         item.handler = DefaultHandlers.XOP_HANDLER;
-                        item.cHandler = CharactersHandler.NOOP;
+                        item.ignoreCharacters = true;
                         item.o = item.handler.startParticle(stack.peek().o, startName, stack.peek().particle, null, nsRegistry);
                         break;
                      }
@@ -809,7 +809,7 @@
             charType = type;
          }
 
-         CharactersHandler charHandler = item.cHandler == null ? charType.getCharactersHandler() : item.cHandler;
+         CharactersHandler charHandler = item.ignoreCharacters ? null : charType.getCharactersHandler();
 
          /**
           * If there is text content then unmarshal it and set.
@@ -883,7 +883,7 @@
                }
                else if(charHandler != null)
                {
-                  TermBeforeSetParentCallback beforeSetParent = element.getBeforeSetParentCallback();
+                  TermBeforeSetParentCallback beforeSetParent = charType.getBeforeSetParentCallback();
                   if(beforeSetParent != null)
                   {
                      ctx.parent = o;
@@ -1126,7 +1126,7 @@
       final ModelGroupBinding.Cursor cursor;
       final ParticleBinding particle;
       ParticleHandler handler;
-      CharactersHandler cHandler;
+      boolean ignoreCharacters;
       Object o;
       ValueList repeatableParticleValue;
       StringBuffer textContent;

Modified: jbossxb/branches/as405/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java
===================================================================
--- jbossxb/branches/as405/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java	2006-10-24 21:51:59 UTC (rev 2140)
+++ jbossxb/branches/as405/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java	2006-10-24 21:58:54 UTC (rev 2141)
@@ -25,7 +25,12 @@
 import org.jboss.xb.binding.UnmarshallerFactory;
 import org.jboss.xb.binding.sunday.marshalling.MarshallerImpl;
 import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBeforeSetParentCallback;
+import org.jboss.xb.binding.sunday.unmarshalling.UnmarshallingContext;
 import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
 import org.jboss.xb.binding.sunday.xop.XOPMarshaller;
 import org.jboss.xb.binding.sunday.xop.XOPObject;
@@ -43,15 +48,23 @@
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.Arrays;
+import java.util.Iterator;
 
+import junit.framework.TestSuite;
 
+
 /**
  * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
  * @version <tt>$Revision$</tt>
  */
 public class XOPUnitTestCase
     extends AbstractJBossXBTest
-{
+{   
+   public static final TestSuite suite()
+   {
+      return new TestSuite(XOPUnitTestCase.class);
+   }
+
    public XOPUnitTestCase(String name)
    {
       super(name);
@@ -234,6 +247,51 @@
 
          SCHEMA = XsdBinder.bind(testXsd, resolver);
          SCHEMA.setIgnoreUnresolvedFieldOrClass(false);
+
+         TermBeforeSetParentCallback callback = new TermBeforeSetParentCallback()
+         {
+            public Object beforeSetParent(Object o, UnmarshallingContext ctx)
+            {
+               ElementBinding e = (ElementBinding) ctx.getParticle().getTerm();
+               Class propType = ctx.resolvePropertyType();
+               
+               String localPart = e.getQName().getLocalPart();
+               if("image".equals(localPart) ||
+                     "sig".equals(localPart) ||
+                     "imageWithContentType".equals(localPart) ||
+                     "octets".equals(localPart) ||
+                     "jpeg".equals(localPart))
+               {
+                  assertEquals("expected " + byte[].class + " for " + localPart, byte[].class, propType);
+               }
+               else if("awtImage".equals(localPart))
+               {
+                  assertEquals(java.awt.Image.class, propType);
+               }
+               else if("string".equals(localPart))
+               {
+                  assertEquals(String.class, propType);
+               }
+               else if("source".equals(localPart))
+               {
+                  assertEquals(javax.xml.transform.Source.class, propType);
+               }
+               else
+               {
+                  fail("unexpected element: " + e.getQName());
+               }
+               return o;
+            }
+         };
+
+         ElementBinding e = SCHEMA.getElement(new javax.xml.namespace.QName("http://www.jboss.org/xml/test/xop", "e"));
+         SequenceBinding seq = (SequenceBinding) e.getType().getParticle().getTerm();
+         for(Iterator i = seq.getParticles().iterator(); i.hasNext();)
+         {
+            ParticleBinding particle = (ParticleBinding) i.next();
+            ElementBinding child = (ElementBinding) particle.getTerm();
+            child.setBeforeSetParentCallback(callback);
+         }
       }
 
       if(NON_OPT_XML == null)




More information about the jboss-svn-commits mailing list