6

次の XSD スキーマhttp://www.uniprot.org/support/docs/uniprot.xsdの JAXB を使用してデータを解析したいと考えてい ます。

この典型的な XML は次のようになります: http://www.uniprot.org/uniprot/Q8NEJ9.xml

私のクラスは以下を使用して生成されました:

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

このデータを解析するための JAXB アンマーシャラーを取得できません。

 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 {

どうすればこれを修正できますか?

4

1 に答える 1