Apache XmlBeans NullPointerException

Я пытаюсь разобрать XML-файл в формате pacs.003 ISO20022. У меня есть XSD для этого, и с помощью XMLBeans созданы необходимые классы Java. У меня проблема в том, что я не могу прочитать элемент из XML и продолжаю получать NullPointerException. Я искал похожие проблемы, но большинство из них приводит к переходу ОП на другую технологию.

Фрагмент XML, который у меня есть из LON_20160208.xml:

  <S2SDDDnf:FIToFICstmrDrctDbt xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02">
    <GrpHdr>
      <MsgId>DDA160802AASW006543</MsgId>
    </GrpHdr>
  </S2SDDDnf:FIToFICstmrDrctDbt>

Мой код:

  public static void main(String[] args) {
    XmlOptions xmlOptions = new XmlOptions();
    xmlOptions.setUseDefaultNamespace();
    xmlOptions.setSavePrettyPrint();

    Document doc;

    try {
        doc = Document.Factory.parse(new File("data_samples/LON_20160208.xml"));
        String messageId = doc.getFIToFICstmrDrctDbt().getGrpHdr().getMsgId();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (XmlException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

doc.getFIToFICstmrDrctDbt() выше приводит к NullPointerException, и это, по-видимому, указывает либо на метод get_store() в классах XMLBeans, либо на проблему с пространствами имен.

Я попытался использовать карту замещающего пространства имен и включал и выключал метод setUseDefaultNamespace() (в настоящее время он не прокомментирован выше). Я также прочитал ответ о добавлении elementFormDefault="qualified" к элементу xsd:schema, но это уже сделано. Кажется, ни один из них не решает проблему, и у меня заканчиваются идеи.

Любая помощь будет принята с благодарностью.


person James Fox    schedule 02.08.2016    source источник
comment
Доступен ли data_samples/LON_20160208.xml?   -  person Sanjeev    schedule 02.08.2016
comment
Да, я могу нормально читать XML, и переменная документа не равна нулю.   -  person James Fox    schedule 02.08.2016
comment
попробуйте удалить S2SDDDnf: из элемента документа, а затем прочитайте его. если он может читать, может быть проблема с сгенерированными классами   -  person Sanjeev    schedule 02.08.2016
comment
Это не решает проблему. Я могу загрузить замещающие пространства имен, но это тоже не исправило это раньше.   -  person James Fox    schedule 02.08.2016
comment
Пожалуйста, добавьте трассировку стека.   -  person Hash    schedule 09.08.2016


Ответы (1)


Я смог решить проблему. Это произошло из-за того, что сообщение является более конкретным файлом SEPA DNF, а не общим файлом pacs.003. Это означает, что ему нужна другая схема.

Нулевые сообщения были вызваны тем, что xml не имеет корневого тега <Document>, это корневой тег <MPEDDDnfBlkDirDeb>.

person James Fox    schedule 09.08.2016