error trying to marshal a JAXB root object missing @XmlRootElement

38,174

You can wrap your object in an instance of JAXBElement to provide the root element information. If you generated your model from an XML schema there are convenience methods for this on the generated ObjectFactory class.

For More Information

Share:
38,174
Mitch McFarland
Author by

Mitch McFarland

Updated on March 04, 2020

Comments

  • Mitch McFarland
    Mitch McFarland about 4 years

    I have a complex xml schema that is part of an international standard, therefore I can't change the schema files, and I have used Maven to generate JAXB objects from them. When I try to set data into my JAXB objects and then marshal the root element I get the missing @XmlRootElement error on several of the complex types. My question is how do I resolve this? Environment:

    • JAXB 2.2.2
    • Maven 3.0.3
    • Eclipse Juno
    • Java 1.6
    • Windows 7 64 bit

    I have researched the web and this site extensively but have not found an answer to my problem, including this post: http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html

    and this question on stack overflow: JAX-WS MarshalException with custom JAX-B bindings: Unable to marshal type "java.lang.String" as an element because it is missing an @XmlRootElement annotation

    I have tried adding an annotation to the offending classes in my custom binding file, but it adds the annotation to the class as well as the getContent() method and the class won't compile. I don't think I should have to add this annotation anyway, since this is a complex type that is a component of the root, actually it's nested fairly deep in the tree. I have read that you can add the <xjc:simple/> tag to the global binding element, but I have added a number of attributes to the global binding element and it won't compile when I do that.

    Can someone help point me in the right direction here, could this be an error in the way I am building up the JAXB objects? I have walked it through in the debugger and it seems that when the ArrayReferenceNodeProperty class from the package com.sun.xml.bind.v2.runtime.property tries to serialize the list body and when it gets the JaxBeanInfo for these classes there isn't a dom handler set and the jaxbType is not an object so it thinks it needs to be a root.

    I am not using this in a web based service and other than the tweaks in the binding file to resolve naming conflicts have not created any custom classes or bindings.

    Here is the top level schema file:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified">
    <xs:annotation>
        <xs:documentation>
            *****************************************************************************
            *                                                                           *
            *                        S1000D Issue 3                                     *
            *                          XML Schema                                       *
            *                                                                           *
            *                     Release Version 3.0                                   *
            *                       Date: 2007-07-31                                    *
            *                                                                           *
            *                                                                           *
            * The following attribute definition on the root element may be used to     *
            * call this set of declarations:-                                           *
            *                                                                           *
            * xsi:noNamespaceSchemaLocation=                                            *
            * "http://www.s1000d.org/S1000D_3-0/xml_schema_master/dm/procedSchema.xsd"  *
            *****************************************************************************
        </xs:documentation>
    </xs:annotation>
    <xs:redefine schemaLocation="elementGroups.xsd">
        <xs:group name="APPLIC">
            <xs:choice>
                <xs:sequence>
                    <xs:element ref="displaytext"/> 
                    <xs:choice minOccurs="0">
                        <xs:element ref="assert"/>
                        <xs:element ref="evaluate"/>
                    </xs:choice>
                </xs:sequence>
                <xs:choice>
                    <xs:element ref="assert"/>
                    <xs:element ref="evaluate"/>
                </xs:choice>
            </xs:choice>
        </xs:group>
        <xs:group name="NPAR">
            <xs:sequence>
                <xs:group ref="WC"/>
                <xs:group ref="NPFFT" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="NPFFT">
            <xs:choice>
                <xs:group ref="NP"/>
                <xs:group ref="FFT"/>
            </xs:choice>
        </xs:group>
        <xs:group name="paracon">
            <xs:choice>
                <xs:group ref="text"/>
                <xs:group ref="list"/>
            </xs:choice>
        </xs:group>
        <xs:group name="text">
            <xs:choice>
                <xs:element ref="ein"/>
                <xs:element ref="cb"/>
                <xs:element ref="parasigdata"/>
                <xs:element ref="quantity"/>
                <xs:element ref="xref"/>
                <xs:element ref="indxflag"/>
                <xs:element ref="change"/>
                <xs:element ref="emphasis"/>
                <xs:element ref="symbol"/>
                <xs:element ref="subscrpt"/>
                <xs:element ref="supscrpt"/>
                <xs:element ref="refdm"/>
                <xs:element ref="reftp"/>
                <xs:element ref="ftnote"/>
                <xs:element ref="ftnref"/>
                <xs:element ref="acronym"/>
                <xs:element ref="acroterm"/>
                <xs:element ref="capgrp"/>
            </xs:choice>
        </xs:group>
        <xs:group name="TEXT-NOREFS">
            <xs:choice>
                <xs:element ref="xref"/>
                <xs:element ref="indxflag"/>
                <xs:element ref="symbol"/>
                <xs:element ref="subscrpt"/>
                <xs:element ref="supscrpt"/>
                <xs:element ref="ftnref"/>
                <xs:element ref="acronym"/>
                <xs:element ref="acroterm"/>
            </xs:choice>
        </xs:group>
        <xs:group name="STEP1">
            <xs:sequence>
                <xs:element ref="step1"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP2">
            <xs:sequence>
                <xs:element ref="step2"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP3">
            <xs:sequence>
                <xs:element ref="step3"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP4">
            <xs:sequence>
                <xs:element ref="step4"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP5">
            <xs:sequence>
                <xs:element ref="step5"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP6">
            <xs:sequence>
                <xs:element ref="step6"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP7">
            <xs:sequence>
                <xs:element ref="step7"/>
            </xs:sequence>
        </xs:group>
        <xs:group name="STEP8">
            <xs:sequence>
                <xs:element ref="step8"/>
            </xs:sequence>
        </xs:group>
    </xs:redefine>
    <xs:redefine schemaLocation="complexTypes.xsd">
        <xs:complexType name="contentType">
            <xs:complexContent>
                <xs:restriction base="contentType">
                    <xs:sequence>
                        <xs:element ref="refs" minOccurs="0"/>
                        <xs:element ref="proced"/>
                    </xs:sequence>
                    <xs:attribute ref="id"/>
                </xs:restriction>
            </xs:complexContent>
        </xs:complexType>
    </xs:redefine>
    <xs:element name="dmodule" type="dmoduleType"/>
    

    For the xrefType I am only setting two attributes and for the refdmType I am only setting one other complex type that is part of the ALLDMC group. The code for the two complex types that error is:

      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" elementFormDefault="qualified" attributeFormDefault="qualified">
        <xs:import namespace="http://www.w3.org/1999/02/22-rdf-syntax-ns#" schemaLocation="rdf.xsd"/>
        <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
        <xs:include schemaLocation="attributeGroups.xsd"/>
        <xs:include schemaLocation="simpleElements.xsd"/>
        <xs:include schemaLocation="complexElements.xsd"/>
        <xs:include schemaLocation="elementGroups.xsd"/>
        <xs:complexType name="refdmType">
            <xs:choice>
                <xs:sequence>
                    <xs:element ref="applic" minOccurs="0"/>
                    <xs:element ref="dmcextension" minOccurs="0"/>
                    <xs:group ref="ALLDMC"/>
                    <xs:element ref="issno" minOccurs="0"/>
                    <xs:element ref="dmtitle" minOccurs="0"/>
                    <xs:element ref="language" minOccurs="0"/>
                </xs:sequence>
                <xs:group ref="xlink:XLINKEXT" minOccurs="0" maxOccurs="unbounded"/>
            </xs:choice>
            <xs:attribute ref="target"/>
            <xs:attribute ref="refapplic"/>
            <xs:attributeGroup ref="bodyatt"/>
            <xs:attributeGroup ref="cntlcontent"/>
            <xs:attributeGroup ref="xlink:XLINKATT"/>
        </xs:complexType>
        <xs:complexType name="xrefType" mixed="true">
            <xs:sequence>
                <xs:element ref="applic" minOccurs="0"/>
                <xs:group ref="SPARCON" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute ref="xrefid"/>
            <xs:attribute ref="xidtype"/>
            <xs:attribute ref="target"/>
            <xs:attribute ref="destitle"/>
            <xs:attribute ref="pretext"/>
            <xs:attribute ref="posttext"/>
            <xs:attribute ref="refapplic"/>
            <xs:attributeGroup ref="cntlcontent"/>
            <xs:attributeGroup ref="xlink:XLINKATT3"/>
        </xs:complexType>
        </xs:schema>
    

    And here is the main part of the JAXB generated classes. I have removed most of the getters and setters to save space: The RefdmType:

    /**
     * <p>Java class for refdmType complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType name="refdmType">
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;choice>
     *         &lt;sequence>
     *           &lt;element ref="{}applic" minOccurs="0"/>
     *           &lt;element ref="{}dmcextension" minOccurs="0"/>
     *           &lt;group ref="{}ALLDMC"/>
     *           &lt;element ref="{}issno" minOccurs="0"/>
     *           &lt;element ref="{}dmtitle" minOccurs="0"/>
     *           &lt;element ref="{}language" minOccurs="0"/>
     *         &lt;/sequence>
     *         &lt;group ref="{http://www.w3.org/1999/xlink}XLINKEXT" maxOccurs="unbounded" minOccurs="0"/>
     *       &lt;/choice>
     *       &lt;attGroup ref="{http://www.w3.org/1999/xlink}XLINKATT"/>
     *       &lt;attGroup ref="{}cntlcontent"/>
     *       &lt;attGroup ref="{}bodyatt"/>
     *       &lt;attribute ref="{}target"/>
     *       &lt;attribute ref="{}refapplic"/>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "refdmType", propOrder = {
        "applicAndDmcextensionAndAge"
    })
    public class RefdmType implements Serializable
    {
    
        private final static long serialVersionUID = 1L;
        @XmlElements({
            @XmlElement(name = "applic", type = ApplicType.class),
            @XmlElement(name = "dmcextension", type = DmcextensionType.class),
            @XmlElement(name = "age", type = AgeType.class),
            @XmlElement(name = "avee", type = AveeType.class),
            @XmlElement(name = "issno", type = IssnoType.class),
            @XmlElement(name = "dmtitle", type = DmtitleType.class),
            @XmlElement(name = "language", type = LanguageType.class),
            @XmlElement(name = "resource", namespace = "http://www.w3.org/1999/xlink", type = Resource.class),
            @XmlElement(name = "locator", namespace = "http://www.w3.org/1999/xlink", type = Locator.class),
            @XmlElement(name = "arc", namespace = "http://www.w3.org/1999/xlink", type = Arc.class)
        })
        protected List<Serializable> applicAndDmcextensionAndAge;
        @XmlAttribute(name = "target")
        protected String target;
        @XmlAttribute(name = "refapplic")
        @XmlIDREF
        @XmlSchemaType(name = "IDREF")
        protected Object refapplic;
        @XmlAttribute(name = "type", namespace = "http://www.w3.org/1999/xlink")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        protected String type;
        @XmlAttribute(name = "href", namespace = "http://www.w3.org/1999/xlink")
        protected String href;
        @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink")
        protected String title;
        @XmlAttribute(name = "show", namespace = "http://www.w3.org/1999/xlink")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        protected String show;
        @XmlAttribute(name = "actuate", namespace = "http://www.w3.org/1999/xlink")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        protected String actuate;
        @XmlAttribute(name = "authname")
        protected String authname;
        @XmlAttribute(name = "authdoc")
        protected String authdoc;
        @XmlAttribute(name = "id")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlID
        @XmlSchemaType(name = "ID")
        protected String id;
        @XmlAttribute(name = "level")
        @XmlSchemaType(name = "nonNegativeInteger")
        protected BigInteger level;
        @XmlAttribute(name = "mark")
        @XmlSchemaType(name = "nonNegativeInteger")
        protected BigInteger mark;
        @XmlAttribute(name = "change")
        protected ChangeType change;
        @XmlAttribute(name = "rfc")
        protected String rfc;
    
        /**
         * Gets the value of the applicAndDmcextensionAndAge property.
         * 
         * <p>
         * This accessor method returns a reference to the live list,
         * not a snapshot. Therefore any modification you make to the
         * returned list will be present inside the JAXB object.
         * This is why there is not a <CODE>set</CODE> method for the applicAndDmcextensionAndAge property.
         * 
         * <p>
         * For example, to add a new item, do as follows:
         * <pre>
         *    getApplicAndDmcextensionAndAge().add(newItem);
         * </pre>
         * 
         * 
         * <p>
         * Objects of the following type(s) are allowed in the list
         * {@link ApplicType }
         * {@link DmcextensionType }
         * {@link AgeType }
         * {@link AveeType }
         * {@link IssnoType }
         * {@link DmtitleType }
         * {@link LanguageType }
         * {@link Resource }
         * {@link Locator }
         * {@link Arc }
         * 
         * 
         */
        public List<Serializable> getApplicAndDmcextensionAndAge() {
            if (applicAndDmcextensionAndAge == null) {
                applicAndDmcextensionAndAge = new ArrayList<Serializable>();
            }
            return this.applicAndDmcextensionAndAge;
        }
        }
    

    The XrefType:

     /**
     * <p>Java class for xrefType complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within    this class.
     * 
     * <pre>
     * &lt;complexType name="xrefType">
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element ref="{}applic" minOccurs="0"/>
     *         &lt;group ref="{}SPARCON" maxOccurs="unbounded" minOccurs="0"/>
     *       &lt;/sequence>
     *       &lt;attGroup ref="{}cntlcontent"/>
     *       &lt;attGroup ref="{http://www.w3.org/1999/xlink}XLINKATT3"/>
     *       &lt;attribute ref="{}xrefid"/>
     *       &lt;attribute ref="{}xidtype"/>
     *       &lt;attribute ref="{}target"/>
     *       &lt;attribute ref="{}destitle"/>
     *       &lt;attribute ref="{}pretext"/>
     *       &lt;attribute ref="{}posttext"/>
     *       &lt;attribute ref="{}refapplic"/>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "xrefType", propOrder = {
    "content"
    })
    public class XrefType implements Serializable
    {
    
        private final static long serialVersionUID = 1L;
        @XmlElementRefs({
          @XmlElementRef(name = "supscrpt", type = JAXBElement.class),
          @XmlElementRef(name = "subscrpt", type = JAXBElement.class),
          @XmlElementRef(name = "applic", type = JAXBElement.class)
        })
       @XmlMixed
       protected List<Serializable> content;
       @XmlAttribute(name = "xrefid")
       @XmlJavaTypeAdapter(Adapter5 .class)
       @XmlSchemaType(name = "IDREF")
       protected String xrefid;
       @XmlAttribute(name = "xidtype")
       protected XidtypeType xidtype;
       @XmlAttribute(name = "target")
       protected String target;
       @XmlAttribute(name = "destitle")
       protected String destitle;
       @XmlAttribute(name = "pretext")
       protected String pretext;
       @XmlAttribute(name = "posttext")
       protected String posttext;
       @XmlAttribute(name = "refapplic")
       @XmlIDREF
       @XmlSchemaType(name = "IDREF")
       protected Object refapplic;
       @XmlAttribute(name = "authname")
       protected String authname;
       @XmlAttribute(name = "authdoc")
       protected String authdoc;
       @XmlAttribute(name = "type", namespace = "http://www.w3.org/1999/xlink")
       @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
       protected String type;
       @XmlAttribute(name = "href", namespace = "http://www.w3.org/1999/xlink")
       protected String href;
       @XmlAttribute(name = "title", namespace = "http://www.w3.org/1999/xlink")
       protected String title;
       @XmlAttribute(name = "show", namespace = "http://www.w3.org/1999/xlink")
       @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
       protected String show;
       @XmlAttribute(name = "actuate", namespace = "http://www.w3.org/1999/xlink")
       @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
       protected String actuate;
    
       /**
        * Gets the value of the content property.
        * <p>
        * This accessor method returns a reference to the live list,
        * not a snapshot. Therefore any modification you make to the
        * returned list will be present inside the JAXB object.
        * This is why there is not a <CODE>set</CODE> method for the content property.
        * 
        * <p>
        * For example, to add a new item, do as follows:
        * <pre>
        *    getContent().add(newItem);
        * </pre>
        * 
        * 
        * <p>
        * Objects of the following type(s) are allowed in the list
        * {@link String }
        * {@link JAXBElement }{@code <}{@link String }{@code >}
        * {@link JAXBElement }{@code <}{@link ApplicType }{@code >}
        * {@link JAXBElement }{@code <}{@link String }{@code >}
        * 
        * 
        */
        public List<Serializable> getContent() {
           if (content == null) {
            content = new ArrayList<Serializable>();
           }
           return this.content;
        }
    }
    

    And finally here is my custom binding file:

        <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:annox="http://annox.dev.java.net"
        xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd">
    
        <jxb:globalBindings typesafeEnumMemberName="generateName"
            typesafeEnumMaxMembers="1500" collectionType="java.util.ArrayList"
            generateValueClass="true" choiceContentProperty="true">
            <xjc:serializable uid="1" />
        </jxb:globalBindings>
    
        <jxb:bindings schemaLocation="simpleTypes.xsd" node="/xs:schema">
            <jxb:bindings node="//xs:simpleType[@name='YEAR']">
                <jxb:javaType name="java.lang.Integer" />
            </jxb:bindings>
            <jxb:bindings node="//xs:simpleType[@name='DAY']">
                <jxb:javaType name="java.lang.String" />
            </jxb:bindings>
            <jxb:bindings node="//xs:simpleType[@name='MONTH']">
                <jxb:javaType name="java.lang.String" />
            </jxb:bindings>
            <jxb:bindings node="//xs:simpleType[@name='issnovalueType']">
                <jxb:javaType name="java.lang.String" />
            </jxb:bindings>
        </jxb:bindings>
    
        <jxb:bindings schemaLocation="attributes.xsd" node="/xs:schema">
            <jxb:bindings node="xs:attribute[@name='inwork']">
                <jxb:property>
                    <jxb:baseType>
                        <jxb:javaType name="java.lang.String" />
                    </jxb:baseType>
                </jxb:property>
            </jxb:bindings>
            <jxb:bindings node="//xs:attribute[@name='xrefid']">
                <jxb:property>
                    <jxb:baseType>
                        <jxb:javaType name="java.lang.String" />
                    </jxb:baseType>
                </jxb:property>
            </jxb:bindings>
        </jxb:bindings>
    
        <jxb:bindings schemaLocation="complexTypes.xsd" node="/xs:schema">
            <jxb:bindings node="xs:complexType[@name='dmoduleType']">
                <annox:annotate>
                    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                        name="dmodule" />
                </annox:annotate>
            </jxb:bindings>
            <jxb:bindings node="//xs:complexType[@name='skillType']">
                <jxb:class name="SkillTypeComplex" />
            </jxb:bindings>
            <!--<jxb:bindings node="//xs:complexType[@name='xrefType']">
                  <annox:annotate>
                    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
                        name="xref" />
                </annox:annotate>
                <jxb:bindings node=".//xs:sequence//xs:element[@ref='applic']">
                    <jxb:property name="xrefApplic"/>
                </jxb:bindings>
            </jxb:bindings>-->
        </jxb:bindings>
    
        <jxb:bindings schemaLocation="elementGroups.xsd" node="//xs:group[@name='APPLIC']">
            <jxb:bindings node=".//xs:choice//xs:sequence">
                <jxb:bindings node=".//xs:choice">
                    <jxb:property name="assertEvalChoice" />
                </jxb:bindings>
            </jxb:bindings>
        </jxb:bindings>
    
        <jxb:bindings schemaLocation="dc.xsd" node="/xs:schema">
            <jxb:bindings node="//xs:element[@name='language']">
                <jxb:class name="DcLanguage" />
            </jxb:bindings>
            <jxb:bindings node="//xs:element[@name='subject']">
                <jxb:class name="DcSubject" />
            </jxb:bindings>
            <jxb:bindings node="//xs:element[@name='title']">
                <jxb:class name="DcTitle" />
            </jxb:bindings>
        </jxb:bindings>
    </jxb:bindings>
    

    A high level view of why this would occur and suggestions on how to fix it would be appreciated. I've only been using JAXB for a couple months and am not an expert. Thank you.

    Here is the error I'm seeing:

    javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.SAXException2: unable to marshal type "com.synesis7.s7exporter.domain.s1000d.dm.common.XrefType" as an element because it is missing an @XmlRootElement annotation] at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323) at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:249) at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:96) at com.synesis7.s7exporter.client.s1000d.procedural.S7ProceduralRunnable.writeToXml(S7ProceduralRunnable.java:142) at com.synesis7.s7exporter.client.s1000d.procedural.S7ProceduralRunnable.createProceduralDm(S7ProceduralRunnable.java:118) at com.synesis7.s7exporter.client.s1000d.procedural.S7ProceduralRunnable.run(S7ProceduralRunnable.java:93) at com.synesis7.s7exporter.S7ExporterController.processProceduralDms(S7ExporterController.java:235) at com.synesis7.s7exporter.S7ExporterController.exportSchema(S7ExporterController.java:118) at com.synesis7.s7exporter.S7exporter.initializeExporter(S7exporter.java:58) at com.synesis7.s7exporter.S7exporter.main(S7exporter.java:38) Caused by: com.sun.istack.SAXException2: unable to marshal type "com.synesis7.s7exporter.domain.s1000d.dm.common.XrefType" as an element because it is missing an @XmlRootElement annotation at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:252) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:324) at com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:118) at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69) at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172) at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69) at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172) at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69) at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172) at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:338) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156) at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:344) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:700) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:156) at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:161) at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:193) at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:321) at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:328) at com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:76) at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:498) at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:320) ... 9 more

  • Mitch McFarland
    Mitch McFarland over 11 years
    Thank you for the quick reply. I had read your blog post earlier and checked my ObjectFactory and it has the same constructs except for the namespace is not set. Could this be the problem and is it necessary? I am using the maven-jaxb2-plugin to generate my JAXB objects. I am not clear on how to use the package-info class to define the namespace if I use Maven? Do I need to create the objects from my IDE instead? I have set the schema and no namespace properties on the marshaller. I also tried to implement Moxy but I get an error. Any additional suggestions would be appreciated.
  • bdoughan
    bdoughan over 11 years
    @MitchMcFarland - I don't see a target namespace in your XML schema. Could you post the error you are seeing?
  • Mitch McFarland
    Mitch McFarland over 11 years
    I had missed placing an <xs:annotation> element in my schema example, so I have added that as well.
  • Mitch McFarland
    Mitch McFarland over 11 years
    I have added some additional code to my example, hopefully it will allow you to see what my problem is.
  • Mitch McFarland
    Mitch McFarland over 11 years
    I finally figured out my problem and the link you provided was the solution. It just took me awhile to figure out where and how to implement it.
  • raksja
    raksja over 8 years
    Reference given perfectly solved my issue of missing root element. Used ObjectFactory to resolve it.