Из документации ясно, что нужно использовать следующее, чтобы получить простую демаршаллинг произойти из моего XML файла/схеме:Непредвиденная ошибка JAXB
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 для затмения создан для меня:
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 схемы Newb и это было поставлено мне), является:
<?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>
Прилагаемый конфиг, который я прошу его, чтобы проверить, в то же время, как начинается распаковать:
<?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...>
Я в тупик.
EDIT END
Ах. Извините, забыл упомянуть, у меня уже был xjc создать файл objectfactory.java - он находится в файлах ссылок схемы. Куда мне идти дальше? – volvox
@Mark Lewis Мне нужна дополнительная информация о самих классах. Он выглядит проблемой проверки схемы, но не видя, что класс не знает, могу ли я рассказать вам многое. –
спасибо за ответ, я отредактировал некоторый проблемный код в моем вопросе, чтобы немного его изложить. Возможно, это еще раз иллюстрирует мою проблему. Спасибо ИА – volvox