我正在尝试解析一个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>我的代码是:
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();
}
}上面的NullPointerException产生了一个doc.getFIToFICstmrDrctDbt(),这似乎指向了XMLBeans类中的get_store()方法或名称空间的问题。
我尝试过使用替代的命名空间映射,并切换了setUseDefaultNamespace()方法的开始和关闭(它目前还没有注释掉)。我还读过关于将elementFormDefault="qualified"添加到xsd:schema元素的答案,但这已经完成了。所有这些似乎都解决不了这个问题,我的想法也不多了。
任何帮助都将不胜感激。
发布于 2016-08-09 11:44:39
我已经解决了这个问题。这是因为消息是一个更具体的SEPA文件,而不是一个通用的pacs.003文件。这意味着它需要一个不同的模式。
空消息是因为xml没有<Document>根标记,而是<MPEDDDnfBlkDirDeb>根标记。
https://stackoverflow.com/questions/38725422
复制相似问题