Skip to content

Commit 41fa3a7

Browse files
authored
Merge pull request #236 from tls-attacker/feat/json-serialization
feat: Improve JSON serialization with ModifiableVariable
2 parents 9b03c75 + 5da74e6 commit 41fa3a7

File tree

61 files changed

+2331
-453
lines changed

Some content is hidden

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

61 files changed

+2331
-453
lines changed

README.md

Lines changed: 182 additions & 153 deletions
Large diffs are not rendered by default.

pom.xml

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@
6767
</properties>
6868

6969
<dependencies>
70+
<!-- scope: compile -->
71+
<dependency>
72+
<groupId>com.fasterxml</groupId>
73+
<artifactId>classmate</artifactId>
74+
</dependency>
7075
<dependency>
7176
<groupId>com.fasterxml.jackson.core</groupId>
7277
<artifactId>jackson-annotations</artifactId>
@@ -80,10 +85,13 @@
8085
<artifactId>jackson-databind</artifactId>
8186
</dependency>
8287
<dependency>
83-
<groupId>com.fasterxml.jackson.dataformat</groupId>
84-
<artifactId>jackson-dataformat-yaml</artifactId>
88+
<groupId>com.github.victools</groupId>
89+
<artifactId>jsonschema-generator</artifactId>
90+
</dependency>
91+
<dependency>
92+
<groupId>com.github.victools</groupId>
93+
<artifactId>jsonschema-module-jackson</artifactId>
8594
</dependency>
86-
<!-- scope: compile -->
8795
<dependency>
8896
<groupId>jakarta.xml.bind</groupId>
8997
<artifactId>jakarta.xml.bind-api</artifactId>
@@ -100,17 +108,16 @@
100108
<groupId>org.apache.logging.log4j</groupId>
101109
<artifactId>log4j-core</artifactId>
102110
</dependency>
111+
<dependency>
112+
<groupId>org.reflections</groupId>
113+
<artifactId>reflections</artifactId>
114+
</dependency>
103115
<dependency>
104116
<groupId>com.github.spotbugs</groupId>
105117
<artifactId>spotbugs-annotations</artifactId>
106118
<scope>provided</scope>
107119
</dependency>
108120
<!-- scope: test -->
109-
<dependency>
110-
<groupId>org.glassfish.jaxb</groupId>
111-
<artifactId>jaxb-runtime</artifactId>
112-
<scope>test</scope>
113-
</dependency>
114121
<dependency>
115122
<groupId>org.junit.jupiter</groupId>
116123
<artifactId>junit-jupiter</artifactId>
@@ -211,6 +218,28 @@
211218
<skipTests>${skip.surefire.tests}</skipTests>
212219
</configuration>
213220
</plugin>
221+
<!-- Generate JSON schema from Java classes -->
222+
<plugin>
223+
<groupId>org.codehaus.mojo</groupId>
224+
<artifactId>exec-maven-plugin</artifactId>
225+
<executions>
226+
<execution>
227+
<id>generate-json-schema</id>
228+
<goals>
229+
<goal>java</goal>
230+
</goals>
231+
<phase>prepare-package</phase>
232+
<configuration>
233+
<mainClass>de.rub.nds.modifiablevariable.json.JsonSchemaCliGenerator</mainClass>
234+
<arguments>
235+
<argument>de.rub.nds.modifiablevariable.ModifiableVariable</argument>
236+
<argument>src/main/resources/ModifiableVariable.schema.json</argument>
237+
<argument>de.rub.nds.modifiablevariable.json.ModifiableVariableModule</argument>
238+
</arguments>
239+
</configuration>
240+
</execution>
241+
</executions>
242+
</plugin>
214243
<!-- Build jar file -->
215244
<plugin>
216245
<groupId>org.apache.maven.plugins</groupId>

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

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

10-
import com.fasterxml.jackson.annotation.JsonTypeInfo;
10+
import com.fasterxml.jackson.annotation.*;
1111
import jakarta.xml.bind.annotation.*;
1212
import java.io.Serializable;
1313
import java.util.LinkedList;
@@ -32,15 +32,20 @@
3232
*/
3333
@XmlTransient
3434
@XmlAccessorType(XmlAccessType.FIELD)
35-
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
35+
@JsonTypeInfo(
36+
use = JsonTypeInfo.Id.SIMPLE_NAME,
37+
include = JsonTypeInfo.As.PROPERTY,
38+
property = "@type")
3639
public abstract class ModifiableVariable<E> implements Serializable {
3740

3841
/** The list of modifications that will be applied to the original value when accessed */
3942
@XmlElementWrapper
4043
@XmlAnyElement(lax = true)
44+
@JsonInclude(JsonInclude.Include.NON_EMPTY)
4145
private LinkedList<VariableModification<E>> modifications;
4246

4347
/** The expected value for assertion validation */
48+
@JsonInclude(JsonInclude.Include.NON_NULL)
4449
protected E assertEquals;
4550

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

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@
4646
*/
4747
@XmlTransient
4848
@XmlAccessorType(XmlAccessType.FIELD)
49-
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
49+
@JsonTypeInfo(
50+
use = JsonTypeInfo.Id.SIMPLE_NAME,
51+
include = JsonTypeInfo.As.PROPERTY,
52+
property = "@type")
5053
public abstract class VariableModification<E> implements Serializable {
5154

5255
/** 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. */

0 commit comments

Comments
 (0)