tags:

views:

203

answers:

1

Hi

I am novice to JAXB , i am trying to sample using JAXB.

trying to dispaly the values in the MenuList.xml

----MenuList.xml-----------

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<menulist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
    <Category1 name="Development">
        <MenuItem1>Projects</MenuItem1>
        <MenuItem2>Library</MenuItem2>
        <MenuItem3>Library1</MenuItem3>
    </Category1>    
</menulist>

----------------------------MenuList.xsd-------------------

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio Developer Edition (Trial) 8.0.11.2171 (http://www.liquid-technologies.com)--&gt;
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
    <xs:element name="menulist">
        <xs:complexType>
            <xs:sequence>
                <xs:element  name="Category1">
                    <xs:complexType>
                        <xs:attribute name="MenuItem1" type="xs:string" use="required" />
                        <xs:attribute name="MenuItem2" type="xs:string" use="required" />
                        <xs:attribute name="MenuItem3" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

The uisng the command I run the xsd file and it generated the classes. MenuList and Object Factory.

AppTest.java

package com.xx.menu;

import java.io.File;
import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.UnmarshalException;
import javax.xml.bind.Unmarshaller;

public class TestNew {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
        JAXBContext jc = JAXBContext.newInstance("com.xx.menu");        //Create unmarshaller
        Unmarshaller um = jc.createUnmarshaller();

        File file = new File ("C:\\sample\\menulist.xml");

        JAXBElement element = (JAXBElement)um.unmarshal(file);

        Menulist menulist= (Menulist) element.getValue ();
        System.out.println("name : "+menulist.getMenu());

        }
     catch( UnmarshalException ue ) {
         ue.printStackTrace();
        System.out.println( "Caught UnmarshalException" );
    } catch( JAXBException je ) { 
        je.printStackTrace();
    } catch( Exception ioe ) {
        ioe.printStackTrace();
    }
    }

}

Error:

java.lang.ClassCastException: com.xx.menu.Menulist
    at com.xx.menu.TestNew.main(TestNew.java:26)

Can you please help me where I am going wrong ...I will be greatly thankful to you.

Thanks

A: 

You're overcomplicating things. You don't need to muck about with JAXBElement if the Unmarshaller is giving you the Menulist object directly. The ClassCastExcepotion pretty much tells you what you need to do:

Menulist menulist= (Menulist) um.unmarshal(file);

JAXBElement is only used in certain specific situations, and this isn't one of them.

skaffman