Hello everyone,

I am a new to XStream user and I have an issue that might be very simple
but I am not able to figure it out.

Let's say I have the following XML:

<main id="foo">
   <name>bar</name>
</main>

I would like to use the JavaBeanConverter to force the unmarshalling to go
through my setters but when I register the JavaBeanConverter, my
XStreamAsAttribute annotations seem to stop working.

Here is my code so far:

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.converters.javabean.JavaBeanConverter;

@XStreamAlias("main")
public class Main {

    public static void main(String[] args) {
        XStream xstream = new XStream();
        xstream.autodetectAnnotations(true);
        xstream.registerConverter(new
JavaBeanConverter(xstream.getMapper()), XStream.PRIORITY_VERY_LOW);
        xstream.processAnnotations(Main.class);
        System.out.println(xstream.fromXML("<main
id=\"foo\"><name>bar</name></main>"));
    }

    @XStreamAsAttribute
    private String id;

    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        System.out.println("Called setId()");
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Called setName()");
        this.name = name;
    }

    @Override
    public String toString() {
        return "Main [id=" + id + ", name=" + name + "]";
    }

}

With the JavaBeanConverter registered, I see the print message in setName()
but not the one in setId() and the id field remains null. If I comment it
out, I do not go through the setters but id's value is correct. What am I
missing?

Thanks in advance for your help.

Cheers,

LP

Reply via email to