Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Commit 92defb8

Browse files
Merge pull request #30 from Daespen/fix/test-core-full-example
Fixes failing XML-Tests
2 parents f33cfaa + bf09d75 commit 92defb8

File tree

8 files changed

+102
-47
lines changed

8 files changed

+102
-47
lines changed

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/XmlDeserializer.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,16 @@
2828
import io.adminshell.aas.v3.dataformat.Deserializer;
2929
import io.adminshell.aas.v3.dataformat.core.ReflectionHelper;
3030
import io.adminshell.aas.v3.dataformat.core.deserialization.EnumDeserializer;
31-
import io.adminshell.aas.v3.dataformat.xml.deserialization.KeyDeserializer;
3231
import io.adminshell.aas.v3.dataformat.xml.deserialization.SubmodelElementDeserializer;
3332
import io.adminshell.aas.v3.model.AssetAdministrationShellEnvironment;
3433
import io.adminshell.aas.v3.model.SubmodelElement;
35-
import io.adminshell.aas.v3.model.impl.DefaultKey;
3634

3735
public class XmlDeserializer implements Deserializer {
3836

3937
protected XmlMapper mapper;
4038
protected SimpleAbstractTypeResolver typeResolver;
4139
protected static Map<Class<?>, com.fasterxml.jackson.databind.JsonDeserializer> customDeserializers = Map.of(
42-
SubmodelElement.class, new SubmodelElementDeserializer(),
43-
DefaultKey.class, new KeyDeserializer());
40+
SubmodelElement.class, new SubmodelElementDeserializer());
4441

