javax.XML.lier.UnmarshalException: élément inattendu (uri:"", local:""). Éléments attendus sont

vous pouvez trouver beaucoup de questions comme celle-ci dans ce site, mais aucune n'a résolu mon problème.

Ceci est mon XML:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<lookupInstances xmlns='http://www.pqr.com/awd/rest/v1' name='LKIMGR'>
<lookupParameters>
<lookupParameter name='businessArea'>PQAA</lookupParameter>
<lookupParameter name='MEMBERNUMBER'>ANTHONY1900</lookupParameter>
</lookupParameters>
</lookupInstances>

j'ai créé la classe Jaxb en utilisant le compilateur XJC et le fichier créé est :

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// 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.01.13 at 12:15:41 PM IST 
//


package com.dsths.ga.awd.main;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="lookupParameters">
 *           &lt;complexType>
 *             &lt;complexContent>
 *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 &lt;sequence>
 *                   &lt;element name="lookupParameter">
 *                     &lt;complexType>
 *                       &lt;complexContent>
 *                         &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                           &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
 *                         &lt;/restriction>
 *                       &lt;/complexContent>
 *                     &lt;/complexType>
 *                   &lt;/element>
 *                 &lt;/sequence>
 *               &lt;/restriction>
 *             &lt;/complexContent>
 *           &lt;/complexType>
 *         &lt;/element>
 *       &lt;/sequence>
 *       &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "lookupParameters"
})
@XmlRootElement(name = "lookupInstances")
public class LookupInstances {

    @XmlElement(required = true)
    protected LookupInstances.LookupParameters lookupParameters;
    @XmlAttribute
    protected String name;

    /**
     * Gets the value of the lookupParameters property.
     * 
     * @return
     *     possible object is
     *     {@link LookupInstances.LookupParameters }
     *     
     */
    public LookupInstances.LookupParameters getLookupParameters() {
        return lookupParameters;
    }

    /**
     * Sets the value of the lookupParameters property.
     * 
     * @param value
     *     allowed object is
     *     {@link LookupInstances.LookupParameters }
     *     
     */
    public void setLookupParameters(LookupInstances.LookupParameters value) {
        this.lookupParameters = value;
    }

    /**
     * Gets the value of the name property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getName() {
        return name;
    }

    /**
     * Sets the value of the name property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setName(String value) {
        this.name = value;
    }


    /**
     * <p>Java class for anonymous complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element name="lookupParameter">
     *           &lt;complexType>
     *             &lt;complexContent>
     *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *                 &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
     *               &lt;/restriction>
     *             &lt;/complexContent>
     *           &lt;/complexType>
     *         &lt;/element>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "lookupParameter"
    })
    public static class LookupParameters {

        @XmlElement(required = true)
        protected LookupInstances.LookupParameters.LookupParameter lookupParameter;

        /**
         * Gets the value of the lookupParameter property.
         * 
         * @return
         *     possible object is
         *     {@link LookupInstances.LookupParameters.LookupParameter }
         *     
         */
        public LookupInstances.LookupParameters.LookupParameter getLookupParameter() {
            return lookupParameter;
        }

        /**
         * Sets the value of the lookupParameter property.
         * 
         * @param value
         *     allowed object is
         *     {@link LookupInstances.LookupParameters.LookupParameter }
         *     
         */
        public void setLookupParameter(LookupInstances.LookupParameters.LookupParameter value) {
            this.lookupParameter = value;
        }


