Hallo Zusammen,
experimentiere gerade mit JAXB und stolpere über folgende Exception:
Code:
Testmain:
warum? Bei google finde ich nur, dass die XmlSeeAlso-Annotation verwendet werden soll. Aber das tue ich ja bereits. Vielleicht nicht richtig??
Grüße
nrg
experimentiere gerade mit JAXB und stolpere über folgende Exception:
Code:
Exception in thread "main" javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class test.lib.Lion nor any of its super class is known to this context.]
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(Unknown Source)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
at test.lib.TestJaxb.main(TestJaxb.java:31)
Caused by: javax.xml.bind.JAXBException: class test.lib.Lion nor any of its super class is known to this context.
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsSoleContent(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(Unknown Source)
... 4 more
Caused by: javax.xml.bind.JAXBException: class test.lib.Lion nor any of its super class is known to this context.
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(Unknown Source)
... 10 more
Code:
Java:
@XmlRootElement
class Zoo {
@XmlAnyElement
public List<Animal> animals = new ArrayList<Animal>();
}
@XmlSeeAlso( {Dog.class, Lion.class} )
interface Animal {
void makeSomeNoise();
}
@XmlRootElement
class Dog implements Animal {
@Override
public void makeSomeNoise() {
System.out.println("bark");
}
}
@XmlRootElement
class Lion implements Animal {
@Override
public void makeSomeNoise() {
System.out.println("growl");
}
}
Testmain:
Java:
Zoo zoo = new Zoo();
zoo.animals.add(new Lion());
zoo.animals.add(new Dog());
JAXBContext jc = JAXBContext.newInstance(Zoo.class);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(zoo, System.out);
warum? Bei google finde ich nur, dass die XmlSeeAlso-Annotation verwendet werden soll. Aber das tue ich ja bereits. Vielleicht nicht richtig??
Grüße
nrg