Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@www.apache.org Received: (qmail 74588 invoked from network); 18 Jan 2004 19:21:24 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 18 Jan 2004 19:21:24 -0000 Received: (qmail 15371 invoked by uid 500); 18 Jan 2004 19:21:10 -0000 Delivered-To: apmail-jakarta-commons-dev-archive@jakarta.apache.org Received: (qmail 15302 invoked by uid 500); 18 Jan 2004 19:21:10 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 15283 invoked by uid 500); 18 Jan 2004 19:21:09 -0000 Received: (qmail 15280 invoked from network); 18 Jan 2004 19:21:09 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 18 Jan 2004 19:21:09 -0000 Received: (qmail 74555 invoked by uid 1289); 18 Jan 2004 19:21:18 -0000 Date: 18 Jan 2004 19:21:18 -0000 Message-ID: <20040118192118.74554.qmail@minotaur.apache.org> From: rdonkin@apache.org To: jakarta-commons-cvs@apache.org Subject: cvs commit: jakarta-commons/betwixt/xdocs tasks.xml X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N rdonkin 2004/01/18 11:21:18 Modified: betwixt/src/java/org/apache/commons/betwixt Tag: REFACTORING-BRANCH_2004-01-13 XMLIntrospector.java betwixt/src/java/org/apache/commons/betwixt/digester Tag: REFACTORING-BRANCH_2004-01-13 AddDefaultsRule.java AttributeRule.java ElementRule.java XMLIntrospectorHelper.java betwixt/src/test/org/apache/commons/betwixt Tag: REFACTORING-BRANCH_2004-01-13 TestXMLBeanInfoDigester.java betwixt/xdocs Tag: REFACTORING-BRANCH_2004-01-13 tasks.xml Log: Moved methods out of XMLIntrospectorHelper in preparation to deprecate it. Revision Changes Path No revision No revision 1.27.2.2 +224 -10 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java Index: XMLIntrospector.java =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v retrieving revision 1.27.2.1 retrieving revision 1.27.2.2 diff -u -r1.27.2.1 -r1.27.2.2 --- XMLIntrospector.java 18 Jan 2004 12:30:57 -0000 1.27.2.1 +++ XMLIntrospector.java 18 Jan 2004 19:21:17 -0000 1.27.2.2 @@ -66,8 +66,10 @@ import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -80,6 +82,8 @@ import org.apache.commons.betwixt.expression.EmptyExpression; import org.apache.commons.betwixt.expression.Expression; import org.apache.commons.betwixt.expression.IteratorExpression; +import org.apache.commons.betwixt.expression.MapEntryAdder; +import org.apache.commons.betwixt.expression.MethodUpdater; import org.apache.commons.betwixt.expression.StringExpression; import org.apache.commons.betwixt.expression.Updater; import org.apache.commons.betwixt.registry.DefaultXMLBeanInfoRegistry; @@ -403,11 +407,6 @@ } elementDescriptor.setElementDescriptors( new ElementDescriptor[] { loopDescriptor } ); -/* - elementDescriptor.setContextExpression( - new IteratorExpression( EmptyExpression.getInstance() ) - ); -*/ } else { log.trace("Bean is standard type"); List elements = new ArrayList(); @@ -441,7 +440,7 @@ xmlBeanInfo.setElementDescriptor( elementDescriptor ); // default any addProperty() methods - XMLIntrospectorHelper.defaultAddMethods( this, elementDescriptor, bean.getElementType() ); + defaultAddMethods( elementDescriptor, bean.getElementType() ); if (log.isTraceEnabled()) { log.trace("Populated descriptor:"); @@ -738,10 +737,225 @@ } + /** + * Add any addPropety(PropertyType) methods as Updaters + * which are often used for 1-N relationships in beans. + *
+ * The tricky part here is finding which ElementDescriptor corresponds + * to the method. e.g. a property 'items' might have an Element descriptor + * which the method addItem() should match to. + *
+ * So the algorithm we'll use + * by default is to take the decapitalized name of the property being added + * and find the first ElementDescriptor that matches the property starting with + * the string. This should work for most use cases. + * e.g. addChild() would match the children property. + * + * @param introspector use this XMLIntrospector for introspection + * @param rootDescriptor add defaults to this descriptor + * @param beanClass the Class to which descriptor corresponds + */ + public void defaultAddMethods( + ElementDescriptor rootDescriptor, + Class beanClass ) { + // lets iterate over all methods looking for one of the form + // add*(PropertyType) + if ( beanClass != null ) { + Method[] methods = beanClass.getMethods(); + for ( int i = 0, size = methods.length; i < size; i++ ) { + Method method = methods[i]; + String name = method.getName(); + if ( name.startsWith( "add" ) ) { + // XXX: should we filter out non-void returning methods? + // some beans will return something as a helper + Class[] types = method.getParameterTypes(); + if ( types != null) { + if ( log.isTraceEnabled() ) { + log.trace("Searching for match for " + method); + } + + if ( ( types.length == 1 ) || types.length == 2 ) { + String propertyName = Introspector.decapitalize( name.substring(3) ); + if (propertyName.length() == 0) + continue; + if ( log.isTraceEnabled() ) { + log.trace( name + "->" + propertyName ); + } + + // now lets try find the ElementDescriptor which displays + // a property which starts with propertyName + // and if so, we'll set a new Updater on it if there + // is not one already + ElementDescriptor descriptor = + findGetCollectionDescriptor( + + rootDescriptor, + propertyName ); + + if ( log.isDebugEnabled() ) { + log.debug( "!! " + propertyName + " -> " + descriptor ); + log.debug( "!! " + name + " -> " + + (descriptor!=null?descriptor.getPropertyName():"") ); + } + if ( descriptor != null ) { + boolean isMapDescriptor + = Map.class.isAssignableFrom( descriptor.getPropertyType() ); + if ( !isMapDescriptor && types.length == 1 ) { + // this may match a standard collection or iteration + log.trace("Matching collection or iteration"); + + descriptor.setUpdater( new MethodUpdater( method ) ); + descriptor.setSingularPropertyType( types[0] ); + + if ( log.isDebugEnabled() ) { + log.debug( "!! " + method); + log.debug( "!! " + types[0]); + } + + // is there a child element with no localName + ElementDescriptor[] children + = descriptor.getElementDescriptors(); + if ( children != null && children.length > 0 ) { + ElementDescriptor child = children[0]; + String localName = child.getLocalName(); + if ( localName == null || localName.length() == 0 ) { + child.setLocalName( + getElementNameMapper() + .mapTypeToElementName( propertyName ) ); + } + } + + } else if ( isMapDescriptor && types.length == 2 ) { + // this may match a map + log.trace("Matching map"); + ElementDescriptor[] children + = descriptor.getElementDescriptors(); + // see if the descriptor's been set up properly + if ( children.length == 0 ) { + + log.info( + "'entry' descriptor is missing for map. " + + "Updaters cannot be set"); + + } else { + // loop through grandchildren + // adding updaters for key and value + ElementDescriptor[] grandchildren + = children[0].getElementDescriptors(); + MapEntryAdder adder = new MapEntryAdder(method); + for ( + int n=0, + noOfGrandChildren = grandchildren.length; + n < noOfGrandChildren; + n++ ) { + if ( "key".equals( + grandchildren[n].getLocalName() ) ) { + + grandchildren[n].setUpdater( + adder.getKeyUpdater() ); + grandchildren[n].setSingularPropertyType( + types[0] ); + if ( log.isTraceEnabled() ) { + log.trace( + "Key descriptor: " + grandchildren[n]); + } + + } else if ( + "value".equals( + grandchildren[n].getLocalName() ) ) { + + grandchildren[n].setUpdater( + adder.getValueUpdater() ); + grandchildren[n].setSingularPropertyType( + types[1] ); + if ( log.isTraceEnabled() ) { + log.trace( + "Value descriptor: " + grandchildren[n]); + } + } + } + } + } + } else { + if ( log.isDebugEnabled() ) { + log.debug( + "Could not find an ElementDescriptor with property name: " + + propertyName + " to attach the add method: " + method + ); + } + } + } + } + } + } + } + } // Implementation methods //------------------------------------------------------------------------- + + /** + * Attempts to find the element descriptor for the getter property that + * typically matches a collection or array. The property name is used + * to match. e.g. if an addChild() method is detected the + * descriptor for the 'children' getter property should be returned. + * + * @param introspector use this XMLIntrospector + * @param rootDescriptor the ElementDescriptor whose child element will be + * searched for a match + * @param propertyName the name of the 'adder' method to match + * @return ElementDescriptor for the matching getter + */ + private ElementDescriptor findGetCollectionDescriptor( + ElementDescriptor rootDescriptor, + String propertyName ) { + // create the Map of propertyName -> descriptor that the PluralStemmer will choose + Map map = new HashMap(); + //String propertyName = rootDescriptor.getPropertyName(); + if ( log.isTraceEnabled() ) { + log.trace( "findPluralDescriptor( " + propertyName + + " ):root property name=" + rootDescriptor.getPropertyName() ); + } + + if (rootDescriptor.getPropertyName() != null) { + map.put(propertyName, rootDescriptor); + } + makeElementDescriptorMap( rootDescriptor, map ); + + PluralStemmer stemmer = getPluralStemmer(); + ElementDescriptor elementDescriptor = stemmer.findPluralDescriptor( propertyName, map ); + + if ( log.isTraceEnabled() ) { + log.trace( + "findPluralDescriptor( " + propertyName + + " ):ElementDescriptor=" + elementDescriptor ); + } + + return elementDescriptor; + } + + + /** + * Creates a map where the keys are the property names and the values are the ElementDescriptors + * + * @param rootDescriptor the values of the maps are the children of this + * ElementDescriptor index by their property names + * @param map the map to which the elements will be added + */ + private void makeElementDescriptorMap( ElementDescriptor rootDescriptor, Map map ) { + ElementDescriptor[] children = rootDescriptor.getElementDescriptors(); + if ( children != null ) { + for ( int i = 0, size = children.length; i < size; i++ ) { + ElementDescriptor child = children[i]; + String propertyName = child.getPropertyName(); + if ( propertyName != null ) { + map.put( propertyName, child ); + } + makeElementDescriptorMap( child, map ); + } + } + } /** * A Factory method to lazily create a new strategy No revision No revision 1.9.2.3 +5 -6 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/AddDefaultsRule.java Index: AddDefaultsRule.java =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/AddDefaultsRule.java,v retrieving revision 1.9.2.2 retrieving revision 1.9.2.3 diff -u -r1.9.2.2 -r1.9.2.3 --- AddDefaultsRule.java 15 Jan 2004 19:50:56 -0000 1.9.2.2 +++ AddDefaultsRule.java 18 Jan 2004 19:21:17 -0000 1.9.2.3 @@ -129,8 +129,7 @@ } // default any addProperty() methods - XMLIntrospectorHelper.defaultAddMethods( - getXMLIntrospector(), + getXMLIntrospector().defaultAddMethods( getRootElementDescriptor(), beanClass ); } 1.8.2.2 +58 -6 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/AttributeRule.java Index: AttributeRule.java =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/AttributeRule.java,v retrieving revision 1.8.2.1 retrieving revision 1.8.2.2 diff -u -r1.8.2.1 -r1.8.2.2 --- AttributeRule.java 15 Jan 2004 19:50:56 -0000 1.8.2.1 +++ AttributeRule.java 18 Jan 2004 19:21:17 -0000 1.8.2.2 @@ -63,11 +63,14 @@ import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; import org.apache.commons.betwixt.AttributeDescriptor; import org.apache.commons.betwixt.ElementDescriptor; import org.apache.commons.betwixt.XMLUtils; import org.apache.commons.betwixt.expression.ConstantExpression; +import org.apache.commons.betwixt.expression.MethodExpression; +import org.apache.commons.betwixt.expression.MethodUpdater; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xml.sax.Attributes; @@ -189,8 +192,7 @@ for ( int i = 0, size = descriptors.length; i < size; i++ ) { PropertyDescriptor descriptor = descriptors[i]; if ( name.equals( descriptor.getName() ) ) { - XMLIntrospectorHelper - .configureProperty( attributeDescriptor, descriptor ); + configureProperty( attributeDescriptor, descriptor ); getProcessedPropertyNameSet().add( name ); break; } @@ -201,4 +203,54 @@ } } } + + /** + * Configure an AttributeDescriptor from a PropertyDescriptor + * + * @param attributeDescriptor configure this AttributeDescriptor + * @param propertyDescriptor configure from this PropertyDescriptor + */ + private void configureProperty( + AttributeDescriptor attributeDescriptor, + PropertyDescriptor propertyDescriptor ) { + Class type = propertyDescriptor.getPropertyType(); + Method readMethod = propertyDescriptor.getReadMethod(); + Method writeMethod = propertyDescriptor.getWriteMethod(); + + if ( readMethod == null ) { + log.trace( "No read method" ); + return; + } + + if ( log.isTraceEnabled() ) { + log.trace( "Read method=" + readMethod ); + } + + // choose response from property type + + // XXX: ignore class property ?? + if ( Class.class.equals( type ) && "class".equals( propertyDescriptor.getName() ) ) { + log.trace( "Ignoring class property" ); + return; + } + if ( XMLIntrospectorHelper.isLoopType( type ) ) { + log.warn( "Using loop type for an attribute. Type = " + + type.getName() + " attribute: " + attributeDescriptor.getQualifiedName() ); + } + + log.trace( "Standard property" ); + attributeDescriptor.setTextExpression( new MethodExpression( readMethod ) ); + + if ( writeMethod != null ) { + attributeDescriptor.setUpdater( new MethodUpdater( writeMethod ) ); + } + + attributeDescriptor.setLocalName( propertyDescriptor.getName() ); + attributeDescriptor.setPropertyType( type ); + + // XXX: associate more bean information with the descriptor? + //nodeDescriptor.setDisplayName( propertyDescriptor.getDisplayName() ); + //nodeDescriptor.setShortDescription( propertyDescriptor.getShortDescription() ); + } + } 1.13.2.3 +122 -6 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/ElementRule.java Index: ElementRule.java =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/ElementRule.java,v retrieving revision 1.13.2.2 retrieving revision 1.13.2.3 diff -u -r1.13.2.2 -r1.13.2.3 --- ElementRule.java 15 Jan 2004 19:50:56 -0000 1.13.2.2 +++ ElementRule.java 18 Jan 2004 19:21:17 -0000 1.13.2.3 @@ -60,11 +60,15 @@ * */ import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; import org.apache.commons.betwixt.ElementDescriptor; import org.apache.commons.betwixt.XMLBeanInfo; import org.apache.commons.betwixt.XMLUtils; import org.apache.commons.betwixt.expression.ConstantExpression; +import org.apache.commons.betwixt.expression.IteratorExpression; +import org.apache.commons.betwixt.expression.MethodExpression; +import org.apache.commons.betwixt.expression.MethodUpdater; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xml.sax.Attributes; @@ -230,8 +234,7 @@ getPropertyDescriptor( beanClass, name ); if ( descriptor != null ) { - XMLIntrospectorHelper - .configureProperty( + configureProperty( elementDescriptor, descriptor, updateMethodName, @@ -241,4 +244,117 @@ } } } + + + /** + * Configure an ElementDescriptor from a PropertyDescriptor. + * A custom update method may be set. + * + * @param elementDescriptor configure this ElementDescriptor + * @param propertyDescriptor configure from this PropertyDescriptor + * @param updateMethodName the name of the custom updater method to user. + * If null, then then + * @param beanClass the Class from which the update method should be found. + * This may be null only when updateMethodName is also null. + */ + private void configureProperty( + ElementDescriptor elementDescriptor, + PropertyDescriptor propertyDescriptor, + String updateMethodName, + Class beanClass ) { + + Class type = propertyDescriptor.getPropertyType(); + Method readMethod = propertyDescriptor.getReadMethod(); + Method writeMethod = propertyDescriptor.getWriteMethod(); + + elementDescriptor.setLocalName( propertyDescriptor.getName() ); + elementDescriptor.setPropertyType( type ); + + // XXX: associate more bean information with the descriptor? + //nodeDescriptor.setDisplayName( propertyDescriptor.getDisplayName() ); + //nodeDescriptor.setShortDescription( propertyDescriptor.getShortDescription() ); + + if ( readMethod == null ) { + log.trace( "No read method" ); + return; + } + + if ( log.isTraceEnabled() ) { + log.trace( "Read method=" + readMethod.getName() ); + } + + // choose response from property type + + // XXX: ignore class property ?? + if ( Class.class.equals( type ) && "class".equals( propertyDescriptor.getName() ) ) { + log.trace( "Ignoring class property" ); + return; + } + if ( XMLIntrospectorHelper.isPrimitiveType( type ) ) { + elementDescriptor.setTextExpression( new MethodExpression( readMethod ) ); + + } else if ( XMLIntrospectorHelper.isLoopType( type ) ) { + log.trace("Loop type ??"); + + // don't wrap this in an extra element as its specified in the + // XML descriptor so no need. + elementDescriptor.setContextExpression( + new IteratorExpression( new MethodExpression( readMethod ) ) + ); + + writeMethod = null; + } else { + log.trace( "Standard property" ); + elementDescriptor.setContextExpression( new MethodExpression( readMethod ) ); + } + + // see if we have a custom method update name + if (updateMethodName == null) { + // set standard write method + if ( writeMethod != null ) { + elementDescriptor.setUpdater( new MethodUpdater( writeMethod ) ); + } + + } else { + // see if we can find and set the custom method + if ( log.isTraceEnabled() ) { + log.trace( "Finding custom method: " ); + log.trace( " on:" + beanClass ); + log.trace( " name:" + updateMethodName ); + } + + Method updateMethod = null; + Method[] methods = beanClass.getMethods(); + for ( int i = 0, size = methods.length; i < size; i++ ) { + Method method = methods[i]; + if ( updateMethodName.equals( method.getName() ) ) { + // we have a matching name + // check paramters are correct + if (methods[i].getParameterTypes().length == 1) { + // we'll use first match + updateMethod = methods[i]; + if ( log.isTraceEnabled() ) { + log.trace("Matched method:" + updateMethod); + } + // done since we're using the first match + break; + } + } + } + + if (updateMethod == null) { + if ( log.isInfoEnabled() ) { + + log.info("No method with name '" + updateMethodName + "' found for update"); + } + } else { + + elementDescriptor.setUpdater( new MethodUpdater( updateMethod ) ); + elementDescriptor.setSingularPropertyType( updateMethod.getParameterTypes()[0] ); + if ( log.isTraceEnabled() ) { + log.trace( "Set custom updater on " + elementDescriptor); + } + } + } + } } 1.27.2.3 +15 -5 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java Index: XMLIntrospectorHelper.java =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java,v retrieving revision 1.27.2.2 retrieving revision 1.27.2.3 diff -u -r1.27.2.2 -r1.27.2.3 --- XMLIntrospectorHelper.java 18 Jan 2004 12:30:57 -0000 1.27.2.2 +++ XMLIntrospectorHelper.java 18 Jan 2004 19:21:17 -0000 1.27.2.3 @@ -87,7 +87,10 @@ /** *

XMLIntrospectorHelper a helper class for * common code shared between the digestor and introspector.

- * + * + * TODO this class will be deprecated soon + * need to move the isLoop and isPrimitiveType but probably need to + * think about whether they need replacing with something different. * @author James Strachan * @author Martin van den Bemt * @version $Id$ @@ -257,6 +260,7 @@ * * @param elementDescriptor configure this ElementDescriptor * @param propertyDescriptor configure from this PropertyDescriptor + * @deprecated unused */ public static void configureProperty( ElementDescriptor elementDescriptor, @@ -275,6 +279,7 @@ * If null, then then * @param beanClass the Class from which the update method should be found. * This may be null only when updateMethodName is also null. + * @deprecated moved into ElementRule */ public static void configureProperty( ElementDescriptor elementDescriptor, @@ -382,6 +387,7 @@ * * @param attributeDescriptor configure this AttributeDescriptor * @param propertyDescriptor configure from this PropertyDescriptor + * @deprecated moved into AttributeRule */ public static void configureProperty( AttributeDescriptor attributeDescriptor, @@ -444,6 +450,7 @@ * @param introspector use this XMLIntrospector for introspection * @param rootDescriptor add defaults to this descriptor * @param beanClass the Class to which descriptor corresponds + * @deprecated use the method in XMLIntrospector instead */ public static void defaultAddMethods( XMLIntrospector introspector, @@ -647,6 +654,7 @@ * searched for a match * @param propertyName the name of the 'adder' method to match * @return ElementDescriptor for the matching getter + * @deprecated moved into XMLIntrospector */ protected static ElementDescriptor findGetCollectionDescriptor( XMLIntrospector introspector, @@ -683,6 +691,7 @@ * @param rootDescriptor the values of the maps are the children of this * ElementDescriptor index by their property names * @param map the map to which the elements will be added + * @deprecated moved into XMLIntrospector */ protected static void makeElementDescriptorMap( ElementDescriptor rootDescriptor, Map map ) { ElementDescriptor[] children = rootDescriptor.getElementDescriptors(); @@ -705,6 +714,7 @@ * @param rootDescriptor traverse child graph for this ElementDescriptor * @param oldValue replace this ElementDescriptor * @param newValue replace with this ElementDescriptor + * @deprecated now unused */ protected static void swapDescriptor( ElementDescriptor rootDescriptor, No revision No revision 1.5.2.2 +5 -1 jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/TestXMLBeanInfoDigester.java Index: TestXMLBeanInfoDigester.java =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/TestXMLBeanInfoDigester.java,v retrieving revision 1.5.2.1 retrieving revision 1.5.2.2 diff -u -r1.5.2.1 -r1.5.2.2 --- TestXMLBeanInfoDigester.java 13 Jan 2004 21:49:46 -0000 1.5.2.1 +++ TestXMLBeanInfoDigester.java 18 Jan 2004 19:21:17 -0000 1.5.2.2 @@ -7,7 +7,7 @@ * * The Apache Software License, Version 1.1 * - * Copyright (c) 2001-2003 The Apache Software Foundation. All rights + * Copyright (c) 2001-2004 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -91,6 +91,10 @@ public void testDigester() throws Exception { XMLBeanInfoDigester digester = new XMLBeanInfoDigester(); + // TODO the digestion probably won't work without an XMLIntrospector + // so it might be better to enforce via a constructor + // or create a default one + digester.setXMLIntrospector(new XMLIntrospector()); InputStream in = new FileInputStream( getTestFile("src/test/org/apache/commons/digester/rss/Channel.betwixt") ); No revision No revision 1.25.2.2 +1 -0 jakarta-commons/betwixt/xdocs/tasks.xml Index: tasks.xml =================================================================== RCS file: /home/cvs/jakarta-commons/betwixt/xdocs/tasks.xml,v retrieving revision 1.25.2.1 retrieving revision 1.25.2.2 diff -u -r1.25.2.1 -r1.25.2.2 --- tasks.xml 18 Jan 2004 12:30:58 -0000 1.25.2.1 +++ tasks.xml 18 Jan 2004 19:21:17 -0000 1.25.2.2 @@ -339,6 +339,7 @@
  • PrimitiveType property removed
  • +
  • XMLIntrospectorHelper this will be deprecated.
  • --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org