Skip to content

Commit 28836e5

Browse files
authored
Merge pull request #77 from kbss-cvut/development
[0.15.1] Release
2 parents 543a8ae + 1ebb650 commit 28836e5

29 files changed

+594
-82
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# JB4JSON-LD Changelog
22

3+
## 0.15.1 - 2024-12-17
4+
- Ensure datatype is output with numeric values to preserve their type on serialization (Enhancement #66).
5+
- Dependency updates: JOPA 2.2.1, build plugins.
6+
37
## 0.15.0 - 2024-08-26
48
- Support deserializing objects containing only identifier when `ASSUME_TARGET_TYPE` is enabled (Enhancement #69).
59
- Cache deserialization type map (Enhancement #68).

pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>cz.cvut.kbss.jsonld</groupId>
88
<artifactId>jb4jsonld</artifactId>
9-
<version>0.15.0</version>
9+
<version>0.15.1</version>
1010
<name>JB4JSON-LD</name>
1111
<description>Java Binding for JSON-LD allows serialization and deserialization of Java POJOs to/from JSON-LD.
1212
This is the core implementation, which has to be integrated with Jackson, Jersey etc.
@@ -19,12 +19,12 @@
1919
<maven.compiler.source>${java.version}</maven.compiler.source>
2020
<maven.compiler.target>${java.version}</maven.compiler.target>
2121

22-
<cz.cvut.kbss.jopa.version>2.0.4</cz.cvut.kbss.jopa.version>
22+
<cz.cvut.kbss.jopa.version>2.2.1</cz.cvut.kbss.jopa.version>
2323

2424
<org.junit.jupiter.version>5.11.0</org.junit.jupiter.version>
2525
<org.mockito.version>5.12.0</org.mockito.version>
2626
<ch.qos.logback.version>1.5.7</ch.qos.logback.version>
27-
<org.eclipse.rdf4j.version>5.0.2</org.eclipse.rdf4j.version>
27+
<org.eclipse.rdf4j.version>5.0.3</org.eclipse.rdf4j.version>
2828
</properties>
2929

3030
<dependencies>
@@ -128,7 +128,7 @@
128128
</plugin>
129129
<plugin>
130130
<artifactId>maven-javadoc-plugin</artifactId>
131-
<version>3.4.1</version>
131+
<version>3.10.1</version>
132132
<executions>
133133
<execution>
134134
<id>attach-javadocs</id>
@@ -172,19 +172,19 @@
172172
<plugin>
173173
<groupId>org.apache.maven.plugins</groupId>
174174
<artifactId>maven-compiler-plugin</artifactId>
175-
<version>3.8.1</version>
175+
<version>3.13.0</version>
176176
</plugin>
177177
<plugin>
178178
<groupId>org.apache.maven.plugins</groupId>
179179
<artifactId>maven-surefire-plugin</artifactId>
180-
<version>2.22.2</version>
180+
<version>3.5.1</version>
181181
</plugin>
182182

183183
<!-- Code coverage plugin -->
184184
<plugin>
185185
<groupId>org.jacoco</groupId>
186186
<artifactId>jacoco-maven-plugin</artifactId>
187-
<version>0.8.8</version>
187+
<version>0.8.12</version>
188188
<executions>
189189
<execution>
190190
<goals>

src/main/java/cz/cvut/kbss/jsonld/common/BeanAnnotationProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@
4646
import java.util.function.Function;
4747
import java.util.stream.Collectors;
4848

49+
/**
50+
* Utilities for mapping-related tasks.
51+
*/
4952
public class BeanAnnotationProcessor {
5053

5154
private static final String[] EMPTY_ARRAY = new String[0];

src/main/java/cz/cvut/kbss/jsonld/common/BeanClassProcessor.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import java.lang.reflect.Type;
2828
import java.util.*;
2929

30+
/**
31+
* Reflection-related utilities.
32+
*/
3033
public class BeanClassProcessor {
3134

3235
private BeanClassProcessor() {
@@ -82,7 +85,8 @@ public static void setFieldValue(Field field, Object instance, Object value) {
8285
public static <T> T createInstance(Class<T> cls) {
8386
try {
8487
return cls.getDeclaredConstructor().newInstance();
85-
} catch (NoSuchMethodException | InstantiationException | InvocationTargetException | IllegalAccessException e) {
88+
} catch (NoSuchMethodException | InstantiationException | InvocationTargetException |
89+
IllegalAccessException e) {
8690
throw new BeanProcessingException("Class " + cls + " is missing a public no-arg constructor.", e);
8791
}
8892
}
@@ -94,14 +98,10 @@ public static <T> T createInstance(Class<T> cls) {
9498
* @return New collection instance
9599
*/
96100
public static Collection<?> createCollection(CollectionType type) {
97-
switch (type) {
98-
case LIST:
99-
return new ArrayList<>();
100-
case SET:
101-
return new HashSet<>();
102-
default:
103-
throw new IllegalArgumentException("Unsupported collection type " + type);
104-
}
101+
return switch (type) {
102+
case LIST -> new ArrayList<>();
103+
case SET -> new HashSet<>();
104+
};
105105
}
106106

107107
/**
@@ -249,8 +249,9 @@ public static void verifyPropertiesFieldType(Field field) {
249249

250250
/**
251251
* Checks whether the specified class represents an individual reference and not a complex object.
252-
*
252+
* <p>
253253
* Individual references are identifiers or enum constants mapped to individuals.
254+
*
254255
* @param cls Class to check
255256
* @return {@code true} when the type represents an individual, {@code false} otherwise
256257
* @see #isIdentifierType(Class)

src/main/java/cz/cvut/kbss/jsonld/deserialization/util/ClasspathScanner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ protected void processJarFile(URL jarResource, String packageName) {
133133
}
134134
}
135135
} catch (IOException e) {
136-
LOG.error("Unable to scan classes in JAR file " + jarPath, e);
136+
LOG.error("Unable to scan classes in JAR file {}", jarPath, e);
137137
}
138138
}
139139

src/main/java/cz/cvut/kbss/jsonld/serialization/CompactedJsonLdSerializer.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,21 @@
2424
import cz.cvut.kbss.jsonld.serialization.serializer.LiteralValueSerializers;
2525
import cz.cvut.kbss.jsonld.serialization.serializer.ObjectGraphValueSerializers;
2626
import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializers;
27-
import cz.cvut.kbss.jsonld.serialization.serializer.compact.*;
27+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.DefaultValueSerializer;
28+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.IdentifierSerializer;
29+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.IndividualSerializer;
30+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.MultilingualStringSerializer;
31+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.NumberSerializer;
32+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.ObjectPropertyValueSerializer;
33+
import cz.cvut.kbss.jsonld.serialization.serializer.compact.TypesSerializer;
2834
import cz.cvut.kbss.jsonld.serialization.serializer.compact.datetime.TemporalAmountSerializer;
2935
import cz.cvut.kbss.jsonld.serialization.serializer.compact.datetime.TemporalSerializer;
3036
import cz.cvut.kbss.jsonld.serialization.serializer.datetime.DateSerializer;
3137
import cz.cvut.kbss.jsonld.serialization.traversal.ObjectGraphTraverser;
3238
import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContextFactory;
3339

34-
import java.time.*;
40+
import java.time.Duration;
41+
import java.time.Period;
3542
import java.util.Date;
3643

3744
/**
@@ -57,19 +64,14 @@ protected ValueSerializers initSerializers() {
5764
valueSerializers.registerTypesSerializer(new TypesSerializer());
5865
valueSerializers.registerIndividualSerializer(new IndividualSerializer());
5966
final TemporalSerializer ts = new TemporalSerializer();
60-
valueSerializers.registerSerializer(LocalDate.class, ts);
6167
// Register the same temporal serializer for each of the types it supports (needed for key-based map access)
62-
valueSerializers.registerSerializer(LocalDate.class, ts);
63-
valueSerializers.registerSerializer(LocalTime.class, ts);
64-
valueSerializers.registerSerializer(OffsetTime.class, ts);
65-
valueSerializers.registerSerializer(LocalDateTime.class, ts);
66-
valueSerializers.registerSerializer(OffsetDateTime.class, ts);
67-
valueSerializers.registerSerializer(ZonedDateTime.class, ts);
68-
valueSerializers.registerSerializer(Instant.class, ts);
68+
TemporalSerializer.getSupportedTypes().forEach(cls -> valueSerializers.registerSerializer(cls, ts));
6969
valueSerializers.registerSerializer(Date.class, new DateSerializer(ts));
7070
final TemporalAmountSerializer tas = new TemporalAmountSerializer();
7171
valueSerializers.registerSerializer(Duration.class, tas);
7272
valueSerializers.registerSerializer(Period.class, tas);
73+
final NumberSerializer numberSerializer = new NumberSerializer();
74+
NumberSerializer.getSupportedTypes().forEach(cls -> valueSerializers.registerSerializer(cls, numberSerializer));
7375
return valueSerializers;
7476
}
7577

src/main/java/cz/cvut/kbss/jsonld/serialization/ContextBuildingJsonLdSerializer.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,22 @@
3333
import cz.cvut.kbss.jsonld.serialization.serializer.ObjectGraphValueSerializers;
3434
import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializer;
3535
import cz.cvut.kbss.jsonld.serialization.serializer.ValueSerializers;
36-
import cz.cvut.kbss.jsonld.serialization.serializer.context.*;
36+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingDefaultValueSerializer;
37+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingIdentifierSerializer;
38+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingIndividualSerializer;
39+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingMultilingualStringSerializer;
40+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingNumberSerializer;
41+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingObjectPropertyValueSerializer;
42+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingPluralMultilingualStringSerializer;
43+
import cz.cvut.kbss.jsonld.serialization.serializer.context.ContextBuildingTypesSerializer;
3744
import cz.cvut.kbss.jsonld.serialization.serializer.context.datetime.ContextBuildingTemporalAmountSerializer;
3845
import cz.cvut.kbss.jsonld.serialization.serializer.context.datetime.ContextBuildingTemporalSerializer;
3946
import cz.cvut.kbss.jsonld.serialization.serializer.datetime.DateSerializer;
4047
import cz.cvut.kbss.jsonld.serialization.traversal.ObjectGraphTraverser;
4148
import cz.cvut.kbss.jsonld.serialization.traversal.SerializationContextFactory;
4249

43-
import java.time.*;
50+
import java.time.Duration;
51+
import java.time.Period;
4452
import java.util.Collection;
4553
import java.util.Date;
4654
import java.util.Optional;
@@ -69,19 +77,16 @@ protected ValueSerializers initSerializers() {
6977
valueSerializers.registerTypesSerializer(new ContextBuildingTypesSerializer());
7078
valueSerializers.registerIndividualSerializer(new ContextBuildingIndividualSerializer());
7179
final ContextBuildingTemporalSerializer ts = new ContextBuildingTemporalSerializer();
72-
valueSerializers.registerSerializer(LocalDate.class, ts);
7380
// Register the same temporal serializer for each of the types it supports (needed for key-based map access)
74-
valueSerializers.registerSerializer(LocalDate.class, ts);
75-
valueSerializers.registerSerializer(LocalTime.class, ts);
76-
valueSerializers.registerSerializer(OffsetTime.class, ts);
77-
valueSerializers.registerSerializer(LocalDateTime.class, ts);
78-
valueSerializers.registerSerializer(OffsetDateTime.class, ts);
79-
valueSerializers.registerSerializer(ZonedDateTime.class, ts);
80-
valueSerializers.registerSerializer(Instant.class, ts);
81+
ContextBuildingTemporalSerializer.getSupportedTypes()
82+
.forEach(cls -> valueSerializers.registerSerializer(cls, ts));
8183
valueSerializers.registerSerializer(Date.class, new DateSerializer(ts));
8284
final ContextBuildingTemporalAmountSerializer tas = new ContextBuildingTemporalAmountSerializer();
8385
valueSerializers.registerSerializer(Duration.class, tas);
8486
valueSerializers.registerSerializer(Period.class, tas);
87+
final ContextBuildingNumberSerializer ns = new ContextBuildingNumberSerializer();
88+
ContextBuildingNumberSerializer.getSupportedTypes()
89+
.forEach(cls -> valueSerializers.registerSerializer(cls, ns));
8590
return valueSerializers;
8691
}
8792

@@ -114,7 +119,8 @@ private void ensureContextNodeNotPresent(CompositeNode<?> root, JsonNode rootCtx
114119

115120
private JsonLdTreeBuilder initTreeBuilder(ObjectGraphTraverser traverser,
116121
JsonLdContextFactory jsonLdContextFactory) {
117-
final ContextBuildingObjectPropertyValueSerializer opSerializer = new ContextBuildingObjectPropertyValueSerializer(traverser);
122+
final ContextBuildingObjectPropertyValueSerializer opSerializer =
123+
new ContextBuildingObjectPropertyValueSerializer(traverser);
118124
opSerializer.configure(configuration());
119125
return new JsonLdTreeBuilder(new ObjectGraphValueSerializers(serializers, opSerializer), jsonLdContextFactory);
120126
}

src/main/java/cz/cvut/kbss/jsonld/serialization/JsonNodeFactory.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,11 @@ public static LiteralNode<?> createLiteralNode(Object value) {
4343

4444
public static LiteralNode<?> createLiteralNode(String name, Object value) {
4545
final LiteralType type = determineLiteralType(value);
46-
switch (type) {
47-
case BOOLEAN:
48-
return createBooleanLiteralNode(name, (Boolean) value);
49-
case NUMBER:
50-
return createNumericLiteralNode(name, (Number) value);
51-
default:
52-
return createStringLiteralNode(name, value.toString());
53-
}
46+
return switch (type) {
47+
case BOOLEAN -> createBooleanLiteralNode(name, (Boolean) value);
48+
case NUMBER -> createNumericLiteralNode(name, (Number) value);
49+
default -> createStringLiteralNode(name, value.toString());
50+
};
5451
}
5552

5653
private static LiteralType determineLiteralType(Object value) {
@@ -84,14 +81,10 @@ public static StringLiteralNode createStringLiteralNode(String name, String valu
8481
*/
8582
public static CollectionNode<?> createCollectionNode(String name, Collection<?> value) {
8683
final CollectionType type = determineCollectionType(value);
87-
switch (type) {
88-
case LIST:
89-
return new ListNode(name);
90-
case SET:
91-
return createSetNode(name);
92-
default:
93-
throw new IllegalArgumentException("Unsupported collection type " + type);
94-
}
84+
return switch (type) {
85+
case LIST -> new ListNode(name);
86+
case SET -> createSetNode(name);
87+
};
9588
}
9689

9790
private static CollectionType determineCollectionType(Collection<?> collection) {

src/main/java/cz/cvut/kbss/jsonld/serialization/model/CollectionNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919

2020
import java.util.Collection;
2121

22+
/**
23+
* JSON node representing a collection.
24+
*
25+
* @param <T> Node type
26+
*/
2227
public abstract class CollectionNode<T extends Collection<JsonNode>> extends CompositeNode<T> {
2328

2429
CollectionNode() {

src/main/java/cz/cvut/kbss/jsonld/serialization/serializer/SerializerUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public static ObjectNode createTypedTermDefinition(String term, String id, Strin
7070
* @param type Value type to use
7171
* @return Resulting JSON node
7272
*/
73-
public static JsonNode createdTypedValueNode(String term, String value, String type) {
73+
public static JsonNode createdTypedValueNode(String term, Object value, String type) {
7474
final ObjectNode node = JsonNodeFactory.createObjectNode(term);
7575
node.addItem(JsonNodeFactory.createLiteralNode(JsonLd.TYPE, type));
7676
node.addItem(JsonNodeFactory.createLiteralNode(JsonLd.VALUE, value));

0 commit comments

Comments
 (0)