проблема демаршалирования XML-документа на объекты Java (jaxb) - PullRequest
1 голос
/ 07 ноября 2010

Я использовал xjc для создания Java-объектов из XSD.

, и теперь я пытаюсь разархивировать документ XML для Java-объектов, но я получаю:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"GlobalComponentInformation

Здесь кто-нибудь есть?

РЕДАКТИРОВАТЬ:

Я передаю объект org.w3c.dom.Document, он вернулся из вызова веб-службы (веб-службы оси) ...

Обратите внимание, что объект Document, возвращаемый из ws для анализа, содержит следующий корневой элемент:

<GlobalInformationResponseDocument xmlns="" />

@ XmlRootElement класс выглядит так:

XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "wsExternalResponse"
})
@XmlRootElement(name = "GlobalInformationResponseDocument")
public class GlobalInformationResponseDocument {

    @XmlElement(name = "WS_ExternalResponse", required = true)
    protected WSExternalResponseType wsExternalResponse;

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

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

}

package-информация:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.mycompany.com/GlobalInformationResponseExt", 
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.company.jaxb.client;

1 Ответ

1 голос
/ 08 ноября 2010

Корневой элемент, который вы получаете от класса веб-сервиса:

<GlobalInformationResponseDocument xmlns="" />

Не соответствует ожидаемому корневому элементу, который ожидается на основе ваших сопоставлений JAXB:

<GlobalInformationResponseDocument xmlns="http://www.mycompany.com/GlobalInformationResponseExt" />

Класс package-info указывает, что все элементы должны быть квалифицированы в пространстве имен (javax.xml.bind.annotation.XmlNsForm.QUALIFIED) и что пространство имен по умолчанию - "http://www.mycompany.com/GlobalInformationResponseExt"

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.mycompany.com/GlobalInformationResponseExt", 
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.company.jaxb.client;

Вам нужно будет либо исправить документ XML, либо изменить сопоставления JAXB, чтобы они соответствовали документу. В этом случае, удалив информацию о пакете.

...