From d68f210ebc9bf03b9738581430b6240308295774 Mon Sep 17 00:00:00 2001 From: claeis Date: Mon, 23 Mar 2020 15:12:30 +0100 Subject: [PATCH] Xtf24Reader: wrong xmlns for extended attributes (claeis/ilivalidator#235) --- build.gradle | 4 +- doc/CHANGES.txt | 2 + .../ch/interlis/iom_j/xtf/Xtf24Reader.java | 52 ++++++++++++++----- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 16e48772..5e9a16dc 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ compileJava.options.encoding = 'US-ASCII' dependencies { compile group: 'ch.ehi', name: 'ehibasics', version: '1.2.0' compile group: 'ch.interlis', name: 'iox-api', version: '1.0.3' - compile group: 'ch.interlis', name: 'ili2c-core', version: '4.7.10' + compile group: 'ch.interlis', name: 'ili2c-core', version: '5.0.7+' compile group: 'antlr', name: 'antlr', version: '2.7.6' compile group: 'com.vividsolutions', name: 'jts-core', version: '1.14.0' compile group: 'net.iharder', name: 'base64', version: '2.3.9' @@ -31,7 +31,7 @@ dependencies { testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3' testCompile group: 'org.xmlunit',name: 'xmlunit-matchers',version: '2.5.1' testCompile group: 'org.xmlunit', name: 'xmlunit-core',version: '2.5.1' - testCompile (group: 'ch.interlis', name: 'ili2c-tool', version: '4.7.10'){ + testCompile (group: 'ch.interlis', name: 'ili2c-tool', version: '5.0.7+'){ exclude group: 'ch.interlis', module: 'iox-ili' } deployerJars "org.apache.maven.wagon:wagon-ftp:3.3.3" diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt index c5a53e78..af623f87 100644 --- a/doc/CHANGES.txt +++ b/doc/CHANGES.txt @@ -7,6 +7,8 @@ LATEST ----------------------------- - Validator: ArrayIndexOutOfBoundsException with n-ary association (ilivalidator#232) - Wkb2iox: support EMPTY geometries (ili2db#338) +- Xtf24Reader: wrong xmlns for extended attributes (ilivalidator#235) +- ili2c-5.0.7-SNAPSHOT iox-ili 1.20.17 (2020-03-01) ----------------------------- diff --git a/src/main/java/ch/interlis/iom_j/xtf/Xtf24Reader.java b/src/main/java/ch/interlis/iom_j/xtf/Xtf24Reader.java index 60795863..b5785a57 100644 --- a/src/main/java/ch/interlis/iom_j/xtf/Xtf24Reader.java +++ b/src/main/java/ch/interlis/iom_j/xtf/Xtf24Reader.java @@ -851,20 +851,17 @@ private void setupNameMapping(){ // iliProperties Iterator elementIter=aClass.getAttributesAndRoles2(); transferElements=new HashMap(); - Element element=null; while (elementIter.hasNext()){ ViewableTransferElement obj = (ViewableTransferElement) elementIter.next(); - if(obj.obj instanceof Element){ - element=(Element) obj.obj; - String elementName=element.getName(); - Model modelOfElement=(Model)element.getContainer(Model.class); - String elementNs=modelNameSpace; - if(modelOfElement!=model) { - elementNs=getModelXmlNamespace(modelOfElement); - } - QName eleQName=new QName(elementNs, elementName); - transferElements.put(eleQName, element); - } + Element element=(Element) obj.obj; + Element rootEle=getRootEle(element); + String elementNs=modelNameSpace; + Model modelOfElement=(Model)rootEle.getContainer(Model.class); + if(modelOfElement!=model) { + elementNs=getModelXmlNamespace(modelOfElement); + } + QName eleQName=new QName(elementNs, element.getName()); + transferElements.put(eleQName, element); } iliProperties.put(aClass, transferElements); } @@ -872,6 +869,37 @@ private void setupNameMapping(){ } } + private Element getRootEle(Element element) { + Element rootEle=null; + if(element instanceof RoleDef){ + RoleDef role=(RoleDef)element; + rootEle=role.getRootExtending(); + }else if(element instanceof AttributeDef){ + AttributeDef attr=(AttributeDef)element; + rootEle=attr.getRootExtending(); + }else { + throw new IllegalStateException("unexpected class "+element.getClass().getName()); + } + if(rootEle!=null) { + return rootEle; + } + return element; + } + + private AttributeDef getRootExtending(AttributeDef attr) { + AttributeDef ret=(AttributeDef)attr.getExtending(); + if(ret!=null){ + while(true){ + Element ret1=ret.getExtending(); + if(ret1==null){ + break; + } + ret=(AttributeDef)ret1; + } + } + return ret; + } + private String getModelXmlNamespace(Model model) { String modelNameSpace=model.getXmlns(); if(modelNameSpace==null){