JAXB не понимает корневых элементов?

Я пытаюсь маршалировать файл с помощью схемы Visio XML , которая состоит из трех файлов схемы и создает три пакета, когда исходный код java создается с помощью XJC:

  • com.microsoft .schemas.visio._2003.core
  • com.microsoft.schemas.visio._2006.extension
  • com.microsoft.schemas.office.visio._2010.extension

Корневым элементом является VisioDocument , и все классы, которые я использую, находятся в пакете 2003 .

Вот мой подход к сортировке моего XML-файла:

VisioDocumentType visioDoc = new VisioDocumentType();
... manipulated here ...
JAXBContext jc = JAXBContext.newInstance("com.microsoft.schemas.visio._2003.core");
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(new JAXBElement(new QName("uri","local"), VisioDocumentType.class, visioDoc), bw);

При выполнении я получаю следующую ошибку:

javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.internal.SAXException2: unable to marshal type "com.microsoft.schemas.visio._2003.core.PagePropsType" as an element because it is missing an @XmlRootElement annotation]

Я использую PagePropsType , но это не корневой элемент. Почему JAXB так думает?

5
задан Chris 16 December 2011 в 12:26
поделиться