Skip to content

Commit d25d285

Browse files
committed
feat: Replace XML with JSON serialization
1 parent 751c2d5 commit d25d285

File tree

56 files changed

+1806
-267
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1806
-267
lines changed

pom.xml

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
</properties>
6868

6969
<dependencies>
70+
<!-- scope: compile -->
7071
<dependency>
7172
<groupId>com.fasterxml.jackson.core</groupId>
7273
<artifactId>jackson-annotations</artifactId>
@@ -79,11 +80,6 @@
7980
<groupId>com.fasterxml.jackson.core</groupId>
8081
<artifactId>jackson-databind</artifactId>
8182
</dependency>
82-
<dependency>
83-
<groupId>com.fasterxml.jackson.dataformat</groupId>
84-
<artifactId>jackson-dataformat-yaml</artifactId>
85-
</dependency>
86-
<!-- scope: compile -->
8783
<dependency>
8884
<groupId>jakarta.xml.bind</groupId>
8985
<artifactId>jakarta.xml.bind-api</artifactId>
@@ -101,11 +97,6 @@
10197
<artifactId>log4j-core</artifactId>
10298
</dependency>
10399
<!-- scope: test -->
104-
<dependency>
105-
<groupId>org.glassfish.jaxb</groupId>
106-
<artifactId>jaxb-runtime</artifactId>
107-
<scope>test</scope>
108-
</dependency>
109100
<dependency>
110101
<groupId>org.junit.jupiter</groupId>
111102
<artifactId>junit-jupiter</artifactId>
@@ -177,6 +168,34 @@
177168
</compilerArgs>
178169
</configuration>
179170
</plugin>
171+
<!-- Generate JSON schema from Java classes -->
172+
<plugin>
173+
<groupId>com.github.victools</groupId>
174+
<artifactId>jsonschema-maven-plugin</artifactId>
175+
<version>4.38.0</version>
176+
<configuration>
177+
<classNames>de.rub.nds.modifiablevariable.ModifiableVariable</classNames>
178+
<schemaFilePath>src/main/resources</schemaFilePath>
179+
<schemaFileName>{0}.schema.json</schemaFileName>
180+
<schemaVersion>DRAFT_2020_12</schemaVersion>
181+
<modules>
182+
<module>
183+
<name>Jackson</name>
184+
<options>
185+
<option>RESPECT_JSONPROPERTY_REQUIRED</option>
186+
<option>ALWAYS_REF_SUBTYPES</option>
187+
</options>
188+
</module>
189+
</modules>
190+
</configuration>
191+
<executions>
192+
<execution>
193+
<goals>
194+
<goal>generate</goal>
195+
</goals>
196+
</execution>
197+
</executions>
198+
</plugin>
180199
<!-- Execute unit tests -->
181200
<plugin>
182201
<groupId>org.apache.maven.plugins</groupId>

src/main/java/de/rub/nds/modifiablevariable/ModifiableVariable.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@
77
*/
88
package de.rub.nds.modifiablevariable;
99

