JAXB Unmarshal Исключение - PullRequest
       0

JAXB Unmarshal Исключение

1 голос
/ 07 марта 2011

Я сгенерировал некоторые классы из xsd, которые я сделал из ответа веб-службы, на которую я звоню.Я получаю исключение, когда запускаю тестовый класс JUnit, который читает InputStream из вызова веб-службы.Я застрял в том, что означает исключение, поэтому я ищу несколько идей для проверки:

javax.xml.bind.UnmarshalException: Unexpected element {http://bar.foo.com/bbs}:rule

У меня есть класс в моих сгенерированных классах по адресу:

com.foo.bar.bbs.Rule

Значит ли исключение, что у меня нет класса Rule в соответствующем пакете?

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Вот несколько вещей, которые нужно проверить:

@ XmlRootElement

Убедитесь, что класс Rule аннотирован @XmlRootElement:

@XmlRootElement
public class Rule {
}

@ XmlElementDecl

Или что в классе ObjectFactory существует соответствующий @XmlElementDecl:

@XmlElementDecl(namespace = "http://bar.foo.com/bbs", name = "root")
public JAXBElement<Root> createCustomer(Root value) {
    return new JAXBElement<BigInteger>(_ROOT_QNAME, Root.class, null, value);
}

@ XmlSchema

Вам также необходимо убедиться, что информация о пространстве имен указана правильно.Класс package-info, вероятно, был сгенерирован для вас примерно так:Убедитесь, что указано правильное пространство имен.

@XmlSchema( 
    namespace = "http://bar.foo.com/bbs", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package com.foo.bar.bbs;

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

В качестве альтернативы вы можете включить пространство имен в аннотацию @XmlRootElement:

@XmlRootElement(namespace="http://bar.foo.com/bbs")
public class Rule {
}

Для получения дополнительной информации см .:

0 голосов
/ 07 марта 2011

Убедитесь, что вы отменяете правильный тип объекта.

...