Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #23469 > unrolled thread
| Started by | Greg <shireyg@gmail.com> |
|---|---|
| First post | 2013-04-16 08:22 -0700 |
| Last post | 2013-04-19 20:37 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to comp.lang.java.programmer
JAXB Object (not strongly typed) within class creating MarshalException Greg <shireyg@gmail.com> - 2013-04-16 08:22 -0700
Re: JAXB Object (not strongly typed) within class creating MarshalException Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2013-04-19 20:37 +0200
| From | Greg <shireyg@gmail.com> |
|---|---|
| Date | 2013-04-16 08:22 -0700 |
| Subject | JAXB Object (not strongly typed) within class creating MarshalException |
| Message-ID | <0cda468a-d4f2-47bb-a834-1bca6e1d525e@googlegroups.com> |
I have a colleague that is trying to get JAXB to create XML and then create the 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, a simple example results in a MarshalException with linked exception: JAXBException: class (any class here) nor any of its super class is known to this context. 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>
[toc] | [next] | [standalone]
| From | Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> |
|---|---|
| Date | 2013-04-19 20:37 +0200 |
| Message-ID | <kks2oa$798$1@dont-email.me> |
| In reply to | #23469 |
On 16/04/2013 17:22, Greg allegedly wrote: > I have a colleague that is trying to get JAXB to create XML and then > create the 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, a simple example results in a > MarshalException with linked exception: JAXBException: class (any > class here) nor any of its super class is known to this context. How > can this be solved? <snip /> I don't think it can be solved like this. How is the unmarshaller supposed to know what to unmarshal the data to? But more importantly, what's that data (the XML you created) gonna be used for? Some(one|thing) has to understand it, right? But if for some(one|thing) to understand it, it's oughta have a well-defined structure, ought it not? It's oughta have a schema, ought it not? Well, then bloody formalise and code that schema, and then if you want to have your JAXB context be aware of classes the use of which it cannot infer, use @XmlSeeAlso. -- DF.
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.java.programmer
csiph-web