Apache XmlBeans NullPointerException

Jam*_*Fox 9 java xml xsd xmlbeans xml-namespaces

我试图解析pacs.003 ISO20022格式的xml文件.我有这个XSD,并使用XMLBeans创建了所需的Java类.我遇到的问题是我无法从XML中读取元素并继续获取NullPointerException.我搜索过类似的问题,但大多数都导致OP转向不同的技术.

我从LON_20160208.xml获得的XML片段是:

  <S2SDDDnf:FIToFICstmrDrctDbt xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02">
    <GrpHdr>
      <MsgId>DDA160802AASW006543</MsgId>
    </GrpHdr>
  </S2SDDDnf:FIToFICstmrDrctDbt>
Run Code Online (Sandbox Code Playgroud)

我的代码是:

  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();
    }
}
Run Code Online (Sandbox Code Playgroud)

doc.getFIToFICstmrDrctDbt()在上述结果NullPointerException异常,这似乎指向无论是get_store()在XMLBeans类中的方法或与命名空间的问题.

我已经尝试使用替换命名空间映射并打开setUseDefaultNamespace()和关闭该方法(它目前没有在上面注释掉).我也看过有关添加一个答案elementFormDefault="qualified"xsd:schema元素,但这个已经完成.这些似乎都没有解决问题,我的想法已经不多了.

任何帮助将不胜感激.

Jam*_*Fox 6

我已经能够解决这个问题.这是因为消息是一个更具体的SEPA DNF文件,它不是通用的pacs.003文件.这意味着它需要一个不同的模式.

空消息是因为xml没有<Document>根标记,它是<MPEDDDnfBlkDirDeb>根标记.