2013-07-22 3 views
4

Я хочу проанализировать данные с помощью JAXB для следующей схемы XSD http://www.uniprot.org/support/docs/uniprot.xsd.XJC не генерирует @XmlElement с пространством имен?

Типичный XML для этого выглядит следующим образом: http://www.uniprot.org/uniprot/Q8NEJ9.xml

Мои классы были получены с использованием:

xjc http://www.uniprot.org/support/docs/uniprot.xsd 

Я не могу получить JAXB unmarshaller для синтаксического анализа этих данных.

xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.TRUE); 
    XMLEventReader rx=xmlInputFactory.createXMLEventReader(in); 
    final QName uEntry=new QName("http://uniprot.org/uniprot","entry"); 

    while(rx.hasNext()) 
    { 
    XMLEvent evt=rx.peek(); 
    if(!(evt.isStartElement() && evt.asStartElement().getName().equals(uEntry))) 
     { 
     rx.next(); 
     continue; 
     } 
    JAXBElement<Entry> jaxbElement=uniprotUnmarshaller.unmarshal(rx, Entry.class); 
    Entry entry= jaxbElement.getValue(); 
    (...) 
    } 

Каждый экземпляр «записи» остается пустым. Когда запись маршалируются STDERR, я получаю что-то вроде:

<ns2:entry xmlns:ns2="http://uniprot.org/uniprot" dataset="Swiss-Prot" created="2011-06-28+01:00" modified="2011-09-21+01:00" version="20"/> 

Я думаю, это потому, что XJC игнорирует пространства имен. Он генерирует:

@XmlRootElement(name = "entry") 
public class Entry { 

вместо

@XmlRootElement(name = "entry",namespace="http://uniprot.org/uniprot") 
public class Entry { 

Как я могу это исправить (?)?

ответ

6

A package-info класс, содержащий аннотацию @XmlSchema, будет сгенерирован для вас. Так как задан namespace вместе с elementFormDefault, равным XmlNsForm.QUALIFIED, все аннотации, соответствующие элементам XML без указанного параметра пространства имен, будут принадлежать этому пространству имен.

// 
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2013.07.22 at 10:14:54 AM EDT 
// 

@javax.xml.bind.annotation.XmlSchema(namespace = "http://uniprot.org/uniprot", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package org.uniprot.uniprot; 

Для получения более подробной информации

+1

Спасибо Блейз, package-info.java пропускал ИНТ мой муравей путь. Я не думал, что этот файл будет скомпилирован. – Pierre

+1

Привет, У меня очень похожая проблема. Что именно вам нужно было сделать, чтобы он работал? У меня есть сгенерированный класс 'package-info', но я не уверен, как его использовать. Должен ли я добавить его в мой процесс сборки maven? – L42

Смежные вопросы