2016-08-02 1 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() 메서드를 설정 및 해제 전환했습니다 (현재 위에서 주석으로 처리되지 않았습니다). 또한 을 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> 루트 태그입니다.

관련 문제