java - xbean - xmlbeans maven
Apache XmlBeans NullPointerException (1)
He podido solucionar el problema. Fue debido al hecho de que el mensaje es un archivo SEFA DNF más específico que no es un archivo genérico de pacs.003 . Esto significa que necesitaba un esquema diferente.
Los mensajes nulos se debían a que el xml no tiene una etiqueta raíz <Document>
, es una etiqueta raíz <MPEDDDnfBlkDirDeb>
.
Estoy tratando de analizar un archivo xml pacs.003 ISO20022 . Tengo el XSD para esto y el uso de XMLBeans ha creado las clases de Java requeridas. El problema que tengo es que no puedo leer un elemento del XML y seguir obteniendo una NullPointerException . He buscado problemas similares, pero la mayoría da como resultado que el OP se mueva a una tecnología diferente.
El fragmento XML que tengo de LON_20160208.xml es:
<S2SDDDnf:FIToFICstmrDrctDbt xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02">
<GrpHdr>
<MsgId>DDA160802AASW006543</MsgId>
</GrpHdr>
</S2SDDDnf:FIToFICstmrDrctDbt>
Mi código es:
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();
}
}
El doc.getFIToFICstmrDrctDbt()
anterior da como resultado una NullPointerException y esto parece apuntar al método get_store()
dentro de las clases XMLBeans o un problema con los espacios de nombres.
He intentado utilizar un mapa de espacio de nombres sustituto y he activado y desactivado el método setUseDefaultNamespace()
(actualmente no está comentado anteriormente). También he leído una respuesta con respecto a agregar elementFormDefault="qualified"
al elemento xsd:schema
, pero esto ya se ha hecho. Ninguno de estos parece solucionar el problema y me estoy quedando sin ideas.
Cualquier ayuda sería muy apreciada.