Yep, I found it in the latest nightly build. Naresh -----Original Message----- From: Baltz, Kenneth [mailto:[EMAIL PROTECTED]] Sent: Friday, January 24, 2003 1:00 PM To: Jakarta Commons Users List Subject: RE: [Digester] How to specify a <call-param-rule> parameter from top-of-stack
Looks like that's a new feature, "fromStack". I don't see it in the 1.3 Javadoc. Perhaps it will come to the XML soon. I'm surprised a developer hasn't chimed in yet. K.C. > -----Original Message----- > From: Naresh Bhatia [mailto:[EMAIL PROTECTED]] > Sent: Friday, January 24, 2003 9:25 AM > To: Jakarta Commons Users List > Subject: RE: [Digester] How to specify a <call-param-rule> parameter > from top-of-stack > > > Yep, that would work - neat trick! Although, I agree with you that the > ability to address the object on the stack as an argument would be > nicer. I thought that this could be done programatically using > Digester.addCallParam(java.lang.String pattern, int paramIndex, > boolean > fromStack) - just that I could not find a way to do this via XML. > > Thanks again. > Naresh > > -----Original Message----- > From: Baltz, Kenneth [mailto:[EMAIL PROTECTED]] > Sent: Friday, January 24, 2003 11:51 AM > To: Jakarta Commons Users List > Subject: RE: [Digester] How to specify a <call-param-rule> parameter > from top-of-stack > > > Here's the solution I was given. I think it would be easier > if we could > reference the item on the stack as an argument. > > The trick is to create a new object that takes care of populating the > HashMap for you. > > E.g. > > // Has to be public, although an anonymous inner class would be great > public class HashMapProxy { > HashMap _map; > public Hashmap Proxy() { > _map = new HashMap(); > } > > public void addProduct( Product p ) { > _map.put( p.getPartNumber(), p ); > } > > public HashMap getMap() { > return _map; > } > } > > Use the following Digester code: > > > digester.addObjectCreate( "products", HashMapProxy.class ); > digester.addObjectCreate( "products/product", Product.class ); > ... initialize your Product object > digester.addSetNext( "products/product", "addProduct" ); > > HashMapProxy proxy = (HashMapProxy)digester.parse( XML ); > > return proxy.getMap(); > > > Hope that helps, hope they find a better way. > > K.C. > > > -----Original Message----- > > From: Naresh Bhatia [mailto:[EMAIL PROTECTED]] > > Sent: Thursday, January 23, 2003 9:44 PM > > To: [EMAIL PROTECTED] > > Subject: [Digester] How to specify a <call-param-rule> > parameter from > > top-of-stack > > > > > > I am trying to parse an XML file similar to the one shown below: > > > > <products> > > <product partNumber="1000"> > > ... > > </product> > > <product partNumber="2000"> > > ... > > </product> > > </products> > > > > I want Digester to return a HashMap with partNumber as the key and > > product as the value. How do I put the product on to the HashMap? I > > guess I don't know how <call-param-rule> can specify the > object from > > top of the stack as a parameter. Here's my unsuccessful attempt at > > this: > > > > <digester-rules> > > <object-create-rule pattern="products" > > classname="java.util.HashMap"/> > > > > <pattern value="products/product"> > > <object-create-rule classname="Product"/> > > > > <set-properties-rule> > > <alias attr-name="partNumber" prop-name="partNumber"/> > > </set-properties-rule> > > > > <call-method-rule methodname="put" paramcount="2" > > paramTypes="java.lang.String,Product"/> > > <call-param-rule paramnumber="0" attrname="partNumber"/> > > <call-param-rule paramnumber="1"/> <--- what to do here? > > </pattern> > > > > </digester-rules> > > > > Thanks. > > Naresh Bhatia > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