        /**
         * <p>Java class for anonymous complex type.
         * 
         * <p>The following schema fragment specifies the expected content contained within this class.
         * 
         * <pre>
         * &lt;complexType>
         *   &lt;complexContent>
         *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
         *       &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
         *     &lt;/restriction>
         *   &lt;/complexContent>
         * &lt;/complexType>
         * </pre>
         * 
         * 
         */
        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "")
        public static class LookupParameter {

            @XmlAttribute
            protected String name;

            /**
             * Gets the value of the name property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getName() {
                return name;
            }

            /**
             * Sets the value of the name property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setName(String value) {
                this.name = value;
            }

        }

    }

}

Unmarshal Code:

    public LookupInstances unmarshallXmlRequest(String xmlReq)
    {
        LookupInstances instances = null;
           try {
            JAXBContext jc = JAXBContext.newInstance( LookupInstances.class );
               Unmarshaller u = jc.createUnmarshaller();
               StringBuffer xmlStr = new StringBuffer( xmlReq );
               StringReader strReader = new StringReader( xmlStr.toString() );
               StreamSource strSource = new StreamSource(strReader);
               Object o = u.unmarshal( strSource );
               instances = (LookupInstances)o;
        } catch (JAXBException e) {

            e.printStackTrace();
        }
        return instances;
    }

j'ai eu cette erreur :

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.pqr.com/awd/rest/v1", local:"lookupInstances"). Expected elements are <{}lookupInstances>

s'il vous Plaît aider.

16
demandé sur Ashok.N 2015-01-13 12:55:18

6 réponses

ci-Dessous, quelques informations qui devraient vous aider:

XML

ci-dessous une partie de votre XML. Une chose à noter est l' xmlns l'attribut. Il s'agit d'un attribut spécial qui renvoie à la qualification de l'Espace-nom dans le document XML.

<lookupInstances xmlns='http://www.pqr.com/awd/rest/v1' name='LKIMGR'>
    <lookupParameters/>
</lookupInstances>

Voici une autre version du XML avec la même qualification d'espace de noms:

<abc:lookupInstances xmlns:abc='http://www.pqr.com/awd/rest/v1' name='LKIMGR'>
    <abc:lookupParameters/>
</abc:lookupInstances>

lorsque vous supprimez le xmlns attribut l'attribut namespace est supprimé. Le document ci-dessous n'est pas équivalent aux deux précédents.

<lookupInstances name='LKIMGR'>
    <lookupParameters/>
</lookupInstances>

Votre Erreur

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.pqr.com/awd/rest/v1", local:"lookupInstances"). Expected elements are <{}lookupInstances>

cette erreur indique que vous n'avez pas mappé correctement la qualification namespace.

Cartographie de la Namesapce Qualification dans JAXB

la qualification de L'espace de noms dans JAXB est faite en utilisant le niveau du paquet @XmlSchema annotation. Les annotations au niveau du paquet vont dans package-info.java. Ci-dessous est la source complète pour ce classe. Si vous avez déjà un package-info.java fichier source assurez-vous qu'il est compilé et empaqueté avec le reste de vos classes.

@XmlSchema( 
    namespace = "http://www.pqr.com/awd/rest/v1", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package your_package;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

schéma XML

si vous générez votre modèle à partir d'un schéma XML, assurez-vous que cette qualification d'espace de noms y est correctement définie. Il va ressembler à ça:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.pqr.com/awd/rest/v1" 
    xmlns="http://www.pqr.com/awd/rest/v1" 
    elementFormDefault="qualified">
</xs:schema>
17
répondu Blaise Doughan 2015-01-14 10:16:51

Modifier

@XmlRootElement(name = "lookupInstances")

@XmlRootElement( namespace = "http://www.pqr.com/awd/rest/v1", name = "lookupInstances")
6
répondu Anish Hirlekar 2016-12-26 18:11:06

Il semble que la classe créée par JAXB ne contient pas les informations d'espace de noms:

@XmlType(name = "", propOrder = {
    "lookupParameters"
})

je soupçonne qu'il provoque cette erreur, simplement parce qu'il ne s'attend pas à un namespace:

javax.XML.lier.UnmarshalException: élément inattendu (uri:"http://www.pqr.com/awd/rest/v1", local: "lookupInstances"). éléments Attendus sont <{}lookupInstances>

Je ne suis pas sûr pourquoi la classe générée manque cela de l'information, mais je voudrais commencer par l'ajouter manuellement pour vérifier que c'est bien le problème:

@XmlType(name = "", namespace= "http://www.pqr.com/awd/rest/v1", propOrder = {
    "lookupParameters"
})
2
répondu Magnilex 2015-01-13 15:57:52

j'ai changé la classe jaxb en changeant le xsd et cela fonctionne maintenant.

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
// 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.01.13 at 03:49:52 PM IST 
//


package com.dsths.ga.awd.main;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;


/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="lookupParameters">
 *           &lt;complexType>
 *             &lt;complexContent>
 *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 &lt;sequence>
 *                   &lt;element name="lookupParameter" maxOccurs="unbounded" minOccurs="0">
 *                     &lt;complexType>
 *                       &lt;simpleContent>
 *                         &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
 *                           &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
 *                         &lt;/extension>
 *                       &lt;/simpleContent>
 *                     &lt;/complexType>
 *                   &lt;/element>
 *                 &lt;/sequence>
 *               &lt;/restriction>
 *             &lt;/complexContent>
 *           &lt;/complexType>
 *         &lt;/element>
 *       &lt;/sequence>
 *       &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "lookupParameters"
})
@XmlRootElement(name = "lookupInstances")
public class LookupInstances {

    @XmlElement(required = true)
    protected LookupInstances.LookupParameters lookupParameters;
    @XmlAttribute(name = "name")
    protected String name;

    /**
     * Gets the value of the lookupParameters property.
     * 
     * @return
     *     possible object is
     *     {@link LookupInstances.LookupParameters }
     *     
     */
    public LookupInstances.LookupParameters getLookupParameters() {
        return lookupParameters;
    }

    /**
     * Sets the value of the lookupParameters property.
     * 
     * @param value
     *     allowed object is
     *     {@link LookupInstances.LookupParameters }
     *     
     */
    public void setLookupParameters(LookupInstances.LookupParameters value) {
        this.lookupParameters = value;
    }

    /**
     * Gets the value of the name property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getName() {
        return name;
    }

    /**
     * Sets the value of the name property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setName(String value) {
        this.name = value;
    }


    /**
     * <p>Java class for anonymous complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element name="lookupParameter" maxOccurs="unbounded" minOccurs="0">
     *           &lt;complexType>
     *             &lt;simpleContent>
     *               &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
     *                 &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
     *               &lt;/extension>
     *             &lt;/simpleContent>
     *           &lt;/complexType>
     *         &lt;/element>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "lookupParameter"
    })
    public static class LookupParameters {

        protected List<LookupInstances.LookupParameters.LookupParameter> lookupParameter;

        /**
         * Gets the value of the lookupParameter 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 lookupParameter property.
         * 
         * <p>
         * For example, to add a new item, do as follows:
         * <pre>
         *    getLookupParameter().add(newItem);
         * </pre>
         * 
         * 
         * <p>
         * Objects of the following type(s) are allowed in the list
         * {@link LookupInstances.LookupParameters.LookupParameter }
         * 
         * 
         */
        public List<LookupInstances.LookupParameters.LookupParameter> getLookupParameter() {
            if (lookupParameter == null) {
                lookupParameter = new ArrayList<LookupInstances.LookupParameters.LookupParameter>();
            }
            return this.lookupParameter;
        }


        /**
         * <p>Java class for anonymous complex type.
         * 
         * <p>The following schema fragment specifies the expected content contained within this class.
         * 
         * <pre>
         * &lt;complexType>
         *   &lt;simpleContent>
         *     &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>string">
         *       &lt;attribute name="name" type="{http://www.w3.org/2001/XMLSchema}string" />
         *     &lt;/extension>
         *   &lt;/simpleContent>
         * &lt;/complexType>
         * </pre>
         * 
         * 
         */
        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "", propOrder = {
            "value"
        })
        public static class LookupParameter {

            @XmlValue
            protected String value;
            @XmlAttribute(name = "name")
            protected String name;

            /**
             * Gets the value of the value property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getValue() {
                return value;
            }

            /**
             * Sets the value of the value property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setValue(String value) {
                this.value = value;
            }

            /**
             * Gets the value of the name property.
             * 
             * @return
             *     possible object is
             *     {@link String }
             *     
             */
            public String getName() {
                return name;
            }

            /**
             * Sets the value of the name property.
             * 
             * @param value
             *     allowed object is
             *     {@link String }
             *     
             */
            public void setName(String value) {
                this.name = value;
            }

        }

    }

}
2
répondu Rana 2015-01-14 06:53:45

tout d'Abord, vous devez vérifier le fichier XML d'entrée. Assurez-vous que L'entrée XML doit avoir le même élément racine que votre fichier XSD(que vous avez utilisé pour créer les classes JAXb)) Alors s'il vous plaît essayer XML ci-dessous, il fonctionnera très bien :)

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<lookupInstances name='LKIMGR'>
<lookupParameters>
<lookupParameter name='businessArea'>PQAA</lookupParameter>
<lookupParameter name='MEMBERNUMBER'>ANTHONY1900</lookupParameter>
</lookupParameters>
</lookupInstances> 
0
répondu Satya.pydikondala 2016-09-26 08:48:33
@XmlSchema(namespace = "http://www.pqr.com/awd/rest/v1", 
elementFormDefault = XmlNsForm.QUALIFIED) package your_package;

        import javax.xml.bind.annotation.XmlNsForm;
        import javax.xml.bind.annotation.XmlSchema; 
elementFormDefault = XmlNsForm.QUALIFIED ne sera pas automatiquement ajouté par le JAXB.

Merci Blaise, ta réponse m'a aidé.

0
répondu ClickBright 2017-12-05 17:55:33