Unmarshalexception unexpected element, Expected elements are (none)
11,589
Solution 1
A element can either be associated with a class with an @XmlRootElement
or @XmlElementDecl
annotation. If it's the latter you need to ensure the generated ObjectFactory
is part of the classes used to bootstrap the JAXBContext
. For models generated from an XML Schema you should create the JAXBContext
on the generated package name(s) or ObjectFactory
classes.
Solution 2
You should have a class named ObjectFactory
beside your class AvizoType
. If so then try this approach:
final JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
return ((JAXBElement<AvizoType>) jaxbContext.createUnmarshaller().unmarshal(
inputStream)).getValue();
Author by
hudi
Updated on August 08, 2022Comments
-
hudi over 1 year
I have problem when I want to deserialaze JAXBElement which I already serialized from byte array. I got exception:
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Avizo"). Expected elements are (none) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
here is my code:
public class JAXBTest { public static byte[] serialize(JAXBElement<AvizoType> xmlData) throws Exception { // Result stream buffer ByteArrayOutputStream bos = new ByteArrayOutputStream(); final JAXBContext jaxbContext = JAXBContext.newInstance(AvizoType.class); final Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.marshal(xmlData, new StreamResult(bos)); return bos.toByteArray(); } public static JAXBElement<AvizoType> deserialize(byte[] data) throws Exception { // Result stream buffer ByteArrayInputStream bis = new ByteArrayInputStream(data); final JAXBContext jaxbContext = JAXBContext.newInstance(AvizoType.class); final Unmarshaller marshaller = jaxbContext.createUnmarshaller(); return (JAXBElement<AvizoType>) marshaller.unmarshal(bis); } public static void main(String[] args) throws Exception { AvizoType type = new AvizoType(); type.setAvizoId(1); JAXBElement<AvizoType> element = new JAXBElement(new QName("Avizo"), AvizoType.class, type); byte[] result = serialize(element); deserialize(result); } }
avizoType is generated class from xsd:
// // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.10-b140310.1920 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. // Generated on: 2015.03.23 at 01:59:39 PM CET // import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; /** * <p> * Java class for AvizoType complex type. * * <p> * The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="AvizoType"> * <complexContent> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <sequence> * <element name="AvizoId" type="{http://www.w3.org/2001/XMLSchema}long"/> * </sequence> * </restriction> * </complexContent> * </complexType> * </pre> * * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AvizoType", propOrder = { "avizoId" }) public class AvizoType implements Serializable { @XmlElement(name = "AvizoId") protected long avizoId; /** * Gets the value of the avizoId property. * */ public long getAvizoId() { return avizoId; } /** * Sets the value of the avizoId property. * */ public void setAvizoId(long value) { this.avizoId = value; } }