Hi Robert,
Thanks for the update. Looks like it will work great for my needs.
-Brian
robert burrell donkin <[EMAIL PROTECTED]> wrote:
hi brian
many thanks for the test case.
(i had a bit of an accident whilst chopping onions for my tea today and
can't type very well so my apologies if i'm a little short and haven't
added the usual tests and documentation.)
there is a reason why the default adders are set in addDefaults: it
allows users to set custom adders on a per-property basis. however, i'm
not too sure whether this is working right now.
so, what i've added is support for a couple of extra attributes on
addDefaults. setting add-properties='false' will prevent any extra
properties from being added. i hope you'll forgive me if i direct you
to the test case rather than explain too much more.
i hope that this will provide a workable solution. if not, then don't
be afraid to speak up.
- robert
On 20 Jan 2004, at 18:08, b p wrote:
> Hi Robert,
> I've run into a issue with collections that I can work around, but I
> am hoping can be solved more cleanly with a fairly simple modification
> to the ElementRule class.
>
> Here's the situation. I have a bean that includes a composite
> property as well as some properties that I do not want written to XML
> or set when XML is read. Therefore, I created a .betwixt file that
> includes the composite property, but does not include the property I
> want ignored. When I create XML from the bean, it looks exactly
> right. However, when I read it back in, the bean does not have the
> composite property set.
>
> The composite property is set if I have no .betwixt file or include
> the tag in the .betwixt file. However, I need a
> .betwixt file and I would rather not use the tag
> because if I do, I'll have to explicitly "hide" all the properties I
> want ignored in the .betwixt file. For maintenance reasons, I'd
> rather be able to just write the .betwixt file once and not have to
> change it if new properties are added to the bean that do not pertain
> to the XML generation/reading.
>
> I included below a test case and a patch that causes the test case to
> pass and doesn't break any other unit tests (I tested against your
> refactoring branch).
>
> Is there a better way to solve this problem? If not, would it be
> possible to commit the patch?
>
> Thanks again for the continued help.
> Brian
>
>
> Test Case:
>
> TestLoopType.java
> package org.apache.commons.betwixt.dotbetwixt;
>
> import junit.framework.Test;
> import junit.framework.TestSuite;
> import junit.framework.TestCase;
> import junit.textui.TestRunner;
>
> import java.util.ArrayList;
> import java.util.List;
> import java.io.StringWriter;
> import java.io.StringReader;
>
> import org.apache.commons.betwixt.io.BeanWriter;
> import org.apache.commons.betwixt.io.BeanReader;
>
> /**
> * @author Brian Pugh
> */
> public class TestLoopType extends TestCase {
>
> public void testSimpleList() throws Exception {
> Father father = new Father();
> father.setSpouse("Julie");
> father.addKid("John");
> father.addKid("Jane");
>
> StringWriter outputWriter = new StringWriter();
>
> outputWriter.write("\n");
> BeanWriter beanWriter = new BeanWriter(outputWriter);
> beanWriter.enablePrettyPrint();
> beanWriter.getBindingConfiguration().setMapIDs(true);
> beanWriter.write(father);
>
> BeanReader beanReader = new BeanReader();
>
> // Configure the reader
> beanReader.registerBeanClass(Father.class);
> StringReader xmlReader = new StringReader(outputWriter.toString());
>
> //Parse the xml
> Father result = (Father)beanReader.parse(xmlReader);
>
> assertNotNull("Unexpected null list of children!",
> result.getKids());
> assertEquals("got wrong number of children",
> father.getKids().size(), result.getKids().size());
> assertNull("Spouse should not get set because it is not in the
> .betwixt file", result.getSpouse());
> }
>
> public static Test suite() {
> return new TestSuite(TestLoopType.class);
> }
>
> public static void main(String[] args) {
> TestRunner.run(suite());
> }
>
>
> }
>
>
> Father.java
> package org.apache.commons.betwixt.dotbetwixt;
>
> import java.util.List;
> import java.util.ArrayList;
>
> /**
> * @author Brian Pugh
> */
> public class Father {
>
> private List kids;
> private String spouse;
>
> public String getSpouse() {
> return spouse;
> }
>
> public void setSpouse(String spouse) {
> this.spouse = spouse;
> }
>
> public List getKids() {
> return kids;
> }
>
> public void addKid(String kid) {
> if (this.kids == null) {
> this.kids = new ArrayList();
> }
> this.kids.add(kid);
> }
>
> }
>
> Father.betwixt
>
>
>
>
>
>
>
> Patch:
>
> ? betwixt/src/test/org/apache/commons/betwixt/dotbetwixt/Father.betwixt
> ? betwixt/src/test/org/apache/commons/betwixt/dotbetwixt/Father.java
> ?
> betwixt/src/test/org/apache/commons/betwixt/dotbetwixt/
> TestLoopType.java
> Index:
> betwixt/src/java/org/apache/commons/betwixt/digester/
> AddDefaultsRule.java
> ===================================================================
> RCS file:
> /home/cvspublic/jakarta-commons/betwixt/src/java/org/apache/commons/
> betwixt/digester/AddDefaultsRule.java,v
> retrieving revision 1.9.2.3
> diff -u -r1.9.2.3 AddDefaultsRule.java
> ---
> betwixt/src/java/org/apache/commons/betwixt/digester/
> AddDefaultsRule.java 18 Jan 2004 19:21:17 -0000 1.9.2.3
> +++
> betwixt/src/java/org/apache/commons/betwixt/digester/
> AddDefaultsRule.java 20 Jan 2004 17:42:09 -0000
> @@ -128,10 +128,7 @@
> }
> }
>
> - // default any addProperty() methods
> - getXMLIntrospector().defaultAddMethods(
> -
> getRootElementDescriptor(),
> - beanClass );
> +
> }
>
>
> Index:
> betwixt/src/java/org/apache/commons/betwixt/digester/ElementRule.java
> ===================================================================
> RCS file:
> /home/cvspublic/jakarta-commons/betwixt/src/java/org/apache/commons/
> betwixt/digester/ElementRule.java,v
> retrieving revision 1.13.2.4
> diff -u -r1.13.2.4 ElementRule.java
> ---
> betwixt/src/java/org/apache/commons/betwixt/digester/ElementRule.java
> 18 Jan 2004 22:25:22 -0000 1.13.2.4
> +++
> betwixt/src/java/org/apache/commons/betwixt/digester/ElementRule.java
> 20 Jan 2004 17:42:10 -0000
> @@ -201,6 +201,14 @@
> */
> public void end(String name, String namespace) {
> Object top = digester.pop();
> + // default any addProperty() methods
> + Object parent = digester.peek();
> + if ( parent instanceof XMLBeanInfo ) {
> + XMLBeanInfo beanInfo = (XMLBeanInfo) parent;
> + getXMLIntrospector().defaultAddMethods(
> +
> beanInfo.getElementDescriptor(),
> + beanClass );
> + }
> }
>
>
> ---------------------------------
> Do you Yahoo!?
> Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------
Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes