commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From José Antonio Pérez Testa <japte...@indra.es>
Subject Re: Strange behaviour with xmlrules
Date Wed, 18 Jun 2003 14:07:11 GMT
I think that the problem is in the xml structure and the fact that the 
same token 'baz' creates the object and calls the method.
I'm doing a very similar processing whith the following rules:

<digester-rules>
  <object-create-rule pattern="foo" classname="MyFoo"/>

  <pattern value="foo/bar">
    <object-create-rule classname="MyBaz"/>
    <call-method-rule pattern="baz" methodname="setContent" paramcount="0"/>
    <set-next-method methodname="addBaz"/>
  </pattern>
</digester-rules>

If there is only one 'baz' in each 'bar' this should work!



Horn, Lutz wrote:

>Hi all,
>
>I've got problems understanding the behaviour of a certain
>case of xmlrules.
>
>I want to digest a XML file with the following structure:
>
><foo>
>  <bar>
>    <baz>interesting content here</baz>
>  </bar>
>  <bar>
>    <baz>some more content I want</baz>
>  </bar>
></foo>
>
>From this I want to:
>
>0. Creat a MyFoo container,
>1. get all foo/bar/baz elements,
>2. create a MyBaz bean for each such element,
>3. fill it's field "content" from the character content of the the element
>   using the bean's setContent() method,
>4. and store the bean in the MyFoo instance using a method called addBaz().
>
>The digester rules XML file I use is:
>
>...
><digester-rules>
>  <object-create-rule pattern="foo" classname="MyFoo"/>
>
>  <pattern value="foo/bar/baz">
>    <object-create-rule classname="MyBaz"/>
>    <call-method-rule methodname="setContent" paramcount="0"/>
>    <set-next-method methodname="addBaz"/>
>  </pattern>
></digester-rules>
>
>Unfortunatley this doesn't work. What happens is that 
>
>0. The MyFoo container is created,
>1. a foo/bar/baz element is encountered and
>2. a new MyBaz instance is created which is
>3. immediately added to MyFoo using the addBaz() method *after* which
>4. the method setContent() of the MyBaz instance is called.
>
>This leads to MyFoo containing only MyBaz instances with the content
>field null.
>
>My solution so far is to swap the <call-method-rule> and the
><set-next-rule> which results in the setContent() method of the MyBaz
>instance being called *before* the addBaz() method of MyFoo is called.
>
>Is this a bug or a feature or did I miss something?
>
>Thanks
>Lutz
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: commons-user-help@jakarta.apache.org
>
>  
>


Mime
View raw message