4542
public XmlDeserializer() {
4643
initTypeResolver();

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/deserialization/CustomJsonNodeDeserializer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
*/
1616
package io.adminshell.aas.v3.dataformat.xml.deserialization;
1717

18+
import java.io.IOException;
19+
20+
import com.fasterxml.jackson.core.JsonParser;
1821
import com.fasterxml.jackson.databind.JsonNode;
1922

2023
public interface CustomJsonNodeDeserializer<T extends Object> {
21-
public T readValue(JsonNode node);
24+
public T readValue(JsonNode node, JsonParser parser) throws IOException;
2225
}

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/deserialization/KeyDeserializer.java

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,42 +18,27 @@
1818
import java.io.IOException;
1919

2020
import com.fasterxml.jackson.core.JsonParser;
21-
import com.fasterxml.jackson.core.JsonProcessingException;
22-
import com.fasterxml.jackson.databind.DeserializationContext;
23-
import com.fasterxml.jackson.databind.JsonDeserializer;
2421
import com.fasterxml.jackson.databind.JsonNode;
25-
import com.fasterxml.jackson.databind.node.ObjectNode;
2622

23+
import io.adminshell.aas.v3.model.Key;
2724
import io.adminshell.aas.v3.model.KeyElements;
2825
import io.adminshell.aas.v3.model.KeyType;
2926
import io.adminshell.aas.v3.model.impl.DefaultKey;
3027

31-
public class KeyDeserializer extends JsonDeserializer<DefaultKey> {
28+
public class KeyDeserializer implements CustomJsonNodeDeserializer<Key> {
3229

33-
@Override
34-
public DefaultKey deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
35-
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
36-
ObjectNode normalizeNode = normalizeNode(node);
37-
return createDefaultKeyFromNode(parser, normalizeNode);
38-
}
3930

40-
private DefaultKey createDefaultKeyFromNode(JsonParser parser, ObjectNode normalizeNode) throws IOException {
41-
JsonNode idTypeNode = normalizeNode.get("idType");
42-
JsonNode typeNode = normalizeNode.get("type");
43-
JsonNode valueNode = normalizeNode.get("");
31+
@Override
32+
public Key readValue(JsonNode node, JsonParser parser) throws IOException {
33+
JsonNode idTypeNode = node.get("idType");
34+
JsonNode typeNode = node.get("type");
35+
JsonNode valueNode = node.get("");
4436
KeyType idType = createKeyTypeFromNode(parser, idTypeNode);
4537
KeyElements type = createKeyElementsFromNode(parser, typeNode);
4638
String value = valueNode.asText();
4739
return new DefaultKey.Builder().idType(idType).type(type).value(value).build();
4840
}
4941

50-
private ObjectNode normalizeNode(ObjectNode node) {
51-
if (node.has("key")) {
52-
node = (ObjectNode) node.get("key");
53-
}
54-
return node;
55-
}
56-
5742
private KeyElements createKeyElementsFromNode(JsonParser parser, JsonNode typeNode) throws IOException {
5843
return DeserializationHelper.createInstanceFromNode(parser, typeNode, KeyElements.class);
5944
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (c) 2021 Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e. V.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.adminshell.aas.v3.dataformat.xml.deserialization;
17+
18+
import io.adminshell.aas.v3.model.Key;
19+
20+
public class KeysDeserializer extends NoEntryWrapperListDeserializer<Key> {
21+
public KeysDeserializer() {
22+
super("key", new KeyDeserializer());
23+
}
24+
}

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/deserialization/LangStringNodeDeserializer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
*/
1616
package io.adminshell.aas.v3.dataformat.xml.deserialization;
1717

18+
import java.io.IOException;
19+
20+
import com.fasterxml.jackson.core.JsonParser;
1821
import com.fasterxml.jackson.databind.JsonNode;
1922

2023
import io.adminshell.aas.v3.model.LangString;
2124

2225
public class LangStringNodeDeserializer implements CustomJsonNodeDeserializer<LangString> {
2326
@Override
24-
public LangString readValue(JsonNode node) {
27+
public LangString readValue(JsonNode node, JsonParser parser) throws IOException {
2528
String lang = node.get("lang").asText();
2629
String text = node.get("").asText();
2730
return new LangString(text, lang);

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/deserialization/NoEntryWrapperListDeserializer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,23 @@ public List<T> deserialize(JsonParser parser, DeserializationContext ctxt) throw
4747
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
4848
JsonNode langStringNode = node.get(elementName);
4949
if (langStringNode.isObject()) {
50-
return createEntriesFromObjectNode(langStringNode);
50+
return createEntriesFromObjectNode(langStringNode, parser);
5151
} else {
52-
return createEntriesFromArrayNode((ArrayNode) langStringNode);
52+
return createEntriesFromArrayNode((ArrayNode) langStringNode, parser);
5353
}
5454
}
5555

56-
private List<T> createEntriesFromArrayNode(ArrayNode langStringsNode) {
56+
private List<T> createEntriesFromArrayNode(ArrayNode langStringsNode, JsonParser parser) throws IOException {
5757
List<T> entries = new ArrayList<>();
5858
for (int i = 0; i < langStringsNode.size(); i++) {
5959
JsonNode nextNode = langStringsNode.get(i);
60-
entries.add(nodeDeserializer.readValue(nextNode));
60+
entries.add(nodeDeserializer.readValue(nextNode, parser));
6161
}
6262
return entries;
6363
}
6464

65-
private List<T> createEntriesFromObjectNode(JsonNode langStringNode) {
66-
T entry = nodeDeserializer.readValue(langStringNode);
65+
private List<T> createEntriesFromObjectNode(JsonNode langStringNode, JsonParser parser) throws IOException {
66+
T entry = nodeDeserializer.readValue(langStringNode, parser);
6767
return Collections.singletonList(entry);
6868
}
6969
}

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/mixins/ReferenceMixin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@
1717

1818
import java.util.List;
1919

20+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
2021
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
2122
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
2223

2324
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
25+
import io.adminshell.aas.v3.dataformat.xml.deserialization.KeysDeserializer;
2426
import io.adminshell.aas.v3.model.Key;
2527

2628
public interface ReferenceMixin {
2729
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "key")
2830
@JacksonXmlElementWrapper(namespace = AasXmlNamespaceContext.AAS_URI, localName = "keys")
31+
@JsonDeserialize(using = KeysDeserializer.class)
2932
public List<Key> getKeys();
3033
}

0 commit comments

Comments
 (0)