G
Greg
I have a colleague that is trying to get JAXB to create XML and then createthe class back again where one of the member variables will just be an Object. That is, it will not be strongly typed and it will contain a myriad of different types depending on what the XML coming in contains. However, asimple example results in a MarshalException with linked exception: JAXBException: class (any class here) nor any of its super class is known to thiscontext. How can this be solved? An example of what is being tried is below. Thank you for your help!
<code>
package com.hp.asi.ui.hpicsm.rmi.impl;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
public class testExample {
public static void main(String[] args) {
testExample ex = new testExample();
ex.doIt();
}
public void doIt() {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(testXML.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
Set<String> y = new HashSet<String>();
y.add("hello");
y.add("world");
testXML x = new testXML(y);
jaxbMarshaller.marshal(x, writer);
System.out.println(writer.getBuffer().toString());
} catch (Exception e) {
System.out.println(e);
}
}
@XmlRootElement
public static class testXML {
@XmlElement
private Object testVal;
public testXML(){
}
public testXML(Object y) {
this.testVal = y;
}
}
}
</code>
<code>
package com.hp.asi.ui.hpicsm.rmi.impl;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
public class testExample {
public static void main(String[] args) {
testExample ex = new testExample();
ex.doIt();
}
public void doIt() {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(testXML.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
Set<String> y = new HashSet<String>();
y.add("hello");
y.add("world");
testXML x = new testXML(y);
jaxbMarshaller.marshal(x, writer);
System.out.println(writer.getBuffer().toString());
} catch (Exception e) {
System.out.println(e);
}
}
@XmlRootElement
public static class testXML {
@XmlElement
private Object testVal;
public testXML(){
}
public testXML(Object y) {
this.testVal = y;
}
}
}
</code>