[jboss-svn-commits] JBoss Common SVN: r2139 - in jbossxb/branches/as405/src: main/java/org/jboss/xb/binding/introspection main/java/org/jboss/xb/binding/sunday/marshalling 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
Thu Oct 19 09:54:38 EDT 2006
Author: alex.loubyansky at jboss.com
Date: 2006-10-19 09:54:28 -0400 (Thu, 19 Oct 2006)
New Revision: 2139
Added:
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingCallback.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBeforeSetParentCallback.java
Removed:
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingHandler.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermAfterUnmarshallingHandler.java
Modified:
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/introspection/FieldInfo.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/MarshallerImpl.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java
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/TermBinding.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnmarshallingContext.java
jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
jbossxb/branches/as405/src/test/java/org/jboss/test/xml/BeforeMarshalAfterUnmarshalHandlerTestCase.java
Log:
backport from trunk: re-worked TermAfterUnmarshallingHandler to TermBeforeSetParentHandler making more useful contextual info available, other refactorings
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/introspection/FieldInfo.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/introspection/FieldInfo.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/introspection/FieldInfo.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -250,7 +250,7 @@
{
throw new JBossXBRuntimeException(
"Failed to set value '" + value + "' for property '" + name + "' defined in " +
- owner + " on instance " + owner, e
+ owner.getClass().getName() + " on instance " + owner, e
);
}
}
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/MarshallerImpl.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/MarshallerImpl.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/MarshallerImpl.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -299,7 +299,7 @@
}
}
- TermBeforeMarshallingHandler marshallingHandler = element.getBeforeMarshallingHandler();
+ TermBeforeMarshallingCallback marshallingHandler = element.getBeforeMarshallingCallback();
if(marshallingHandler != null)
{
value = marshallingHandler.beforeMarshalling(value, ctx);
@@ -669,7 +669,7 @@
modelGroup.getSchema().isIgnoreUnresolvedFieldOrClass()
);
- TermBeforeMarshallingHandler marshallingHandler = modelGroup.getBeforeMarshallingHandler();
+ TermBeforeMarshallingCallback marshallingHandler = modelGroup.getBeforeMarshallingCallback();
i = o != null && isRepeatable(particle) ? getIterator(o) : null;
if(i != null)
@@ -717,7 +717,7 @@
popWildcardValue = true;
}
- TermBeforeMarshallingHandler marshallingHandler = term.getBeforeMarshallingHandler();
+ TermBeforeMarshallingCallback marshallingHandler = term.getBeforeMarshallingCallback();
i = o != null && isRepeatable(particle) ? getIterator(o) : null;
if(i != null)
Added: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingCallback.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingCallback.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingCallback.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -0,0 +1,31 @@
+/*
+ * 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.xb.binding.sunday.marshalling;
+
+/**
+ * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
+ * @version <tt>$Revision: 2096 $</tt>
+ */
+public interface TermBeforeMarshallingCallback
+{
+ Object beforeMarshalling(Object o, MarshallingContext ctx);
+}
Deleted: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingHandler.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingHandler.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/marshalling/TermBeforeMarshallingHandler.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -1,31 +0,0 @@
-/*
- * 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.xb.binding.sunday.marshalling;
-
-/**
- * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
- * @version <tt>$Revision: 2096 $</tt>
- */
-public interface TermBeforeMarshallingHandler
-{
- Object beforeMarshalling(Object o, MarshallingContext ctx);
-}
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/AllBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -56,7 +56,7 @@
public void addParticle(ParticleBinding particle)
{
- if(!(particle.getTerm() instanceof ElementBinding))
+ if(!particle.getTerm().isElement())
{
throw new JBossXBRuntimeException("Model group all may contain only elements!");
}
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -32,7 +32,7 @@
import org.jboss.xb.binding.metadata.PutMethodMetaData;
import org.jboss.xb.binding.metadata.ValueMetaData;
import org.jboss.xb.binding.JBossXBRuntimeException;
-import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingHandler;
+import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingCallback;
import org.jboss.xb.binding.sunday.xop.XOPUnmarshaller;
/**
@@ -147,14 +147,14 @@
return valueAdapter == null ? typeBinding.getValueAdapter() : valueAdapter;
}
- public TermBeforeMarshallingHandler getBeforeMarshallingHandler()
+ public TermBeforeMarshallingCallback getBeforeMarshallingCallback()
{
- return beforeMarshallingHandler == null ? typeBinding.getBeforeMarshallingHandler() : beforeMarshallingHandler;
+ return beforeMarshallingCallback == null ? typeBinding.getBeforeMarshallingCallback() : beforeMarshallingCallback;
}
- public TermAfterUnmarshallingHandler getAfterUnmarshallingHandler()
+ public TermBeforeSetParentCallback getBeforeSetParentCallback()
{
- return afterUnmarshallingHandler == null ? typeBinding.getAfterUnmarshallingHandler() : afterUnmarshallingHandler;
+ return beforeSetParentCallback == null ? typeBinding.getBeforeSetParentCallback() : beforeSetParentCallback;
}
public boolean isNillable()
@@ -177,6 +177,11 @@
return false;
}
+ public boolean isElement()
+ {
+ return true;
+ }
+
public XOPUnmarshaller getXopUnmarshaller()
{
return xopUnmarshaller == null ? typeBinding.getXopUnmarshaller() : xopUnmarshaller;
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -121,6 +121,11 @@
return false;
}
+ public boolean isElement()
+ {
+ return false;
+ }
+
// Inner
public abstract class Cursor
@@ -179,8 +184,8 @@
for(int i = 0; i < group.size(); ++i)
{
ParticleBinding nextParticle = (ParticleBinding)group.get(i);
- Object item = nextParticle.getTerm();
- if(item instanceof ElementBinding)
+ TermBinding item = nextParticle.getTerm();
+ if(item.isElement())
{
ElementBinding choice = (ElementBinding)item;
if(qName.equals(choice.getQName()))
@@ -189,7 +194,7 @@
break;
}
}
- else if(item instanceof ModelGroupBinding)
+ else if(item.isModelGroup())
{
ModelGroupBinding modelGroup = (ModelGroupBinding)item;
if(!passedGroups.contains(modelGroup))
@@ -219,7 +224,7 @@
}
}
}
- else if(item instanceof WildcardBinding && !ignoreWildcards)
+ else if(!ignoreWildcards)
{
WildcardBinding wildcard = (WildcardBinding)item;
ElementBinding e = wildcard.getElement(qName, atts);
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -58,7 +58,7 @@
{
case 0:
sequence = Collections.singletonList(particle);
- if(particle.isRepeatable() && particle.getTerm() instanceof ElementBinding)
+ if(particle.isRepeatable() && particle.getTerm().isElement())
{
ElementBinding element = (ElementBinding)particle.getTerm();
if(particle.isRepeatable())
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-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -37,7 +37,9 @@
import org.jboss.xb.binding.group.ValueList;
import org.jboss.xb.binding.group.ValueListHandler;
import org.jboss.xb.binding.group.ValueListInitializer;
+import org.jboss.xb.binding.introspection.FieldInfo;
import org.jboss.xb.binding.metadata.CharactersMetaData;
+import org.jboss.xb.binding.metadata.PropertyMetaData;
import org.jboss.xb.binding.metadata.ValueMetaData;
import org.jboss.xb.binding.parser.JBossXBParser;
import org.jboss.xb.binding.sunday.xop.XOPIncludeHandler;
@@ -726,14 +728,6 @@
else
{
o = handler.endParticle(item.o, qName, modelGroupParticle);
-
- TermAfterUnmarshallingHandler unmHandler = modelGroupParticle.getTerm().getAfterUnmarshallingHandler();
- if(unmHandler != null)
- {
- ctx.particle = modelGroupParticle;
- o = unmHandler.afterUnmarshalling(o, ctx);
- ctx.particle = null;
- }
}
item.ended = true;
@@ -742,7 +736,7 @@
item = (StackItem)stack.peek(parentStackPos);
if(item.o != null)
{
- ParticleBinding parentParticle = item.particle;
+ ParticleBinding parentParticle = getParentParticle();//item.particle;
if(parentParticle == null)
{
parentParticle = item.particle;
@@ -774,6 +768,23 @@
// Private
+ private ParticleBinding getParentParticle()
+ {
+ ListIterator iter = stack.prevIterator();
+ while(iter.hasPrevious())
+ {
+ StackItem prev = (StackItem)iter.previous();
+ ParticleBinding peeked = prev.particle;
+
+ TermBinding term = peeked.getTerm();
+ if(!term.isSkip())
+ {
+ return peeked;
+ }
+ }
+ return null;
+ }
+
private void endElement()
{
StackItem item = stack.peek();
@@ -872,6 +883,16 @@
}
else if(charHandler != null)
{
+ TermBeforeSetParentCallback beforeSetParent = element.getBeforeSetParentCallback();
+ if(beforeSetParent != null)
+ {
+ ctx.parent = o;
+ ctx.particle = particle;
+ ctx.parentParticle = getParentParticle();
+ unmarshalled = beforeSetParent.beforeSetParent(unmarshalled, ctx);
+ ctx.clear();
+ }
+
if(o instanceof ValueList)
{
ValueList valueList = (ValueList)o;
@@ -936,14 +957,6 @@
else
{
o = handler.endParticle(o, endName, particle);
-
- TermAfterUnmarshallingHandler unmHandler = particle.getTerm().getAfterUnmarshallingHandler();
- if(unmHandler != null)
- {
- ctx.particle = particle;
- o = unmHandler.afterUnmarshalling(o, ctx);
- ctx.particle = null;
- }
}
for(int i = interceptorsTotal - 1; i >= 0; --i)
@@ -958,23 +971,17 @@
if(interceptorsTotal == 0)
{
+ ParticleBinding parentParticle = getParentParticle();
+ boolean hasWildcard = false;
ParticleHandler wildcardHandler = null;
- ParticleBinding parentParticle = null;
- ListIterator iter = stack.prevIterator();
- while(iter.hasPrevious())
+ if (parentParticle != null && parentParticle.getTerm().isElement())
{
- StackItem prev = (StackItem)iter.previous();
- ParticleBinding peeked = prev.particle;
- if(peeked != null && peeked.getTerm() instanceof ElementBinding)
+ WildcardBinding wildcard = ((ElementBinding) parentParticle.getTerm()).getType().getWildcard();
+ if (wildcard != null)
{
- parentParticle = peeked;
- WildcardBinding wildcard = ((ElementBinding)parentParticle.getTerm()).getType().getWildcard();
- if(wildcard != null)
- {
- wildcardHandler = wildcard.getWildcardHandler();
- }
- break;
+ hasWildcard = true;
+ wildcardHandler = wildcard.getWildcardHandler();
}
}
@@ -997,12 +1004,10 @@
o, endName, particle, parentParticle);
}
}
- else if(parentParticle != null &&
- ((ElementBinding)parentParticle.getTerm()).getType().hasWildcard() &&
- stack.size() > 1)
+ else if(parentParticle != null && hasWildcard && stack.size() > 1)
{
// the parent has anyType, so it gets the value of its child
- iter = stack.prevIterator();
+ ListIterator iter = stack.prevIterator();
while(iter.hasPrevious())
{
StackItem peeked = (StackItem)iter.previous();
@@ -1047,6 +1052,16 @@
ParticleBinding particle,
ParticleBinding parentParticle)
{
+ TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback();
+ if(beforeSetParent != null)
+ {
+ ctx.parent = parent;
+ ctx.particle = particle;
+ ctx.parentParticle = parentParticle;
+ o = beforeSetParent.beforeSetParent(o, ctx);
+ ctx.clear();
+ }
+
if(parent instanceof ValueList /*&& !particle.getTerm().isSkip()*/)
{
if(parent == o)
@@ -1204,11 +1219,71 @@
private class UnmarshallingContextImpl implements UnmarshallingContext
{
+ Object parent;
ParticleBinding particle;
+ ParticleBinding parentParticle;
+ public Object getParentValue()
+ {
+ return parent;
+ }
+
public ParticleBinding getParticle()
{
return particle;
}
+
+ public ParticleBinding getParentParticle()
+ {
+ return parentParticle;
+ }
+
+ public String resolvePropertyName()
+ {
+ TermBinding term = particle.getTerm();
+ PropertyMetaData propertyMetaData = term.getPropertyMetaData();
+ String prop = propertyMetaData == null ? null : propertyMetaData.getName();
+
+ if(prop != null)
+ {
+ return prop;
+ }
+
+ if(term.isElement())
+ {
+ QName name = ((ElementBinding)term).getQName();
+ prop = Util.xmlNameToFieldName(name.getLocalPart(), term.getSchema().isIgnoreLowLine());
+ }
+
+ return prop;
+ }
+
+ public Class resolvePropertyType()
+ {
+ if(parent == null)
+ {
+ return null;
+ }
+
+ String prop = resolvePropertyName();
+ if(prop != null)
+ {
+ FieldInfo fieldInfo = FieldInfo.getFieldInfo(parent.getClass(), prop, false);
+ if (fieldInfo != null)
+ {
+ return fieldInfo.getType();
+ }
+ }
+ return null;
+ }
+
+ // private
+
+ void clear()
+ {
+ ctx.parent = null;
+ ctx.particle = null;
+ ctx.parentParticle = null;
+ }
}
}
Deleted: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermAfterUnmarshallingHandler.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermAfterUnmarshallingHandler.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermAfterUnmarshallingHandler.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -1,32 +0,0 @@
-/*
- * 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.xb.binding.sunday.unmarshalling;
-
-
-/**
- * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
- * @version <tt>$Revision: 2045 $</tt>
- */
-public interface TermAfterUnmarshallingHandler
-{
- Object afterUnmarshalling(Object o, UnmarshallingContext ctx);
-}
Added: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBeforeSetParentCallback.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBeforeSetParentCallback.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBeforeSetParentCallback.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -0,0 +1,32 @@
+/*
+ * 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.xb.binding.sunday.unmarshalling;
+
+
+/**
+ * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
+ * @version <tt>$Revision: 2045 $</tt>
+ */
+public interface TermBeforeSetParentCallback
+{
+ Object beforeSetParent(Object o, UnmarshallingContext ctx);
+}
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -27,7 +27,7 @@
import org.jboss.xb.binding.metadata.PutMethodMetaData;
import org.jboss.xb.binding.metadata.AddMethodMetaData;
import org.jboss.xb.binding.metadata.ValueMetaData;
-import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingHandler;
+import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingCallback;
/**
* @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
@@ -47,8 +47,8 @@
protected boolean mapEntryValue;
protected Boolean skip;
protected ValueAdapter valueAdapter;
- protected TermBeforeMarshallingHandler beforeMarshallingHandler;
- protected TermAfterUnmarshallingHandler afterUnmarshallingHandler;
+ protected TermBeforeMarshallingCallback beforeMarshallingCallback;
+ protected TermBeforeSetParentCallback beforeSetParentCallback;
protected TermBinding(SchemaBinding schema)
{
@@ -165,23 +165,25 @@
public abstract boolean isWildcard();
- public void setBeforeMarshallingHandler(TermBeforeMarshallingHandler marshallingHandler)
+ public abstract boolean isElement();
+
+ public void setBeforeMarshallingCallback(TermBeforeMarshallingCallback marshallingHandler)
{
- this.beforeMarshallingHandler = marshallingHandler;
+ this.beforeMarshallingCallback = marshallingHandler;
}
- public TermBeforeMarshallingHandler getBeforeMarshallingHandler()
+ public TermBeforeMarshallingCallback getBeforeMarshallingCallback()
{
- return beforeMarshallingHandler;
+ return beforeMarshallingCallback;
}
- public void setAfterUnmarshallingHandler(TermAfterUnmarshallingHandler unmarshallingHandler)
+ public void setBeforeSetParentCallback(TermBeforeSetParentCallback beforeSetParent)
{
- this.afterUnmarshallingHandler = unmarshallingHandler;
+ this.beforeSetParentCallback = beforeSetParent;
}
- public TermAfterUnmarshallingHandler getAfterUnmarshallingHandler()
+ public TermBeforeSetParentCallback getBeforeSetParentCallback()
{
- return afterUnmarshallingHandler;
+ return beforeSetParentCallback;
}
}
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -38,7 +38,7 @@
import org.jboss.xb.binding.metadata.PropertyMetaData;
import org.jboss.xb.binding.metadata.ValueMetaData;
import org.jboss.xb.binding.Constants;
-import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingHandler;
+import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingCallback;
import org.jboss.xb.binding.sunday.xop.XOPUnmarshaller;
import org.jboss.xb.binding.sunday.xop.XOPMarshaller;
import org.xml.sax.Attributes;
@@ -66,8 +66,8 @@
private CharactersMetaData charMetaData;
private AddMethodMetaData addMethodMetaData;
private ValueAdapter valueAdapter = ValueAdapter.NOOP;
- private TermBeforeMarshallingHandler marshallingHandler;
- private TermAfterUnmarshallingHandler unmarshallingHandler;
+ private TermBeforeMarshallingCallback beforeMarshallingCallback;
+ private TermBeforeSetParentCallback beforeSetParentCallback;
private Boolean startElementCreatesObject;
private Boolean simple;
@@ -567,24 +567,24 @@
return true;
}
- public void setBeforeMarshallingHandler(TermBeforeMarshallingHandler marshallingHandler)
+ public void setBeforeMarshallingCallback(TermBeforeMarshallingCallback marshallingHandler)
{
- this.marshallingHandler = marshallingHandler;
+ this.beforeMarshallingCallback = marshallingHandler;
}
- public TermBeforeMarshallingHandler getBeforeMarshallingHandler()
+ public TermBeforeMarshallingCallback getBeforeMarshallingCallback()
{
- return marshallingHandler;
+ return beforeMarshallingCallback;
}
- public void setAfterUnmarshallingHandler(TermAfterUnmarshallingHandler unmarshallingHandler)
+ public void setBeforeSetParentCallback(TermBeforeSetParentCallback beforeSetParent)
{
- this.unmarshallingHandler = unmarshallingHandler;
+ this.beforeSetParentCallback = beforeSetParent;
}
- public TermAfterUnmarshallingHandler getAfterUnmarshallingHandler()
+ public TermBeforeSetParentCallback getBeforeSetParentCallback()
{
- return unmarshallingHandler;
+ return beforeSetParentCallback;
}
public String toString()
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnmarshallingContext.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnmarshallingContext.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/UnmarshallingContext.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -27,5 +27,13 @@
*/
public interface UnmarshallingContext
{
+ Object getParentValue();
+
ParticleBinding getParticle();
+
+ ParticleBinding getParentParticle();
+
+ String resolvePropertyName();
+
+ Class resolvePropertyType();
}
Modified: jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
===================================================================
--- jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -244,4 +244,9 @@
{
return true;
}
+
+ public boolean isElement()
+ {
+ return false;
+ }
}
Modified: jbossxb/branches/as405/src/test/java/org/jboss/test/xml/BeforeMarshalAfterUnmarshalHandlerTestCase.java
===================================================================
--- jbossxb/branches/as405/src/test/java/org/jboss/test/xml/BeforeMarshalAfterUnmarshalHandlerTestCase.java 2006-10-19 13:23:00 UTC (rev 2138)
+++ jbossxb/branches/as405/src/test/java/org/jboss/test/xml/BeforeMarshalAfterUnmarshalHandlerTestCase.java 2006-10-19 13:54:28 UTC (rev 2139)
@@ -33,12 +33,13 @@
import org.jboss.xb.binding.UnmarshallerFactory;
import org.jboss.xb.binding.sunday.marshalling.MarshallerImpl;
import org.jboss.xb.binding.sunday.marshalling.MarshallingContext;
-import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingHandler;
+import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingCallback;
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.TermAfterUnmarshallingHandler;
+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.UnmarshallingContext;
import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
@@ -194,21 +195,60 @@
TypeBinding stringType = SCHEMA.getType(Constants.QNAME_STRING);
// stringType
- stringType.setBeforeMarshallingHandler(new TermBeforeMarshallingHandler()
+ stringType.setBeforeMarshallingCallback(new TermBeforeMarshallingCallback()
{
public Object beforeMarshalling(Object o, MarshallingContext ctx)
{
if(o != null)
{
+ ParticleBinding particle = ctx.getParticleBinding();
+ assertNotNull(particle);
+ TermBinding term = particle.getTerm();
+ assertTrue(term.isElement());
+ ElementBinding element = (ElementBinding) term;
+ String localPart = element.getQName().getLocalPart();
+ assertTrue("stringType".endsWith(localPart) || "item".equals(localPart));
+ TypeBinding type = element.getType();
+ assertEquals(Constants.QNAME_STRING, type.getQName());
+
o = ((GlobalElement.StringType)o).data;
}
return o;
}
});
- stringType.setAfterUnmarshallingHandler(new TermAfterUnmarshallingHandler()
+ stringType.setBeforeSetParentCallback(new TermBeforeSetParentCallback()
{
- public Object afterUnmarshalling(Object o, UnmarshallingContext ctx)
+ public Object beforeSetParent(Object o, UnmarshallingContext ctx)
{
+ ParticleBinding particle = ctx.getParticle();
+ assertNotNull(particle);
+ assertTrue(particle.getTerm().isElement());
+ ElementBinding element = (ElementBinding) particle.getTerm();
+
+ String eName = element.getQName().getLocalPart();
+ if(eName.equals("stringType"))
+ {
+ assertTrue(ctx.getParentValue() instanceof GlobalElement);
+ TermBinding parentTerm = ctx.getParentParticle().getTerm();
+ assertTrue(parentTerm.isElement());
+ assertEquals("global", ((ElementBinding)parentTerm).getQName().getLocalPart());
+
+ assertEquals("stringType", ctx.resolvePropertyName());
+ assertEquals(StringType.class, ctx.resolvePropertyType());
+ }
+ else if(eName.equals("item"))
+ {
+ assertTrue(ctx.getParentValue() instanceof GlobalElement.Sequence);
+ TermBinding parentTerm = ctx.getParentParticle().getTerm();
+ assertTrue(parentTerm instanceof SequenceBinding);
+
+ assertEquals("item", ctx.resolvePropertyName());
+ assertEquals(StringType.class, ctx.resolvePropertyType());
+ }
+ else
+ {
+ fail("Expected stringType or item but got " + eName);
+ }
return o == null ? null : new GlobalElement.StringType((String)o);
}
});
@@ -219,33 +259,46 @@
Iterator iter = sequence.getParticles().iterator();
iter.next(); // stringType element
ElementBinding stringElement = (ElementBinding) ((ParticleBinding)iter.next()).getTerm();
- stringElement.setBeforeMarshallingHandler(new TermBeforeMarshallingHandler()
+ stringElement.setBeforeMarshallingCallback(new TermBeforeMarshallingCallback()
{
public Object beforeMarshalling(Object o, MarshallingContext ctx)
{
ParticleBinding particle = ctx.getParticleBinding();
assertNotNull(particle);
- assertTrue(particle.getTerm() instanceof ElementBinding);
+ assertTrue(particle.getTerm().isElement());
ElementBinding element = (ElementBinding) particle.getTerm();
assertEquals(new QName("http://jboss.org/ns/test", "stringElement"), element.getQName());
+ TypeBinding type = element.getType();
+ assertEquals(Constants.QNAME_STRING, type.getQName());
+
return o == null ? null : (String)o;
}
});
- stringElement.setAfterUnmarshallingHandler(new TermAfterUnmarshallingHandler()
+ stringElement.setBeforeSetParentCallback(new TermBeforeSetParentCallback()
{
- public Object afterUnmarshalling(Object o, UnmarshallingContext ctx)
+ public Object beforeSetParent(Object o, UnmarshallingContext ctx)
{
ParticleBinding particle = ctx.getParticle();
+ assertNotNull(particle);
+ assertTrue(particle.getTerm().isElement());
ElementBinding element = (ElementBinding) particle.getTerm();
assertEquals(new QName("http://jboss.org/ns/test", "stringElement"), element.getQName());
+
+ assertTrue(ctx.getParentValue() instanceof GlobalElement);
+ TermBinding parentTerm = ctx.getParentParticle().getTerm();
+ assertTrue(parentTerm.isElement());
+ assertEquals("global", ((ElementBinding)parentTerm).getQName().getLocalPart());
+
+ assertEquals(String.class, ctx.resolvePropertyType());
+
return o == null ? null : (String)o;
}
});
// sequence
sequence = (SequenceBinding) ((ParticleBinding)iter.next()).getTerm();
- sequence.setBeforeMarshallingHandler(new TermBeforeMarshallingHandler()
+ sequence.setBeforeMarshallingCallback(new TermBeforeMarshallingCallback()
{
public Object beforeMarshalling(Object o, MarshallingContext ctx)
{
@@ -262,12 +315,23 @@
return o;
}
});
- sequence.setAfterUnmarshallingHandler(new TermAfterUnmarshallingHandler()
+ sequence.setBeforeSetParentCallback(new TermBeforeSetParentCallback()
{
- public Object afterUnmarshalling(Object o, UnmarshallingContext ctx)
+ public Object beforeSetParent(Object o, UnmarshallingContext ctx)
{
ParticleBinding particle = ctx.getParticle();
assertTrue(particle.getTerm() instanceof SequenceBinding);
+
+ assertTrue(ctx.getParentValue() instanceof GlobalElement);
+ TermBinding parentTerm = ctx.getParentParticle().getTerm();
+ assertTrue(parentTerm.isElement());
+ assertEquals("global", ((ElementBinding)parentTerm).getQName().getLocalPart());
+
+ String prop = ctx.resolvePropertyName();
+ assertEquals("sequenceItem", prop);
+
+ assertEquals(StringType.class, ctx.resolvePropertyType());
+
return o == null ? null : ((GlobalElement.Sequence)o).item;
}
});
More information about the jboss-svn-commits
mailing list