(as has been pointed out by the previous posted, the reasons why the standard digester rules don't work is that java beans are not supposed to have overloaded setters.)

a more elegant solution to this problem might be to create a custom Rule which knows about your enums. if string-to-int enums are a common enough pattern, then maybe someone will volunteer to contribute a general implementation.

(i might even do so myself if there's enough demand from users...)

- robert

On Wednesday, December 11, 2002, at 07:25 PM, YAWN,MIKE (HP-PaloAlto,ex1) wrote:

Digester gurus,

I have certain properties within a bean which are represented as numeric
values. However, these numeric values are an internal implementation detail
I don't really want to expose to users, so I'd rather have the bean
configured using meaningful text strings.

For example, consider a field indicating how to contact someone:

private int preferredContact;
public final static int PHONE = 1;
public final static int EMAIL = 2;
public int getPreferredContact() { return preferredContact; }
public void setPreferredContact(int pc) { preferredContact = pc; }

Now, I would have expected that digester could not have set this field even
if I wanted to expose the numeric values, simply because XML contains text,
not integers. So I altered this class to work with Digester by adding the
following method:

public void setPreferredContact(String pc) {
if (pc.equals("phone"))
preferredContact = PHONE;
else if (pc.equals("email"))
preferredContact = EMAIL;
else
// log an error
}

And XML input file contains (vastly simplified):
<personInfo preferredContact="email" />

Now, when I run digester, my nice String-based setPreferredContact method is
ignored in favor of the one taking an int. The int value comes in as zero,
not a legal value for the field and thus causing problems later.

Given that the parsed XML is a string value that doesn't even resemble an
int, and a setter method taking a String is provided, I would really expect
Digester to use the String variant, rather than go through ConvertUtils and
come up with a (seemingly random) integer value. How can I force Digester
to select the interface I created specifically for its use?

Thanks,
Mike Yawn

--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED].
org>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED].
org>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to