Skip to content

Commit 24e9ba6

Browse files
committed
fixed unknown elements in generic lists
1 parent 40a5c36 commit 24e9ba6

File tree

10 files changed

+121
-36
lines changed

10 files changed

+121
-36
lines changed

annotationprocessortesting-kt/src/test/java/com/tickaroo/tikxml/regressiontests/paths/PolymorphicPathTest.java

+22
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,26 @@ public void emptyList() throws IOException, ParseException {
141141
CompanyDataClass company2 = xml.read(TestUtils.sourceFrom(xmlStr), CompanyDataClass.class);
142142
Assert.assertEquals(company, company2);
143143
}
144+
145+
@Test
146+
public void unkownElements() throws IOException, ParseException {
147+
TikXml xml = new TikXml.Builder().exceptionOnUnreadXml(false).build();
148+
149+
CompanyDataClass company =
150+
xml.read(TestUtils.sourceForFile("regression/polymprphic_list_with_unknown_element.xml"), CompanyDataClass.class);
151+
152+
Assert.assertEquals(3, company.getPersons().size());
153+
154+
// Writing xml test
155+
156+
Buffer buffer = new Buffer();
157+
xml.write(buffer, company);
158+
159+
String xmlStr =
160+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><company><department><persons><boss><name>Boss</name><id>1</id></boss><employee><name>Employee</name><id>2</id></employee><person><id>3</id></person></persons></department></company>";
161+
Assert.assertEquals(xmlStr, TestUtils.bufferToString(buffer));
162+
163+
CompanyDataClass company2 = xml.read(TestUtils.sourceFrom(xmlStr), CompanyDataClass.class);
164+
Assert.assertEquals(company, company2);
165+
}
144166
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<company>
2+
<department>
3+
<persons>
4+
<boss>
5+
<id>1</id>
6+
<name>Boss</name>
7+
</boss>
8+
9+
<employee>
10+
<id>2</id>
11+
<name>Employee</name>
12+
</employee>
13+
14+
<!-- unknown elements -->
15+
<unknown>
16+
17+
</unknown>
18+
19+
<unknown2 test=""/>
20+
21+
<person>
22+
<id>3</id>
23+
</person>
24+
</persons>
25+
</department>
26+
</company>

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ buildscript {
88
}
99

1010
dependencies {
11-
classpath "com.android.tools.build:gradle:3.6.1"
11+
classpath "com.android.tools.build:gradle:4.0.0"
1212
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}"
1313
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.8.0'
1414
}

buildSrc/src/main/java/Dependencies.kt

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
object Versions {
2-
const val autoService = "1.0-rc6"
3-
const val autoValue = "1.7.1"
4-
const val junit = "4.12"
2+
const val autoService = "1.0-rc7"
3+
const val autoValue = "1.7.3"
4+
const val junit = "4.13"
55
const val kotlin = "1.3.72"
6-
const val javaPoet = "1.12.1"
6+
const val javaPoet = "1.13.0"
77
const val compileTesting = "0.18"
8-
const val truth = "1.0"
8+
const val truth = "1.0.1"
99
const val jackson = "2.11.0"
1010
const val simpleXml = "2.7.1"
1111
const val caliper = "1.2.1"
1212
const val okio = "2.6.0"
13-
const val assertj = "3.14.0"
14-
const val guava = "28.1-jre"
15-
const val mockito = "3.1.0"
16-
const val retrofit = "2.8.1"
17-
const val mockWebserver = "4.2.2"
18-
const val incremental = "0.2"
13+
const val assertj = "3.16.1"
14+
const val guava = "29.0-jre"
15+
const val mockito = "3.3.3"
16+
const val retrofit = "2.9.0"
17+
const val mockWebserver = "4.7.2"
18+
const val incremental = "0.3"
1919
}
2020

