2016-08-02 8 views
9

pacs.003 ISO20022フォーマットされたxmlファイルを解析しようとしています。私はこれに対してXSDを使用しており、XMLBeansを使用して必要なJavaクラスを作成しています。私が抱えている問題は、XMLから要素を読み取り、取得することができないことです。NullPointerException。私は同様の問題を捜し求めましたが、多くの場合OPは別の技術に移行します。Apache XmlBeans NullPointerException

私は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要素に追加することについての回答も読んだが、これは既に行われている。これらのどれも問題を解決していないようで、私はアイデアが不足しています。

ご協力いただければ幸いです。

+0

'data_samples/LON_20160208.xml'には到達可能ですか? – Sanjeev

+0

私はXMLの細かい部分を読むことができ、doc変数はnullではありません。 –

+0

doc要素から 'S2SDDDnf:'を削除してみてください。それが読める場合は、生成されたクラスに問題がある可能性があります – Sanjeev

答えて

6

私はこの問題を解決できました。これは、メッセージが一般的なpacs.003ファイルではない、より特定のSEPA DNFファイルであるためです。つまり、別のスキーマが必要でした。

nullメッセージは、xmlに<Document>ルートタグがないためです。<MPEDDDnfBlkDirDeb>ルートタグです。

関連する問題