How to resolve the error 'nexpected element (uri:"", local:"Create"). Expected elements are <{}Create>'?

java, jaxb, unmarshalling, xml

Solution

Your XML Schema probably has a `schema` tag like the following.

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/XSD_Maths" 
    xmlns:tns="http://www.example.org/XSD_Maths" 
    elementFormDefault="qualified">

Since it specifies a `targetNamespace` of `http://www.example.org/XSD_Maths`. Your XML will need to look like the following:

<create xmlns="http://www.example.org/XSD_Maths">
    <name> coco </name>
</create>

Note About Unmarshalling from a DOM

If you unmarshalling from a DOM `Document` or `Element` make sure that the DOM parser you used was namespace aware. This is done by setting the following flag on the `DocumentBuilderFactory`.

documentBuilderFactory.setNamespaceAware(true);

For More Information

Below is a link to an article on my blog where I go into more depth about JAXB and namespaces.

- http://blog.bdoughan.com/2010/08/jaxb-namespaces.html

Problem

I have a problem with my JAXB: ``` <element name="create"> <complexType> <sequence> <element name="name" type="string"></element> </sequence> </complexType> </element> ``` My XML: ``` <Create> <name> coco </name> </Create> ``` My Java: ``` JAXBContext context = JAXBContext.newInstance("MyPackage"); Unmarshaller decodeur = context.createUnmarshaller(); System.out.println("text : " + message); msgObject = decodeur.unmarshal(sr); if (msgObject instanceof Create) { System.out.println(" action"); } ``` And I have this: unexpected element (uri:"", local:"Create"). Expected elements are <{http://www.example.org/XSD_Maths}create> And my code stopped at this line: ``` msgObject = decodeur.unmarshal(sr); ``` Is my XML OK or is there a problem with it? I'm not sure why I'm getting this error.

Original source