JAXB Object (not strongly typed) within class creating MarshalException


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>
 
Ad

Advertisements

D

Daniele Futtorovic

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top