[jboss-svn-commits] JBoss Common SVN: r3903 - in jbossxb/trunk/src/main/java/org/jboss/xb/binding: parser and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 7 10:25:28 EST 2010
Author: alex.loubyansky at jboss.com
Date: 2010-01-07 10:25:27 -0500 (Thu, 07 Jan 2010)
New Revision: 3903
Modified:
jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.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/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/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
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java
jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/Position.java
Log:
clean-up unused methods, method parameters, few minor optimizations
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java 2010-01-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/ObjectModelBuilder.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -336,8 +336,7 @@
public void startElement(String namespaceURI,
String localName,
String qName,
- Attributes atts,
- XSTypeDefinition type)
+ Attributes atts)
{
Object parent = accepted.isEmpty() ? root : peekAccepted();
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java 2010-01-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/UnmarshallerImpl.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -43,7 +43,7 @@
*/
public class UnmarshallerImpl implements Unmarshaller
{
- private ObjectModelBuilder builder = new ObjectModelBuilder();
+ private ObjectModelBuilder builder;
private final JBossXBParser parser;
// Constructor
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java 2010-01-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/JBossXBParser.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -24,7 +24,6 @@
import java.io.InputStream;
import java.io.Reader;
-import org.apache.xerces.xs.XSTypeDefinition;
import org.jboss.xb.binding.JBossXBException;
import org.xml.sax.Attributes;
import org.xml.sax.EntityResolver;
@@ -42,7 +41,7 @@
void endElement(String namespaceURI, String localName, String qName);
- void startElement(String namespaceURI, String localName, String qName, Attributes atts, XSTypeDefinition type);
+ void startElement(String namespaceURI, String localName, String qName, Attributes atts);
void startPrefixMapping(String prefix, String uri);
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/parser/sax/SaxJBossXBParser.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -23,7 +23,6 @@
import java.io.InputStream;
import java.io.Reader;
-import java.lang.reflect.Method;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
@@ -56,7 +55,15 @@
{
saxFactory.setValidating(true);
saxFactory.setNamespaceAware(true);
- enableXInclude();
+
+ try
+ {
+ saxFactory.setXIncludeAware(true);
+ }
+ catch (UnsupportedOperationException e)
+ {
+ log.trace("setXIncludeAware is not supported by the SAXParserFactory", e);
+ }
}
private final SAXParser parser;
@@ -65,32 +72,12 @@
private DelegatingContentHandler delegateHandler;
private boolean trace;
- /**
- * Enables XInclude if the saxFactory supports it.<p>
- *
- * NOTE: Checks the real factory class, not the JAXP interface.
- */
- private static void enableXInclude()
- {
- try
- {
- Class<? extends SAXParserFactory> clazz = saxFactory.getClass();
- Method method = clazz.getMethod("setXIncludeAware", new Class[] { Boolean.TYPE });
- method.invoke(saxFactory, new Object[] { Boolean.TRUE });
- }
- catch (Exception e)
- {
- log.trace("Not setting XIncludeAware", e);
- }
- }
-
public SaxJBossXBParser()
throws JBossXBException
{
try
{
parser = saxFactory.newSAXParser();
- logParserInfo();
}
catch(Exception e)
{
@@ -117,7 +104,7 @@
}
catch(Exception e)
{
- log.debug("LexicalHandler", e);
+ log.trace("LexicalHandler", e);
}
/*
@@ -154,7 +141,8 @@
try
{
reader.setFeature(name, value);
- log.debug(name+" set to: "+reader.getFeature(name));
+ if(trace)
+ log.trace(name+" set to: "+reader.getFeature(name));
}
catch(SAXException e)
{
@@ -166,8 +154,9 @@
{
this.contentHandler = handler;
trace = log.isTraceEnabled();
-
- logParserInfo();
+ if(trace)
+ logParserInfo();
+
try
{
reader.parse(systemId);
@@ -192,8 +181,9 @@
{
this.contentHandler = handler;
trace = log.isTraceEnabled();
-
- logParserInfo();
+ if(trace)
+ logParserInfo();
+
try
{
reader.parse(source);
@@ -238,7 +228,7 @@
{
sb.append("unsupported operation '").append(e.getMessage()).append('\'');
}
- log.debug(sb.toString());
+ log.trace(sb.toString());
}
// Inner
@@ -355,58 +345,41 @@
public void endElement(String namespaceURI, String localName, String qName)
{
- String name = null;
if(trace)
{
- if(localName.length() == 0)
+ String name = localName.length() == 0 ? qName : namespaceURI + ':' + localName;
+ log.trace("Enter endElement " + name);
+ try
{
- name = qName;
+ contentHandler.endElement(namespaceURI, localName, qName);
}
- else
+ finally
{
- name = namespaceURI + ':' + localName;
- }
- log.trace("Enter endElement " + name);
- }
- try
- {
- contentHandler.endElement(namespaceURI, localName, qName);
- }
- finally
- {
- if(trace)
- {
log.trace("Exit endElement " + name);
}
}
+ else
+ contentHandler.endElement(namespaceURI, localName, qName);
}
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
{
- String name = null;
if(trace)
{
- if(localName.length() == 0)
+ String name = localName.length() == 0 ? qName : namespaceURI + ':' + localName;
+ log.trace("Enter startElement " + name);
+
+ try
{
- name = qName;
+ contentHandler.startElement(namespaceURI, localName, qName, atts);
}
- else
+ finally
{
- name = namespaceURI + ':' + localName;
- }
- log.trace("Enter startElement " + name);
- }
- try
- {
- contentHandler.startElement(namespaceURI, localName, qName, atts, null);
- }
- finally
- {
- if(trace)
- {
log.trace("Exit startElement " + name);
}
}
+ else
+ contentHandler.startElement(namespaceURI, localName, qName, atts);
}
}
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ChoiceBinding.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -120,9 +120,10 @@
next.setPrevious(this);
++occurrence;
- endParticle();
+ o = handler.endParticle(o, qName, particle);
+ if(previous.getValue() != null)
+ setParent(previous, handler);
initValue(atts);
- ended = false;
if (trace)
log.trace("found " + qName + " in " + ChoiceBinding.this + ", term=" + choice.getTerm());
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SequenceBinding.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -153,9 +153,10 @@
next.setPrevious(this);
++occurrence;
- endParticle();
+ o = handler.endParticle(o, qName, particle);
+ if(previous.getValue() != null)
+ setParent(previous, handler);
initValue(atts);
- ended = false;
if(trace)
log.trace("found " + qName + " in " + SequenceBinding.this);
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -24,7 +24,6 @@
import java.lang.reflect.Method;
import javax.xml.namespace.QName;
-import org.apache.xerces.xs.XSTypeDefinition;
import org.jboss.logging.Logger;
import org.jboss.xb.binding.AttributesImpl;
import org.jboss.xb.binding.Constants;
@@ -97,10 +96,10 @@
public void characters(char[] ch, int start, int length)
{
- Position position = head;
- if(!position.isElement())
+ if(!head.isElement())
return;
-
+
+ Position position = head;
// if current is ended the characters belong to its parent
if(position.isEnded())
{
@@ -132,16 +131,16 @@
head.endParticle();
break;
}
+
+ // assert head.isEnded() == true
+ if(head.getRepeatableParticleValue() != null)
+ head.endRepeatableParticle();
}
else
{
head.endParticle();
}
- // assert head.isEnded() == true
- if(head.getRepeatableParticleValue() != null)
- head.endRepeatableParticle();
-
head = head.getPrevious();
}
@@ -152,8 +151,7 @@
public void startElement(String namespaceURI,
String localName,
String qName,
- Attributes atts,
- XSTypeDefinition xercesType)
+ Attributes atts)
{
QName startName = localName.length() == 0 ? new QName(qName) : new QName(namespaceURI, localName);
SchemaBinding schemaBinding = schema;
@@ -198,7 +196,8 @@
}
ElementPosition next = new ElementPosition(startName, particle);
- next.push(this, atts, false);
+ next.setStack(this);
+ next.push(atts);
head = next;
return;
}
@@ -208,7 +207,7 @@
ElementPosition next = head.startParticle(startName, atts);
if (next != null)
{
- next.push(this, atts, head == next);
+ next.push(atts);
head = next;
break;
}
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -316,9 +316,10 @@
next.setPrevious(this);
++occurrence;
- endParticle();
+ o = handler.endParticle(o, qName, particle);
+ if(previous.getValue() != null)
+ setParent(previous, handler);
//o = initValue(stack.parent().getValue(), atts);
- ended = false;
return this;
}
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/AbstractPosition.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -24,7 +24,6 @@
import javax.xml.namespace.QName;
import org.jboss.logging.Logger;
-import org.jboss.xb.binding.JBossXBRuntimeException;
import org.jboss.xb.binding.sunday.unmarshalling.DefaultHandlers;
import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
import org.jboss.xb.binding.sunday.unmarshalling.NoopParticleHandler;
@@ -95,11 +94,6 @@
{
return next;
}
-
- public void setNext(Position position)
- {
- this.next = position;
- }
public Position getPrevious()
{
@@ -154,14 +148,6 @@
o = handler.startParticle(parent, qName, particle, atts, stack.getNamespaceRegistry());
}
- public void reset()
- {
- if(!ended)
- throw new JBossXBRuntimeException("Attempt to reset a particle that has already been reset: " + particle.getTerm());
- ended = false;
- o = null;
- }
-
public void startRepeatableParticle()
{
if(trace)
@@ -183,9 +169,6 @@
{
if (trace)
log.trace(" end repeatable " + particle.getTerm());
-
- if(repeatableParticleValue == null)
- throw new IllegalStateException("handler is null");
repeatableHandler.endRepeatableParticle(previous.getValue(), repeatableParticleValue, qName, particle, previous.getParticle());
repeatableParticleValue = null;
repeatableHandler = null;
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-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/ElementPosition.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -39,7 +39,6 @@
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.PositionStack;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
import org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler;
import org.jboss.xb.binding.sunday.unmarshalling.TermBeforeSetParentCallback;
@@ -71,17 +70,6 @@
super(qName, particle);
}
- public ElementPosition(QName qName, ParticleBinding particle, Object o, ParticleHandler handler, TypeBinding parentType, Position previous)
- {
- super(qName, particle);
- this.particle = particle;
- this.o = o;
- this.handler = handler;
- this.parentType = parentType;
- this.previous = previous;
- previous.setNext(this);
- }
-
public boolean isElement()
{
return true;
@@ -89,7 +77,10 @@
public void reset()
{
- super.reset();
+ if(!ended)
+ throw new JBossXBRuntimeException("Attempt to reset a particle that has already been reset: " + particle.getTerm());
+ ended = false;
+ o = null;
if(textContent != null)
textContent.setLength(0);
@@ -153,7 +144,7 @@
// it's not repeatable but it re-appeared
// it probably has a repeatable parent
reset();
- endRepeatableParent();
+ previous.repeatForChild(atts);
occurrence = 1;
if(next != null)
{
@@ -192,6 +183,7 @@
ElementBinding xopInclude = new ElementBinding(schema, Constants.QNAME_XOP_INCLUDE, xopIncludeType);
next = new ElementPosition(startName, new ParticleBinding(xopInclude));
+ next.setStack(stack);
next.setPrevious(this);
return next;
}
@@ -224,20 +216,21 @@
flushIgnorableCharacters();
- Position newPosition = next;
- while (newPosition.getNext() != null)
+ Position nextPosition = next;
+ while (nextPosition.getNext() != null)
{
- if (newPosition.getParticle().isRepeatable())
- newPosition.startRepeatableParticle();
+ if (nextPosition.getParticle().isRepeatable())
+ nextPosition.startRepeatableParticle();
- newPosition.setStack(stack);
- newPosition.initValue(atts);
- newPosition.setParentType(parentType);
- newPosition = newPosition.getNext();
+ nextPosition.setStack(stack);
+ nextPosition.initValue(atts);
+ nextPosition.setParentType(parentType);
+ nextPosition = nextPosition.getNext();
}
- newPosition.setParentType(parentType);
- return (ElementPosition) newPosition;
+ nextPosition.setStack(stack);
+ nextPosition.setParentType(parentType);
+ return (ElementPosition) nextPosition;
}
public void characters(char[] ch, int start, int length)
@@ -505,34 +498,16 @@
{
return (ElementPosition) nextPosition(startName, atts);
}
-
- private void endRepeatableParent()
- {
- Position position = this;
- do
- {
- position = position.getPrevious();
- if(position.isElement())
- throw new JBossXBRuntimeException(
- "Failed to start " + qName +
- ": the element is not repeatable, repeatable parent expected to be a model group but got element " +
- position.getParticle().getTerm().getQName()
- );
- ((NonElementPosition)position).endParticleWithNotSkippedParent();
- }
- while(!position.getParticle().isRepeatable());
- while(position != this)
- {
- position.reset();
- position.initValue(null);
- position = position.getNext();
- }
+ public void repeatForChild(Attributes atts)
+ {
+ throw new JBossXBRuntimeException("Failed to repeat parent for non-repeatable element: "
+ + "repeatable parent expected to be a model group but got element "
+ + qName);
}
-
- public void push(PositionStack stack, Attributes atts, boolean repeated)
+
+ public void push(Attributes atts)
{
- this.stack = stack;
ElementBinding element = (ElementBinding) particle.getTerm();
// TODO xsi:type support should be implemented in a better way
@@ -576,7 +551,7 @@
particle = new ParticleBinding(xsiElement, particle.getMinOccurs(), particle.getMaxOccurs(), particle.getMaxOccursUnbounded());
}
- if (!repeated && particle.isRepeatable())
+ if (occurrence == 1 && particle.isRepeatable())
startRepeatableParticle();
TypeBinding type = element.getType();
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java 2010-01-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/NonElementPosition.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -50,6 +50,7 @@
{
}
+
public void endParticle()
{
if(ended)
@@ -60,49 +61,56 @@
if(previous.getValue() != null)
setParent(previous, handler);
+
+ if(repeatableParticleValue != null)
+ endRepeatableParticle();
}
-
- public void endParticleWithNotSkippedParent()
+
+ public void repeatForChild(Attributes atts)
{
if(ended)
throw new JBossXBRuntimeException("The position has already been ended!");
o = handler.endParticle(o, qName, particle);
- ended = true;
// model group should always have parent particle
Position parentPosition = notSkippedParent();
if(parentPosition.getValue() != null)
setParent(parentPosition, handler);
+
+ // if it is repeatable then this is the repeatable parent
+ if(!particle.isRepeatable())
+ previous.repeatForChild(atts);
+
+ initValue(atts);
}
-
+
public ElementPosition startParticle(QName startName, Attributes atts)
{
if (nextPosition(startName, atts) == null)
return null;
// push all except the last one
- Position newPosition = next;
- while (newPosition.getNext() != null)
+ Position nextPosition = next;
+ while (nextPosition.getNext() != null)
{
- if (newPosition.getParticle().isRepeatable())
- newPosition.startRepeatableParticle();
+ if (nextPosition.getParticle().isRepeatable())
+ nextPosition.startRepeatableParticle();
- newPosition.setStack(stack);
- newPosition.initValue(atts);
- newPosition.setParentType(parentType);
- newPosition = newPosition.getNext();
+ nextPosition.setStack(stack);
+ nextPosition.initValue(atts);
+ nextPosition.setParentType(parentType);
+ nextPosition = nextPosition.getNext();
}
- newPosition.setParentType(parentType);
- return (ElementPosition) newPosition;
+ nextPosition.setStack(stack);
+ nextPosition.setParentType(parentType);
+ return (ElementPosition) nextPosition;
}
protected void nextNotFound()
{
endParticle();
- if(repeatableParticleValue != null)
- endRepeatableParticle();
next = null;
occurrence = 0;
}
Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/Position.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/Position.java 2010-01-06 13:50:08 UTC (rev 3902)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/position/Position.java 2010-01-07 15:25:27 UTC (rev 3903)
@@ -55,16 +55,12 @@
Position getNext();
- void setNext(Position next);
-
Position getPrevious();
void setPrevious(Position previous);
boolean isElement();
- void reset();
-
Position nextPosition(QName qName, Attributes attrs);
void characters(char[] ch, int start, int length);
@@ -78,4 +74,6 @@
void startRepeatableParticle();
void endRepeatableParticle();
+
+ void repeatForChild(Attributes atts);
}
More information about the jboss-svn-commits
mailing list