Hi Naresh,
Isn't the "SetTopRule" what you want?
class Product
{
.....
public void addToParent(HashMap parent)
{
parent.put(this.partNumber, this);
}
}
digester.addSetTop("/products/product", "addToParent",
"java.util.HashMap");
I presume the same functionality is available via the xml config..
Regards,
Simon
On Sat, 2003-01-25 at 07:07, Naresh Bhatia wrote:
> 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]>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>