[jboss-svn-commits] JBoss Common SVN: r3683 - in jbossxb/trunk/src: main/java/org/jboss/xb/builder and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Nov 13 05:46:29 EST 2009
Author: alex.loubyansky at jboss.com
Date: 2009-11-13 05:46:28 -0500 (Fri, 13 Nov 2009)
New Revision: 3683
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java
jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java
Log:
JBXB-232
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 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -208,33 +208,24 @@
else
{
if(!item.ended) // could be ended if it's a choice
- {
endParticle(item, stack.peek1());
- }
ParticleBinding currentParticle = item.cursor.getCurrentParticle();
- TermBinding term = currentParticle.getTerm();
- if(item.repeatableParticleValue != null /* && currentParticle.isRepeatable()*/ && term.isWildcard())
- {
+ if(item.repeatableParticleValue != null && currentParticle.getTerm().isWildcard())
endRepeatableParticle(item, item.qName, currentParticle, item.particle);
- }
pop();
if(item.particle.isRepeatable())
{
StackItem parentItem = stack.peek();
if(parentItem.repeatableParticleValue != null)
- {
endRepeatableParticle(parentItem, item.qName, item.particle, parentItem.particle);
- }
}
}
}
if(elementBinding == null)
- {
throw new JBossXBRuntimeException("Failed to endElement " + qName + ": binding not found");
- }
if(!elementBinding.getQName().equals(endName))
{
@@ -287,13 +278,9 @@
schemaBinding = schemaResolver.resolve(namespaceURI, null, schemaLocation);
if(schemaBinding != null)
- {
particle = schemaBinding.getElementParticle(startName);
- }
else
- {
throw new JBossXBRuntimeException("Failed to resolve schema nsURI=" + namespaceURI + " location=" + schemaLocation);
- }
}
else
{
@@ -327,9 +314,7 @@
{
pop();
if(parentItem.repeatableParticleValue != null)
- {
endRepeatableParticle(parentItem, item.qName, item.particle, parentItem.particle);
- }
continue;
}
}
@@ -452,25 +437,12 @@
StackItem poped = pop();
if(!poped.particle.isRepeatable() && stack.peek().cursor == null)
{
- // normally it should be an error
- // but there is an issue with wildcard binding: it is never bound as repeatable (but should be sometimes)
- // so, this hack will give another iteration over the whole parent type and make it seem like it's repeatable
- TermBinding popedTerm = poped.particle.getTerm();
- if(popedTerm instanceof SequenceBinding &&
- ((ModelGroupBinding)popedTerm).getParticles().size() == 1 &&
- ((ModelGroupBinding)popedTerm).getParticles().iterator().next().getTerm().isWildcard())
- {
- // hack
- }
- else
- {
- TermBinding t = cursor.getParticle().getTerm();
- StringBuffer sb = new StringBuffer(250);
- sb.append(startName).append(" cannot appear in this position. Expected content of ")
- .append(((ElementBinding)stack.peek().particle.getTerm()).getQName())
- .append(" is ").append(t);
- throw new JBossXBRuntimeException(sb.toString());
- }
+ TermBinding t = cursor.getParticle().getTerm();
+ StringBuffer sb = new StringBuffer(250);
+ sb.append(startName).append(" cannot appear in this position. Expected content of ")
+ .append(((ElementBinding)stack.peek().particle.getTerm()).getQName())
+ .append(" is ").append(t);
+ throw new JBossXBRuntimeException(sb.toString());
}
}
else
@@ -533,23 +505,14 @@
(repeated ? stack.peek1().o : stack.peek().o);
if(particle.getTerm().isWildcard())
{
- /*
- WildcardBinding wildcard = (WildcardBinding)particle.getTerm();
- ElementBinding element = wildcard.getElement(startName, atts);
- */
ElementBinding element = cursor.getElement();
if(element == null)
- {
- throw new JBossXBRuntimeException("Failed to resolve element " +
- startName + " for wildcard."
- );
- }
+ throw new JBossXBRuntimeException("Failed to resolve element " + startName + " for wildcard.");
if(!repeatedParticle && particle.isRepeatable())
- {
startRepeatableParticle(stack.peek(), parent, startName, particle);
- }
- particle = new ParticleBinding(element/*, particle.getMinOccurs(), particle.getMaxOccurs(), particle.getMaxOccursUnbounded()*/);
+
+ particle = new ParticleBinding(element);
}
ElementBinding element = (ElementBinding)particle.getTerm();
@@ -622,9 +585,7 @@
if(interceptors.size() + localInterceptors.size() > 0)
{
if (repeated)
- {
pop();
- }
for (int i = 0; i < localInterceptors.size(); ++i)
{
@@ -666,28 +627,20 @@
{
ParticleBinding stackParticle = repeated ? stack.peek1().particle : stack.peek().particle;
if(stackParticle != null)
- {
parentBinding = (ElementBinding)stackParticle.getTerm();
- }
}
if(parentBinding != null && parentBinding.getSchema() != null)
- {
schemaBinding = parentBinding.getSchema();
- }
String msg = "Element " +
startName +
" is not bound " +
(parentBinding == null ? "as a global element." : "in type " + parentBinding.getType().getQName());
if(schemaBinding != null && schemaBinding.isStrictSchema())
- {
throw new JBossXBRuntimeException(msg);
- }
else if(trace)
- {
log.trace(msg);
- }
}
if(repeated)
@@ -711,6 +664,7 @@
private void endRepeatableParent(QName startName)
{
int stackIndex = stack.size() - 2;
+ StackItem item;
StackItem parentItem = stack.peek1();
ParticleBinding parentParticle = null;
while(true)
@@ -724,20 +678,35 @@
);
}
+ item = parentItem;
+
parentParticle = parentItem.particle;
if(parentParticle.isRepeatable())
+ {
+ parentItem = stack.peek(stackIndex - 1);
+ endParticle(item, parentItem);
+
+ ParticleHandler handler = getHandler(item.particle);
+ item.reset();
+ item.o = handler.startParticle(parentItem.o, item.qName, item.particle, null, nsRegistry);
+
break;
+ }
- StackItem item = parentItem;
+ // wildcards are not on the stack
+ ParticleBinding currentParticle = parentItem.cursor.getCurrentParticle();
+ if(currentParticle.getTerm().isWildcard() && currentParticle.isRepeatable())
+ break;
+
parentItem = stack.peek(--stackIndex);
endParticle(item, parentItem);
}
- if(!parentParticle.isRepeatable())
+/* if(!parentParticle.isRepeatable())
{
StringBuffer msg = new StringBuffer();
- StackItem item = stack.peek();
+ item = stack.peek();
ParticleBinding currentParticle = item.particle;
msg.append("Failed to start ").append(startName).append(": ")
.append(currentParticle.getTerm())
@@ -780,23 +749,14 @@
throw new JBossXBRuntimeException(msg.toString());
}
-
- // todo startName is wrong here
- StackItem item = parentItem;
- parentItem = stack.peek(stackIndex - 1);
- endParticle(item, parentItem);
-
- ParticleHandler handler = getHandler(item.particle);
- item.reset();
- item.o = handler.startParticle(parentItem.o, startName, item.particle, null, nsRegistry);
-
+*/
while(++stackIndex < stack.size() - 1)
{
parentItem = item;
item = stack.peek(stackIndex);
- handler = getHandler(item.particle);
+ ParticleHandler handler = getHandler(item.particle);
item.reset();
- item.o = handler.startParticle(parentItem.o, startName, item.particle, null, nsRegistry);
+ item.o = handler.startParticle(parentItem.o, item.qName, item.particle, null, nsRegistry);
}
}
@@ -818,7 +778,7 @@
{
if (trace)
log.trace(" end repeatable (" + stack.size() + "): " + particle.getTerm());
- RepeatableParticleHandler repeatableHandler = parentItem.repeatableHandler; //particle.getTerm().getRepeatableHandler();
+ RepeatableParticleHandler repeatableHandler = parentItem.repeatableHandler;
// the way it is now it's never null
repeatableHandler.endRepeatableParticle(parentItem.o, parentItem.repeatableParticleValue, elementName, particle, parentParticle);
parentItem.repeatableParticleValue = null;
@@ -832,15 +792,12 @@
throw new JBossXBRuntimeException(item.particle.getTerm() + " has already been ended.");
}
- ParticleBinding modelGroupParticle = item.particle;
- ParticleHandler handler = item.handler;//getHandler(modelGroupParticle);
+ ParticleHandler handler = item.handler;
+ Object o = handler.endParticle(item.o, item.qName, item.particle);
- Object o = handler.endParticle(item.o, item.qName, modelGroupParticle);
-
item.ended = true;
// model group should always have parent particle
- //item = (StackItem)stack.peek(parentStackPos);
if(parentItem.o != null)
{
ParticleBinding parentParticle = getNotSkippedParent().particle;//item.particle;
@@ -848,12 +805,9 @@
parentParticle = parentItem.particle;
if(parentItem.repeatableParticleValue == null)
- setParent(handler, parentItem.o, o, item.qName, modelGroupParticle, parentParticle);
+ setParent(handler, parentItem.o, o, item.qName, item.particle, parentParticle);
else
- {
- //RepeatableParticleHandler repeatableHandler = modelGroupParticle.getTerm().getRepeatableHandler();
- parentItem.repeatableHandler.addTermValue(parentItem.repeatableParticleValue, o, item.qName, modelGroupParticle, parentParticle, handler);
- }
+ parentItem.repeatableHandler.addTermValue(parentItem.repeatableParticleValue, o, item.qName, item.particle, parentParticle, handler);
}
}
@@ -1148,9 +1102,7 @@
if(notSkippedParentItem.repeatableParticleValue == null)
setParent(handler, parent, o, endName, particle, parentParticle);
else
- {
notSkippedParentItem.repeatableHandler.addTermValue(notSkippedParentItem.repeatableParticleValue, o, endName, particle, parentParticle, handler);
- }
}
else if(parentParticle != null && hasWildcard && stack.size() > 1)
{
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -501,7 +501,6 @@
* @param typeInfo the type info
* @return the type binding
*/
- @SuppressWarnings("unchecked")
protected TypeBinding resolveTypeBinding(TypeInfo typeInfo)
{
if (trace)
@@ -1238,24 +1237,32 @@
TypeInfo wildcardType = wildcardProperty.getType();
TypeInfo type = wildcardType;
+ WildcardBinding wildcard = new WildcardBinding(schemaBinding);
+ ParticleBinding particleBinding = new ParticleBinding(wildcard);
+ localModel.addParticle(particleBinding);
+ particleBinding.setMinOccurs(0);
+
// Setup any new model and determine the wildcard type
if (wildcardType.isArray())
{
+ particleBinding.setMaxOccursUnbounded(true);
+ wildcard.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(beanAdapterFactory));
type = ((ArrayInfo) wildcardType).getComponentType();
if (trace)
log.trace("Wildcard " + wildcardProperty.getName() + " is an array of type " + type.getName());
}
else if (wildcardType.isCollection())
{
- localModel = createCollection(localModel);
+ particleBinding.setMaxOccursUnbounded(true);
type = ((ClassInfo)wildcardProperty.getType()).getComponentType();
if (trace)
log.trace("Wildcard " + wildcardProperty.getName() + " is a collection of type " + type.getName());
}
+ else
+ particleBinding.setMaxOccurs(1);
XmlAnyElement xmlAnyElement = wildcardProperty.getUnderlyingAnnotation(XmlAnyElement.class);
boolean isLax = xmlAnyElement == null ? true : xmlAnyElement.lax();
- WildcardBinding wildcard = new WildcardBinding(schemaBinding);
if (isLax)
wildcard.setProcessContents((short) 3); // Lax
else
@@ -1268,20 +1275,8 @@
wildcard.setUnresolvedCharactersHandler(DOMHandler.INSTANCE);
}
- // Bind the particle to the model
- ParticleBinding particleBinding = new ParticleBinding(wildcard);
- particleBinding.setMinOccurs(0);
- particleBinding.setMaxOccurs(1);
- localModel.addParticle(particleBinding);
-
wildcard.setWildcardHandler((ParticleHandler) wildcardHandler);
- beanAdapterFactory.setWildcardHandler(wildcardHandler);
-
- if(wildcardType.isArray())
- {
- particleBinding.setMaxOccursUnbounded(true);
- wildcard.setRepeatableHandler(new ArrayWrapperRepeatableParticleHandler(beanAdapterFactory));
- }
+ beanAdapterFactory.setWildcardHandler(wildcardHandler);
}
JBossXmlChildWildcard childWildcard = typeInfo.getUnderlyingAnnotation(JBossXmlChildWildcard.class);
@@ -1982,29 +1977,11 @@
}
/**
- * Create a collection
- *
- * @param localModel the current model
- * @return the new local model
- */
- private ModelGroupBinding createCollection(ModelGroupBinding localModel)
- {
- SequenceBinding sequenceBinding = new SequenceBinding(schemaBinding);
- sequenceBinding.setHandler(BuilderParticleHandler.INSTANCE);
- ParticleBinding particle = new ParticleBinding(sequenceBinding);
- particle.setMinOccurs(0);
- particle.setMaxOccursUnbounded(true);
- localModel.addParticle(particle);
- return sequenceBinding;
- }
-
- /**
* Add a namespace to the schema
*
* @param namespace the namespace
* @param erase whether to erase if there was only the default namespace
*/
- @SuppressWarnings("unchecked")
private void addNamespace(String namespace, boolean erase)
{
Set<String> namespaces = schemaBinding.getNamespaces();
@@ -2123,10 +2100,6 @@
throw new IllegalStateException("Failed to create an instance of " + adapterImplClass.getName(), e);
}
-// ClassInfo adapterImplInfo = (ClassInfo) factory.getTypeInfo(adapterImplClass);
-// ClassInfo xmlAdapterInfo = adapterImplInfo.getGenericSuperclass();
-// TypeInfo type = xmlAdapterInfo.getActualTypeArguments()[0];
-
adaptedType = ((ParameterizedType)adapterImplClass.getGenericSuperclass()).getActualTypeArguments()[0];
adaptedTypeInfo = factory.getTypeInfo(adaptedType);
}
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/AbstractBuilderTest.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -272,11 +272,26 @@
Collection<ParticleBinding> particles = sequence.getParticles();
assertTrue(particles.size() == 1);
ParticleBinding particle = particles.iterator().next();
+ assertFalse(particle.getMaxOccursUnbounded());
term = particle.getTerm();
assertNotNull(term);
return term;
}
+ protected TermBinding assertSingleRepeatableSequence(TermBinding term)
+ {
+ assertNotNull(term);
+ assertTrue(term instanceof SequenceBinding || term instanceof UnorderedSequenceBinding);
+ ModelGroupBinding sequence = (ModelGroupBinding) term;
+ Collection<ParticleBinding> particles = sequence.getParticles();
+ assertTrue(particles.size() == 1);
+ ParticleBinding particle = particles.iterator().next();
+ assertTrue(particle.getMaxOccursUnbounded());
+ term = particle.getTerm();
+ assertNotNull(term);
+ return term;
+ }
+
/**
* Find the xml
*
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayElementWildcardUnitTestCase.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -82,7 +82,7 @@
assertNotNull(particle);
TermBinding term = particle.getTerm();
assertNotNull(term);
- term = assertSingleSequence(term);
+ term = assertSingleRepeatableSequence(term);
assertTrue(term instanceof WildcardBinding);
WildcardBinding wildcardBinding = type.getWildcard();
assertNotNull(wildcardBinding);
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ArrayObjectWildcardUnitTestCase.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -82,7 +82,7 @@
assertNotNull(particle);
TermBinding term = particle.getTerm();
assertNotNull(term);
- term = assertSingleSequence(term);
+ term = assertSingleRepeatableSequence(term);
assertTrue(term instanceof WildcardBinding);
WildcardBinding wildcardBinding = type.getWildcard();
assertNotNull(wildcardBinding);
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListElementWildcardUnitTestCase.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -34,7 +34,6 @@
import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
@@ -85,9 +84,7 @@
assertNotNull(particle);
TermBinding term = particle.getTerm();
assertNotNull(term);
- term = assertSingleSequence(term);
- assertTrue(term instanceof SequenceBinding);
- term = assertSingleSequence(term);
+ term = assertSingleRepeatableSequence(term);
assertTrue(term instanceof WildcardBinding);
WildcardBinding wildcardBinding = type.getWildcard();
assertNotNull(wildcardBinding);
Modified: jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java 2009-11-13 02:22:36 UTC (rev 3682)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xb/builder/object/type/xmlanyelement/test/ListObjectWildcardUnitTestCase.java 2009-11-13 10:46:28 UTC (rev 3683)
@@ -36,7 +36,6 @@
import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
@@ -85,9 +84,7 @@
assertNotNull(particle);
TermBinding term = particle.getTerm();
assertNotNull(term);
- term = assertSingleSequence(term);
- assertTrue(term instanceof SequenceBinding);
- term = assertSingleSequence(term);
+ term = assertSingleRepeatableSequence(term);
assertTrue(term instanceof WildcardBinding);
WildcardBinding wildcardBinding = type.getWildcard();
assertNotNull(wildcardBinding);
More information about the jboss-svn-commits
mailing list