Skip to main content

How do i write objects that i have no control over in jaxb?



I am trying to find a way to marshall classes that i have no access to. I am trying to achieve something like this:







@XmlRootElement(name="bar")

class Bar {

@XmlAttribute

private Foo foo;



@XmlAttribute

private String baz;

}







which should result in a xml file like this:







<bar baz="stuff" foo="otherstuff"/>







Is this possible? I tried to fiddle with @XmlJavaTypeAdapter with no sucess.


Comments

  1. If you do not have access to the classes used to generate an XML file, but you do have access to the schema based on/used to generate those classes, you should be able to re-generate those classes using xjc and the schema definition (xsd) file.

    ReplyDelete
  2. You're on the right track with XmlJavaTypeAdapter, but I suspect foo needs to be an XmlElement rather than an XmlAttribute:

    @XmlRootElement(name="bar")
    public class Bar {

    @XmlElement
    @XmlJavaTypeAdapter(FooAdapter.class)
    private Foo foo;

    @XmlAttribute
    private String baz;

    }


    FooAdapter can be as simple as the following, but the output will be prettier if you make a proxy object to represent Foo and marshal that rather than Object[].

    class FooAdapter extends XmlAdapter<Object[], Foo> {

    @Override
    public Object[] marshal(Foo v) throws Exception {
    return new Object[]{ v.x, v.y, v.z };
    }

    @Override
    public Foo unmarshal(Object[] v) throws Exception {
    Foo foo = new Foo();
    foo.x = (String) v[0];
    foo.y = (Integer) v[1];
    foo.z = (Double) v[2];
    return foo;
    }

    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...