You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Matt Kendall <ma...@iname.com> on 2005/11/17 17:08:58 UTC
Re: [betwixt][SOLVED] Array of java.io.File objects.
It's always a good idea to take breaks during problem solving, I found
this solution in about thirty minutes this morning. The answer wound
up being quite simple (as I knew it should be). Posting for posterity:
For output, use a .betwixt file to suppress the majority of the File
object's properties:
<info>
<element name="File">
<attribute name="absolutePath" property="absolutePath"/>
</element>
</info>
For input, add a custom creator the the BeanCreationChain (I did so by
using a BeanCreationList) that uses the absolutePath attribute to
return a file object, like so:
public class FileCreator implements ChainedBeanCreator {
public Object create(ElementMapping mapping, ReadContext context,
BeanCreationChain chain) {
if (File.class.equals(mapping.getType())) {
return new File(mapping.getAttributes().getValue("absolutePath"));
}
return chain.create(mapping, context);
}
}
This kind of pattern *should* work for any complex object that you can
easily construct using one or more of its properties.
Matt
On 11/16/05, Matt Kendall <ma...@iname.com> wrote:
> I've been tearing my hair out on this all afternoon. I've tried
> configuring Betwixt in way too many different ways to list them all
> here, so instead I'll just ask: what's the best way to handle the File
> object, specifically an array of file objects? I would like the
> following code to print out "2 == 2".
>
> public class FileTest {
> private File[] files;
>
> public File[] getFiles() {
> return files;
> }
>
> public void setFiles(File[] files) {
> this.files = files;
> }
>
> public static void main(String[] args) {
> FileTest test = new FileTest();
>
> test.setFiles(new File[] { new File("a.txt"), new File("b.txt") });
>
> try {
> BeanWriter writer = new BeanWriter(new FileWriter("ftout.xml"));
> writer.enablePrettyPrint();
> writer.write(test);
> writer.flush();
> writer.close();
>
> BeanReader reader = new BeanReader();
> reader.registerBeanClass(FileTest.class);
> test = (FileTest) reader.parse("ftout.xml");
>
> System.out.println("2 == " + test.getFiles().length);
> } catch (Exception e) {
> e.printStackTrace();
> }
>
> }
>
> }
>
> I apologize if this question is too vague, but I've created so many
> mappers, converters, chains, etc. that enumerating all of them is much
> more complicated than simply understanding what I want from the
> following code.
>
> Oh, and the one solution I cannot employ is to rewrite the bean that I
> need to convert to XML. I didn't write it so I cannot change it.
>
> Thanks!
> Matt
>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org