2016-08-02 32 views
9

Bir pacs.003 ISO20022 biçimlendirilmiş xml dosyasını ayrıştırmaya çalışıyorum. Bunun için XSD var ve XMLBeans kullanmak gerekli Java sınıflarını oluşturdu. Sorun şu ki, XML'den bir öğe okuyamıyorum ve NullPointerException almaya devam etmem. Benzer problemleri aradım ama en çok OP'nin farklı bir teknolojiye geçmesiyle sonuçlandı.Apache XmlBeans NullPointerException

Ben LON_20160208.xml gelen var XML pasajı geçerli:

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

Benim kodudur:

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(); 
    } 
} 

bir NullPointerException sonuçların üzerinde doc.getFIToFICstmrDrctDbt() ve buna ya işaret ediyor XMLBeans sınıfları içinde get_store() yöntemi veya ad alanları ile ilgili bir sorun.

Eşanlamlı bir ad alanı eşlemini kullanmayı denedim ve setUseDefaultNamespace() yöntemini açıp kapamaya başladım (şu anda yukarıda açıklanmamıştır). Ayrıca xsd:schema öğesine elementFormDefault="qualified" eklenmesiyle ilgili bir yanıt okudum, ancak bu zaten yapıldı. Bunların hiçbiri sorunu çözmüyor ve fikirlerim tükeniyor.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

+0

"data_samples/LON_20160208.xml" erişebilir mi? – Sanjeev

+0

Evet, XML'i okuyabiliyorum ve doc değişkeni boş değil. –

+0

'S2SDDDnf:' öğesini doc öğenizden kaldırmayı deneyin ve ardından okuyun. okunabilirse, – Sanjeev

cevap

6

Sorunu düzeltebildim. İletinin, genel bir pacs.003 dosyası olmayan daha özel bir SEPA DNF dosyası olması gerçeğinden kaynaklanıyordu. Bu, farklı bir şemaya ihtiyaç duyduğu anlamına gelir.

Boş iletileri, xml'nin <Document> kök etiketine sahip olmaması nedeniyle <MPEDDDnfBlkDirDeb> kök etiketidir.

İlgili konular