2121
object Deps {

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryErro
1818
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
1919
# org.gradle.parallel=true
2020

21-
VERSION_NAME=0.9.0_9-SNAPSHOT
21+
VERSION_NAME=0.9.0_10-SNAPSHOT
2222
GROUP=com.tickaroo.tikxml
2323

2424
POM_DESCRIPTION=A modern XML API for Android and Java

gradle/wrapper/gradle-wrapper.jar

4.39 KB
Binary file not shown.
+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
#Wed Nov 07 20:06:37 CET 2018
21
distributionBase=GRADLE_USER_HOME
32
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4-all.zip

gradlew

+33-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
#!/usr/bin/env sh
22

3+
#
4+
# Copyright 2015 the original author or authors.
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# https://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#
18+
319
##############################################################################
420
##
521
## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
2844
APP_BASE_NAME=`basename "$0"`
2945

3046
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31-
DEFAULT_JVM_OPTS=""
47+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
3248

3349
# Use the maximum available, or set MAX_FD != -1 to use that value.
3450
MAX_FD="maximum"
@@ -66,6 +82,7 @@ esac
6682

6783
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
6884

85+
6986
# Determine the Java command to use to start the JVM.
7087
if [ -n "$JAVA_HOME" ] ; then
7188
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -109,10 +126,11 @@ if $darwin; then
109126
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110127
fi
111128

112-
# For Cygwin, switch paths to Windows format before running java
113-
if $cygwin ; then
129+
# For Cygwin or MSYS, switch paths to Windows format before running java
130+
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
114131
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115132
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133+
116134
JAVACMD=`cygpath --unix "$JAVACMD"`
117135

118136
# We build the pattern for arguments to be converted via cygpath
@@ -138,19 +156,19 @@ if $cygwin ; then
138156
else
139157
eval `echo args$i`="\"$arg\""
140158
fi
141-
i=$((i+1))
159+
i=`expr $i + 1`
142160
done
143161
case $i in
144-
(0) set -- ;;
145-
(1) set -- "$args0" ;;
146-
(2) set -- "$args0" "$args1" ;;
147-
(3) set -- "$args0" "$args1" "$args2" ;;
148-
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149-
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150-
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151-
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152-
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153-
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
162+
0) set -- ;;
163+
1) set -- "$args0" ;;
164+
2) set -- "$args0" "$args1" ;;
165+
3) set -- "$args0" "$args1" "$args2" ;;
166+
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167+
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168+
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169+
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170+
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171+
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154172
esac
155173
fi
156174

@@ -159,14 +177,9 @@ save () {
159177
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160178
echo " "
161179
}
162-
APP_ARGS=$(save "$@")
180+
APP_ARGS=`save "$@"`
163181

164182
# Collect all arguments for the java command, following the shell quoting and substitution rules
165183
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166184

167-
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168-
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169-
cd "$(dirname "$0")"
170-
fi
171-
172185
exec "$JAVACMD" "$@"

gradlew.bat

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
@rem
2+
@rem Copyright 2015 the original author or authors.
3+
@rem
4+
@rem Licensed under the Apache License, Version 2.0 (the "License");
5+
@rem you may not use this file except in compliance with the License.
6+
@rem You may obtain a copy of the License at
7+
@rem
8+
@rem https://www.apache.org/licenses/LICENSE-2.0
9+
@rem
10+
@rem Unless required by applicable law or agreed to in writing, software
11+
@rem distributed under the License is distributed on an "AS IS" BASIS,
12+
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
@rem See the License for the specific language governing permissions and
14+
@rem limitations under the License.
15+
@rem
16+
117
@if "%DEBUG%" == "" @echo off
218
@rem ##########################################################################
319
@rem
@@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=.
1329
set APP_BASE_NAME=%~n0
1430
set APP_HOME=%DIRNAME%
1531

32+
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
33+
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34+
1635
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17-
set DEFAULT_JVM_OPTS=
36+
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
1837

1938
@rem Find java.exe
2039
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -65,6 +84,7 @@ set CMD_LINE_ARGS=%*
6584

6685
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
6786

87+
6888
@rem Execute Gradle
6989
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
7090

processor/src/main/java/com/tickaroo/tikxml/processor/generator/GenericAdapterCodeGenerator.kt

+5
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,13 @@ class GenericAdapterCodeGenerator(
9292
"throw new \$T(\"Could not map the xml element with the tag name <\" + elementName + \"> at path '\" + reader.getPath()+\"' to java class. Have you annotated such a field in your java class to map this xml attribute? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build().\")",
9393
IOException::class.java)
9494
.nextControlFlow("else")
95+
.beginControlFlow("while (${CodeGeneratorHelper.readerParam}.hasAttribute())")
96+
.addStatement("${CodeGeneratorHelper.readerParam}.skipAttribute()")
97+
.endControlFlow()
98+
.beginControlFlow("if (${CodeGeneratorHelper.readerParam}.hasElement())")
9599
.addStatement("${CodeGeneratorHelper.readerParam}.beginElement()")
96100
.addStatement("${CodeGeneratorHelper.readerParam}.skipRemainingElement()")
101+
.endControlFlow()
97102
.addStatement("${CodeGeneratorHelper.readerParam}.endElement()")
98103
.endControlFlow()
99104
.build()

0 commit comments

Comments
 (0)