2010-03-29 7 views
0

Из документации ясно, что нужно использовать следующее, чтобы получить простую демаршаллинг произойти из моего 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

ответ

1

Для этой работы:

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

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

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

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

+0

Ах. Извините, забыл упомянуть, у меня уже был xjc создать файл objectfactory.java - он находится в файлах ссылок схемы. Куда мне идти дальше? – volvox

+0

@Mark Lewis Мне нужна дополнительная информация о самих классах. Он выглядит проблемой проверки схемы, но не видя, что класс не знает, могу ли я рассказать вам многое. –

+0

спасибо за ответ, я отредактировал некоторый проблемный код в моем вопросе, чтобы немного его изложить. Возможно, это еще раз иллюстрирует мою проблему. Спасибо ИА – volvox