10-
import com.fasterxml.jackson.annotation.JsonTypeInfo;
10+
import com.fasterxml.jackson.annotation.*;
11+
import de.rub.nds.modifiablevariable.biginteger.ModifiableBigInteger;
12+
import de.rub.nds.modifiablevariable.bool.ModifiableBoolean;
13+
import de.rub.nds.modifiablevariable.bytearray.ModifiableByteArray;
14+
import de.rub.nds.modifiablevariable.integer.ModifiableInteger;
15+
import de.rub.nds.modifiablevariable.length.ModifiableLengthField;
16+
import de.rub.nds.modifiablevariable.longint.ModifiableLong;
17+
import de.rub.nds.modifiablevariable.singlebyte.ModifiableByte;
18+
import de.rub.nds.modifiablevariable.string.ModifiableString;
1119
import jakarta.xml.bind.annotation.*;
1220
import java.io.Serializable;
1321
import java.util.LinkedList;
@@ -32,15 +40,32 @@
3240
*/
3341
@XmlTransient
3442
@XmlAccessorType(XmlAccessType.FIELD)
35-
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
43+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type")
44+
@JsonSubTypes({
45+
@JsonSubTypes.Type(name = "BigInteger", value = ModifiableBigInteger.class),
46+
@JsonSubTypes.Type(name = "Boolean", value = ModifiableBoolean.class),
47+
@JsonSubTypes.Type(name = "ByteArray", value = ModifiableByteArray.class),
48+
@JsonSubTypes.Type(name = "Integer", value = ModifiableInteger.class),
49+
@JsonSubTypes.Type(name = "LengthField", value = ModifiableLengthField.class),
50+
@JsonSubTypes.Type(name = "Long", value = ModifiableLong.class),
51+
@JsonSubTypes.Type(name = "Byte", value = ModifiableByte.class),
52+
@JsonSubTypes.Type(name = "String", value = ModifiableString.class),
53+
})
54+
@JsonAutoDetect(
55+
fieldVisibility = JsonAutoDetect.Visibility.ANY,
56+
getterVisibility = JsonAutoDetect.Visibility.NONE,
57+
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
58+
setterVisibility = JsonAutoDetect.Visibility.NONE)
3659
public abstract class ModifiableVariable<E> implements Serializable {
3760

3861
/** The list of modifications that will be applied to the original value when accessed */
3962
@XmlElementWrapper
4063
@XmlAnyElement(lax = true)
64+
@JsonInclude(JsonInclude.Include.NON_EMPTY)
4165
private LinkedList<VariableModification<E>> modifications;
4266

4367
/** The expected value for assertion validation */
68+
@JsonInclude(JsonInclude.Include.NON_NULL)
4469
protected E assertEquals;
4570

4671
/** Default constructor that creates an empty modifiable variable. */

src/main/java/de/rub/nds/modifiablevariable/VariableModification.java

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,20 @@
99

1010
import static de.rub.nds.modifiablevariable.util.StringUtil.backslashEscapeString;
1111

12+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
13+
import com.fasterxml.jackson.annotation.JsonSubTypes;
1214
import com.fasterxml.jackson.annotation.JsonTypeInfo;
15+
import de.rub.nds.modifiablevariable.biginteger.*;
16+
import de.rub.nds.modifiablevariable.bool.BooleanExplicitValueModification;
17+
import de.rub.nds.modifiablevariable.bool.BooleanToggleModification;
18+
import de.rub.nds.modifiablevariable.bytearray.*;
19+
import de.rub.nds.modifiablevariable.integer.*;
20+
import de.rub.nds.modifiablevariable.longint.*;
21+
import de.rub.nds.modifiablevariable.singlebyte.ByteAddModification;
22+
import de.rub.nds.modifiablevariable.singlebyte.ByteExplicitValueModification;
23+
import de.rub.nds.modifiablevariable.singlebyte.ByteSubtractModification;
24+
import de.rub.nds.modifiablevariable.singlebyte.ByteXorModification;
25+
import de.rub.nds.modifiablevariable.string.*;
1326
import de.rub.nds.modifiablevariable.util.ArrayConverter;
1427
import jakarta.xml.bind.annotation.XmlAccessType;
1528
import jakarta.xml.bind.annotation.XmlAccessorType;
@@ -46,7 +59,72 @@
4659
*/
4760
@XmlTransient
4861
@XmlAccessorType(XmlAccessType.FIELD)
49-
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
62+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type")
63+
@JsonSubTypes({
64+
@JsonSubTypes.Type(name = "BigIntegerAdd", value = BigIntegerAddModification.class),
65+
@JsonSubTypes.Type(
66+
name = "BigIntegerExplicitValue",
67+
value = BigIntegerExplicitValueModification.class),
68+
@JsonSubTypes.Type(name = "BigIntegerMultiply", value = BigIntegerMultiplyModification.class),
69+
@JsonSubTypes.Type(name = "BigIntegerShiftLeft", value = BigIntegerShiftLeftModification.class),
70+
@JsonSubTypes.Type(
71+
name = "BigIntegerShiftRight",
72+
value = BigIntegerShiftRightModification.class),
73+
@JsonSubTypes.Type(name = "BigIntegerSubtract", value = BigIntegerSubtractModification.class),
74+
@JsonSubTypes.Type(name = "BigIntegerXor", value = BigIntegerXorModification.class),
75+
@JsonSubTypes.Type(
76+
name = "BooleanExplicitValue",
77+
value = BooleanExplicitValueModification.class),
78+
@JsonSubTypes.Type(name = "BooleanToggle", value = BooleanToggleModification.class),
79+
@JsonSubTypes.Type(
80+
name = "ByteArrayAppendValue",
81+
value = ByteArrayAppendValueModification.class),
82+
@JsonSubTypes.Type(name = "ByteArrayDelete", value = ByteArrayDeleteModification.class),
83+
@JsonSubTypes.Type(name = "ByteArrayDuplicate", value = ByteArrayDuplicateModification.class),
84+
@JsonSubTypes.Type(
85+
name = "ByteArrayExplicitValue",
86+
value = ByteArrayExplicitValueModification.class),
87+
@JsonSubTypes.Type(
88+
name = "ByteArrayInsertValue",
89+
value = ByteArrayInsertValueModification.class),
90+
@JsonSubTypes.Type(
91+
name = "ByteArrayPrependValue",
92+
value = ByteArrayPrependValueModification.class),
93+
@JsonSubTypes.Type(name = "ByteArrayShuffle", value = ByteArrayShuffleModification.class),
94+
@JsonSubTypes.Type(name = "ByteArrayXor", value = ByteArrayXorModification.class),
95+
@JsonSubTypes.Type(name = "IntegerAdd", value = IntegerAddModification.class),
96+
@JsonSubTypes.Type(
97+
name = "IntegerExplicitValue",
98+
value = IntegerExplicitValueModification.class),
99+
@JsonSubTypes.Type(name = "IntegerMultiply", value = IntegerMultiplyModification.class),
100+
@JsonSubTypes.Type(name = "IntegerShiftLeft", value = IntegerShiftLeftModification.class),
101+
@JsonSubTypes.Type(name = "IntegerShiftRight", value = IntegerShiftRightModification.class),
102+
@JsonSubTypes.Type(name = "IntegerSubtract", value = IntegerSubtractModification.class),
103+
@JsonSubTypes.Type(name = "IntegerSwapEndian", value = IntegerSwapEndianModification.class),
104+
@JsonSubTypes.Type(name = "IntegerXor", value = IntegerXorModification.class),
105+
@JsonSubTypes.Type(name = "LongAdd", value = LongAddModification.class),
106+
@JsonSubTypes.Type(name = "LongExplicitValue", value = LongExplicitValueModification.class),
107+
@JsonSubTypes.Type(name = "LongMultiply", value = LongMultiplyModification.class),
108+
@JsonSubTypes.Type(name = "LongShiftLeft", value = LongShiftLeftModification.class),
109+
@JsonSubTypes.Type(name = "LongShiftRight", value = LongShiftRightModification.class),
110+
@JsonSubTypes.Type(name = "LongSubtract", value = LongSubtractModification.class),
111+
@JsonSubTypes.Type(name = "LongSwapEndian", value = LongSwapEndianModification.class),
112+
@JsonSubTypes.Type(name = "LongXor", value = LongXorModification.class),
113+
@JsonSubTypes.Type(name = "ByteAdd", value = ByteAddModification.class),
114+
@JsonSubTypes.Type(name = "ByteExplicitValue", value = ByteExplicitValueModification.class),
115+
@JsonSubTypes.Type(name = "ByteSubtract", value = ByteSubtractModification.class),
116+
@JsonSubTypes.Type(name = "ByteXor", value = ByteXorModification.class),
117+
@JsonSubTypes.Type(name = "StringAppendValue", value = StringAppendValueModification.class),
118+
@JsonSubTypes.Type(name = "StringDelete", value = StringDeleteModification.class),
119+
@JsonSubTypes.Type(name = "StringExplicitValue", value = StringExplicitValueModification.class),
120+
@JsonSubTypes.Type(name = "StringInsertValue", value = StringInsertValueModification.class),
121+
@JsonSubTypes.Type(name = "StringPrependValue", value = StringPrependValueModification.class),
122+
})
123+
@JsonAutoDetect(
124+
fieldVisibility = JsonAutoDetect.Visibility.ANY,
125+
getterVisibility = JsonAutoDetect.Visibility.NONE,
126+
isGetterVisibility = JsonAutoDetect.Visibility.NONE,
127+
setterVisibility = JsonAutoDetect.Visibility.NONE)
50128
public abstract class VariableModification<E> implements Serializable {
51129

52130
/** Logger for debugging modification applications */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerAddModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -23,6 +24,7 @@
2324
public class BigIntegerAddModification extends VariableModification<BigInteger> {
2425

2526
/** The value to add to the original BigInteger */
27+
@JsonProperty(required = true)
2628
private BigInteger summand;
2729

2830
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerExplicitValueModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -25,6 +26,7 @@
2526
public class BigIntegerExplicitValueModification extends VariableModification<BigInteger> {
2627

2728
/** The explicit value that will replace the original value */
29+
@JsonProperty(required = true)
2830
private BigInteger explicitValue;
2931

3032
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerMultiplyModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -24,6 +25,7 @@
2425
public class BigIntegerMultiplyModification extends VariableModification<BigInteger> {
2526

2627
/** The factor to multiply by */
28+
@JsonProperty(required = true)
2729
private BigInteger factor;
2830

2931
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerShiftLeftModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -25,6 +26,7 @@
2526
public class BigIntegerShiftLeftModification extends VariableModification<BigInteger> {
2627

2728
/** The number of bits to shift left */
29+
@JsonProperty(required = true)
2830
private int shift;
2931

3032
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerShiftRightModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -25,6 +26,7 @@
2526
public class BigIntegerShiftRightModification extends VariableModification<BigInteger> {
2627

2728
/** The number of bit positions to shift right */
29+
@JsonProperty(required = true)
2830
private int shift;
2931

3032
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerSubtractModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -24,6 +25,7 @@
2425
public class BigIntegerSubtractModification extends VariableModification<BigInteger> {
2526

2627
/** The value to subtract from the original BigInteger */
28+
@JsonProperty(required = true)
2729
private BigInteger subtrahend;
2830

2931
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerXorModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213
import java.math.BigInteger;
@@ -27,6 +28,7 @@
2728
public class BigIntegerXorModification extends VariableModification<BigInteger> {
2829

2930
/** The BigInteger value to XOR with the original value */
31+
@JsonProperty(required = true)
3032
private BigInteger xor;
3133

3234
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/biginteger/ModifiableBigInteger.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.biginteger;
99

10+
import com.fasterxml.jackson.annotation.JsonInclude;
1011
import de.rub.nds.modifiablevariable.ModifiableVariable;
1112
import de.rub.nds.modifiablevariable.util.ArrayConverter;
1213
import jakarta.xml.bind.annotation.XmlRootElement;
@@ -31,6 +32,7 @@
3132
public class ModifiableBigInteger extends ModifiableVariable<BigInteger> {
3233

3334
/** The original BigInteger value before any modifications */
35+
@JsonInclude(JsonInclude.Include.NON_NULL)
3436
private BigInteger originalValue;
3537

3638
/** Default constructor that creates an empty ModifiableBigInteger with no original value. */

src/main/java/de/rub/nds/modifiablevariable/bool/BooleanExplicitValueModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.bool;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213

@@ -24,6 +25,7 @@
2425
public class BooleanExplicitValueModification extends VariableModification<Boolean> {
2526

2627
/** The explicit boolean value that will replace the original value */
28+
@JsonProperty(required = true)
2729
private boolean explicitValue;
2830

2931
/** Default constructor for serialization. */

src/main/java/de/rub/nds/modifiablevariable/bool/ModifiableBoolean.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package de.rub.nds.modifiablevariable.bool;
99

10+
import com.fasterxml.jackson.annotation.JsonInclude;
1011
import de.rub.nds.modifiablevariable.ModifiableVariable;
1112
import jakarta.xml.bind.annotation.XmlRootElement;
1213

@@ -24,6 +25,7 @@
2425
public class ModifiableBoolean extends ModifiableVariable<Boolean> {
2526

2627
/** The original Boolean value before any modifications */
28+
@JsonInclude(JsonInclude.Include.NON_NULL)
2729
private Boolean originalValue;
2830

2931
/** Default constructor that creates an empty ModifiableBoolean with no original value. */

src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayAppendValueModification.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77
*/
88
package de.rub.nds.modifiablevariable.bytearray;
99

10+
import com.fasterxml.jackson.annotation.JsonProperty;
1011
import de.rub.nds.modifiablevariable.VariableModification;
1112
import de.rub.nds.modifiablevariable.util.ArrayConverter;
12-
import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter;
1313
import jakarta.xml.bind.annotation.XmlRootElement;
14-
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
1514
import java.util.Arrays;
1615
import java.util.Objects;
1716

@@ -31,7 +30,7 @@
3130
public class ByteArrayAppendValueModification extends VariableModification<byte[]> {
3231

3332
/** The bytes to append to the end of the original byte array */
34-
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
33+
@JsonProperty(required = true)
3534
private byte[] bytesToAppend;
3635

3736
/** Default constructor for serialization. */

0 commit comments

Comments
 (0)