Неожиданная ошибка JAXB - PullRequest
       12

Неожиданная ошибка JAXB

0 голосов
/ 29 марта 2010

Из документации ясно, что мне нужно использовать следующее, чтобы получить простой вывод из моего файла / схемы XML:

JAXBContext jc = JAXBContext.newInstance("PackageName");

, где PackageName - это имя моего пакета.Я посмотрел на Google немного безрезультатно, чтобы выяснить, почему я получаю эту ошибку во время выполнения:

Line:Col[2:142]:cvc-elt.1: Cannot find the declaration of element 'myconfig'.
Line:Col[2:142]:unexpected element (uri:"http://www.w3.org", local:"myconfig"). Expected elements are <{}myconfig>
Caught UnmarshalException

EDIT : Примечание: плагин заставил меняукажите название пакета.Я дал ему тот же пакет, что и все мои файлы классов приложений, так как я хотел, чтобы все классы JAXB и мое приложение были вместе.Если мой пакет PackageName, он создает все файлы классов JAXB в PackageName.PackageName.Затем мне пришлось переместить их из PackageName.PackageName (который он автоматически создал) обратно в дерево, где находится мое приложение (PackageName).Это не подходит мне. EDIT END

Вверху всех моих файлов классов происходит следующее, включая те, которые создал для меня плагин XJC JAXB для eclipse:

package PackageName;

, так почемупроисходит ли эта ошибка?

EDIT : Схема довольно большая, поэтому я не хочу вставлять все это сюда, и, следовательно, файл ObjectFactory.java довольно большой.Начинается

package PackageName;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;

и заканчивается

/**
 * Create an instance of {@link JAXBElement }{@code <}{@link MyConfigType }{@code >}}
 * 
 */
@XmlElementDecl(namespace = "", name = "myconfig")
public JAXBElement<MyConfigType> createMyconfig(MyConfigType value) {
    return new JAXBElement<MyConfigType>(_Myconfig_QNAME, MyConfigType.class, null, value);
}

Так что все вполне стандартно.Верхняя часть схемы (я новичок в XML-схеме, и она была мне предоставлена):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">

, что также выглядит прямо вперед.Схема для корневого элемента такова:

<xs:complexType name="MyConfigType">
    <xs:sequence>
        <xs:element name="tips" type="TipType" minOccurs="0"
            maxOccurs="unbounded">
            <xs:key name="unique_abc_id">
                <xs:selector xpath="./abc" />
                <xs:field xpath="@id" />
            </xs:key>
            <xs:key name="unique_def_id">
                <xs:selector xpath="./def" />
                <xs:field xpath="@id" />
            </xs:key>
        </xs:element>
    </xs:sequence>
    <xs:attribute ref="noNamespaceschemaLocation" />
</xs:complexType>

Поставляемая конфигурация, которую я прошу проверить одновременно с запуском unmarshal:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<myconfig xmlns="http://www.w3.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceschemaLocation="myconfig.xsd">
    <firsttag...>

Я в тупике.

РЕДАКТИРОВАТЬ КОНЕЦ

1 Ответ

1 голос
/ 29 марта 2010

Чтобы это работало:

JAXBContext jc = JAXBContext.newInstance("PackageName");

Вам необходимо иметь одно или оба из них:

  • ObjectFactory.class в этом каталоге
  • файл jaxb.index. Этот файл должен содержать список имен классов в этом пакете.

Любой из них описывает классы, которые должны быть доступны для JAXB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...