Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #23469 > unrolled thread

JAXB Object (not strongly typed) within class creating MarshalException

Started byGreg <shireyg@gmail.com>
First post2013-04-16 08:22 -0700
Last post2013-04-19 20:37 +0200
Articles 2 — 2 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  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

#23469 — JAXB Object (not strongly typed) within class creating MarshalException

FromGreg <shireyg@gmail.com>
Date2013-04-16 08:22 -0700
SubjectJAXB 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]


#23513

FromDaniele Futtorovic <da.futt.news@laposte-dot-net.invalid>
Date2013-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