Skip to content

Commit e240ddc

Browse files
Adds further compatibility with AASX Package Explorer & fine-tunes warning messages (#278)
* Adds further compatibility with AASX Package Explorer & fine-tunes warning messages Signed-off-by: Frank Schnicke <[email protected]> * Adresses review remarks Signed-off-by: Frank Schnicke <[email protected]> --------- Signed-off-by: Frank Schnicke <[email protected]>
1 parent 95172c5 commit e240ddc

File tree

6 files changed

+68
-49
lines changed

6 files changed

+68
-49
lines changed

dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/internal/deserialization/DataElementsDeserializer.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
import java.io.IOException;
3030
import java.util.ArrayList;
31-
import java.util.Collections;
3231
import java.util.Iterator;
3332
import java.util.List;
3433

@@ -47,7 +46,7 @@ public DataElementsDeserializer() {
4746
public List<DataElement> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
4847
TreeNode treeNode = DeserializationHelper.getRootTreeNode(parser);
4948
if (treeNode instanceof TextNode) {
50-
return Collections.emptyList();
49+
return new ArrayList<>();
5150
}
5251

5352
ObjectNode node = (ObjectNode) treeNode;

dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/internal/deserialization/NoEntryWrapperListDeserializer.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import java.io.IOException;
1919
import java.util.ArrayList;
20-
import java.util.Collections;
2120
import java.util.List;
2221

2322
import org.slf4j.Logger;
@@ -30,6 +29,7 @@
3029
import com.fasterxml.jackson.databind.JsonNode;
3130
import com.fasterxml.jackson.databind.node.ArrayNode;
3231
import com.fasterxml.jackson.databind.node.ObjectNode;
32+
import com.google.common.collect.Lists;
3333

3434
/**
3535
* Custom deserializer for lists without individual list entry wrappers for parametrized classes.
@@ -57,7 +57,7 @@ public List<T> deserialize(JsonParser parser, DeserializationContext ctxt) throw
5757
return createEntriesFromArrayNode((ArrayNode) langStringNode, parser);
5858
}
5959
} catch (ClassCastException e) {
60-
logger.info("Found empty list items (e.g., '<preferredName />' of dataSpecificationIec61360) in XML. This is most likely an error.");
60+
logger.info("Found empty list item (e.g., '<preferredName />' of dataSpecificationIec61360) in XML. This is most likely an error.");
6161
return new ArrayList<T>();
6262
}
6363
}
@@ -73,6 +73,6 @@ private List<T> createEntriesFromArrayNode(ArrayNode langStringsNode, JsonParser
7373

7474
private List<T> createEntriesFromObjectNode(JsonNode langStringNode, JsonParser parser) throws IOException {
7575
T entry = nodeDeserializer.readValue(langStringNode, parser);
76-
return Collections.singletonList(entry);
76+
return Lists.newArrayList(entry);
7777
}
7878
}

dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/internal/deserialization/OperationVariableDeserializer.java

+25-16
Original file line numberDiff line numberDiff line change
@@ -16,37 +16,46 @@
1616
*/
1717
package org.eclipse.digitaltwin.aas4j.v3.dataformat.xml.internal.deserialization;
1818

19+
import java.io.IOException;
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
23+
import org.eclipse.digitaltwin.aas4j.v3.model.OperationVariable;
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
26+
1927
import com.fasterxml.jackson.core.JsonParser;
2028
import com.fasterxml.jackson.core.JsonProcessingException;
2129
import com.fasterxml.jackson.databind.DeserializationContext;
2230
import com.fasterxml.jackson.databind.JsonDeserializer;
2331
import com.fasterxml.jackson.databind.JsonNode;
2432
import com.fasterxml.jackson.databind.node.ArrayNode;
2533
import com.fasterxml.jackson.databind.node.ObjectNode;
26-
import org.eclipse.digitaltwin.aas4j.v3.model.OperationVariable;
27-
28-
import java.io.IOException;
29-
import java.util.Collections;
30-
import java.util.List;
34+
import com.google.common.collect.Lists;
3135

3236

3337
public class OperationVariableDeserializer extends JsonDeserializer<List<OperationVariable>> {
38+
private static Logger logger = LoggerFactory.getLogger(OperationVariableDeserializer.class);
3439

3540
@Override
3641
public List<OperationVariable> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
37-
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
42+
try {
43+
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
3844

39-
if (!node.has("operationVariable")) {
40-
return Collections.emptyList();
45+
if (!node.has("operationVariable")) {
46+
return new ArrayList<>();
47+
}
48+
JsonNode operationVariableNode = node.get("operationVariable");
49+
if (operationVariableNode.isArray()) {
50+
return createOperationVariablesFromArrayNode(parser, node);
51+
} else {
52+
OperationVariable operationVariable = DeserializationHelper.createInstanceFromNode(parser, operationVariableNode, OperationVariable.class);
53+
return Lists.newArrayList(operationVariable);
54+
}
55+
} catch (ClassCastException e) {
56+
logger.info("Found empty list item in Operation (e.g., '<outputVariables />') in XML. This is most likely an error.");
57+
return new ArrayList<>();
4158
}
42-
JsonNode operationVariableNode = node.get("operationVariable");
43-
if (operationVariableNode.isArray()) {
44-
return createOperationVariablesFromArrayNode(parser, node);
45-
} else {
46-
OperationVariable operationVariable = DeserializationHelper.createInstanceFromNode(parser, operationVariableNode, OperationVariable.class);
47-
return Collections.singletonList(operationVariable);
48-
}
49-
5059
}
5160

5261

dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/internal/deserialization/QualifierDeserializer.java

+27-16
Original file line numberDiff line numberDiff line change
@@ -41,35 +41,46 @@
4141
*/
4242
package org.eclipse.digitaltwin.aas4j.v3.dataformat.xml.internal.deserialization;
4343

44+
import java.io.IOException;
45+
import java.util.ArrayList;
46+
import java.util.List;
47+
48+
import org.eclipse.digitaltwin.aas4j.v3.model.Qualifier;
49+
import org.slf4j.Logger;
50+
import org.slf4j.LoggerFactory;
51+
4452
import com.fasterxml.jackson.core.JsonParser;
4553
import com.fasterxml.jackson.core.JsonProcessingException;
4654
import com.fasterxml.jackson.databind.DeserializationContext;
4755
import com.fasterxml.jackson.databind.JsonDeserializer;
4856
import com.fasterxml.jackson.databind.JsonNode;
4957
import com.fasterxml.jackson.databind.node.ArrayNode;
5058
import com.fasterxml.jackson.databind.node.ObjectNode;
51-
import org.eclipse.digitaltwin.aas4j.v3.model.Qualifier;
52-
53-
import java.io.IOException;
54-
import java.util.Collections;
55-
import java.util.List;
56-
59+
import com.google.common.collect.Lists;
5760

5861
public class QualifierDeserializer extends JsonDeserializer<List<Qualifier>> {
5962

63+
private static Logger logger = LoggerFactory.getLogger(QualifierDeserializer.class);
64+
6065
@Override
6166
public List<Qualifier> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
62-
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
67+
try {
68+
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
6369

64-
if (!node.has("qualifier")) {
65-
return Collections.emptyList();
66-
}
67-
JsonNode qualifierNode = node.get("qualifier");
68-
if (qualifierNode.isArray()) {
69-
return createConstraintsFromArrayNode(parser, node);
70-
} else {
71-
Qualifier qualifier = DeserializationHelper.createInstanceFromNode(parser, qualifierNode, Qualifier.class);
72-
return Collections.singletonList(qualifier);
70+
if (!node.has("qualifier")) {
71+
return new ArrayList<>();
72+
}
73+
JsonNode qualifierNode = node.get("qualifier");
74+
if (qualifierNode.isArray()) {
75+
return createConstraintsFromArrayNode(parser, node);
76+
} else {
77+
Qualifier qualifier = DeserializationHelper.createInstanceFromNode(parser, qualifierNode,
78+
Qualifier.class);
79+
return Lists.newArrayList(qualifier);
80+
}
81+
} catch (ClassCastException e) {
82+
logger.info("Found empty list item of qualifiers ('<qualifiers />') in XML. This is most likely an error.");
83+
return new ArrayList<Qualifier>();
7384
}
7485

7586
}

dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/internal/deserialization/ReferencesDeserializer.java

+9-8
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,27 @@
1515
*/
1616
package org.eclipse.digitaltwin.aas4j.v3.dataformat.xml.internal.deserialization;
1717

18+
import java.io.IOException;
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
22+
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
23+
1824
import com.fasterxml.jackson.core.JsonParser;
1925
import com.fasterxml.jackson.core.JsonProcessingException;
2026
import com.fasterxml.jackson.core.TreeNode;
2127
import com.fasterxml.jackson.databind.DeserializationContext;
2228
import com.fasterxml.jackson.databind.JsonDeserializer;
2329
import com.fasterxml.jackson.databind.node.ArrayNode;
2430
import com.fasterxml.jackson.databind.node.ObjectNode;
25-
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
26-
27-
import java.io.IOException;
28-
import java.util.ArrayList;
29-
import java.util.Collections;
30-
import java.util.List;
31+
import com.google.common.collect.Lists;
3132

3233
public class ReferencesDeserializer extends JsonDeserializer<List<Reference>> {
3334

3435
@Override
3536
public List<Reference> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
3637
TreeNode treeNode = DeserializationHelper.getRootTreeNode(parser);
37-
treeNode = treeNode.get("reference");
38+
treeNode = treeNode.get("reference");
3839
if (treeNode.isArray()) {
3940
return createReferencesFromArray(parser, (ArrayNode) treeNode);
4041
} else {
@@ -44,7 +45,7 @@ public List<Reference> deserialize(JsonParser parser, DeserializationContext ctx
4445

4546
private List<Reference> createReferencesFromObjectNode(JsonParser parser, ObjectNode node) throws IOException {
4647
Reference reference = createReference(parser, node);
47-
return Collections.singletonList(reference);
48+
return Lists.newArrayList(reference);
4849
}
4950

5051
private List<Reference> createReferencesFromArray(JsonParser parser, ArrayNode arrayNode) throws IOException {

dataformat-xml/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/xml/internal/deserialization/SubmodelElementsDeserializer.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import java.io.IOException;
3131
import java.util.ArrayList;
32-
import java.util.Collections;
3332
import java.util.Iterator;
3433
import java.util.List;
3534

@@ -48,14 +47,14 @@ public SubmodelElementsDeserializer() {
4847
public List<SubmodelElement> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
4948
TreeNode treeNode = DeserializationHelper.getRootTreeNode(parser);
5049
if (treeNode instanceof TextNode) {
51-
return Collections.emptyList();
50+
return new ArrayList<>();
5251
} else {
5352
return createSubmodelElements(parser, ctxt, treeNode);
5453
}
5554
}
5655

5756
private List<SubmodelElement> createSubmodelElements(JsonParser parser, DeserializationContext ctxt, TreeNode treeNode) throws IOException, JsonProcessingException {
58-
if (treeNode.isArray()) {
57+
if (treeNode.isArray()) {
5958
return getSubmodelElementsFromArrayNode(parser, ctxt, (ArrayNode) treeNode);
6059
} else {
6160
return getSubmodelElementsFromObjectNode(parser, ctxt, (JsonNode) treeNode);
@@ -100,7 +99,7 @@ private List<SubmodelElement> getSubmodelElementsFromArrayNode(JsonParser parser
10099

101100
private SubmodelElement getSubmodelElementFromJsonNode(JsonParser parser, DeserializationContext ctxt, JsonNode nodeSubmodelElement) throws IOException, JsonProcessingException {
102101
JsonParser parserReference = parser.getCodec().getFactory().getCodec().treeAsTokens(nodeSubmodelElement);
103-
return deserializer.deserialize(parserReference, ctxt);
102+
return deserializer.deserialize(parserReference, ctxt);
104103
}
105104

106105
}

0 commit comments

Comments
 (0)