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

Commit 4ebf440

Browse files
committed
Add xml annotation introspector for default namespace
1 parent 1457f35 commit 4ebf440

38 files changed

Lines changed: 54 additions & 301 deletions
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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;
17+
18+
import com.fasterxml.jackson.databind.introspect.Annotated;
19+
import com.fasterxml.jackson.dataformat.xml.JacksonXmlAnnotationIntrospector;
20+
21+
/**
22+
* This class helps to dynamically decide how to de-/serialize classes and
23+
* properties defined in the AAS model library. It will automatically add a default namespace
24+
* to property names.
25+
*/
26+
public class XmlDataformatAnnotationIntrospector extends JacksonXmlAnnotationIntrospector {
27+
private static final long serialVersionUID = 1L;
28+
29+
protected String myDefaultNamespace = "";
30+
31+
public XmlDataformatAnnotationIntrospector() {
32+
super();
33+
myDefaultNamespace = AasXmlNamespaceContext.AAS_URI;
34+
}
35+
36+
@Override
37+
public String findNamespace(Annotated ann) {
38+
String ns = super.findNamespace(ann);
39+
if (ns == null) {
40+
return myDefaultNamespace;
41+
} else {
42+
return ns;
43+
}
44+
}
45+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ protected void buildMapper() {
5151
mapper = XmlMapper.builder().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
5252
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
5353
.serializationInclusion(JsonInclude.Include.NON_NULL)
54+
.annotationIntrospector(new XmlDataformatAnnotationIntrospector())
5455
.addModule(buildImplementationModule())
5556
.addModule(buildCustomDeserializerModule())
5657
.addModule(buildEnumModule())

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ public XmlSerializer(Map<String, String> namespacePrefixes) {
5555
}
5656

5757
protected void buildMapper() {
58-
mapper = XmlMapper.builder().enable(SerializationFeature.INDENT_OUTPUT)
58+
mapper = XmlMapper.builder()
59+
.enable(SerializationFeature.INDENT_OUTPUT)
5960
.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
6061
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
62+
.annotationIntrospector(new XmlDataformatAnnotationIntrospector())
6163
.defaultUseWrapper(false)
6264
.addModule(buildEnumModule())
6365
.addModule(buildCustomSerializerModule())

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021 Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e. V.
2+
* Copyright (c) 2021 Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e. V.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,15 +17,16 @@
1717

1818
import java.util.List;
1919

20-
import com.fasterxml.jackson.annotation.JsonProperty;
20+
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
2121

22+
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
2223
import io.adminshell.aas.v3.model.AccessPermissionRule;
2324

2425
public interface AccessControlMixin {
25-
@JsonProperty("accessPermissionRule")
26+
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.ABAC_PREFERRED_PREFIX, localName = "accessPermissionRule")
2627
public List<AccessPermissionRule> getAccessPermissionRules();
2728

28-
@JsonProperty("accessPermissionRule")
29+
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.ABAC_PREFERRED_PREFIX, localName = "accessPermissionRule")
2930
public void setAccessPermissionRules(List<AccessPermissionRule> accessPermissionRules);
3031

3132
}

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

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

2020
import com.fasterxml.jackson.annotation.JsonIgnore;
2121
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
22-
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
2322

24-
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
2523
import io.adminshell.aas.v3.model.Reference;
2624

2725
@JsonPropertyOrder({"revision", "version"})
2826
public interface AdministrativeInformationMixin {
29-
30-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "revision")
31-
public String getRevision();
32-
33-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "version")
34-
public String getVersion();
35-
3627
@JsonIgnore
3728
public List<Reference> getDataSpecifications();
3829
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,14 @@
2020
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
2121
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
2222
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
23-
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
2423

25-
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
2624
import io.adminshell.aas.v3.dataformat.xml.deserialization.DataElementsDeserializer;
2725
import io.adminshell.aas.v3.dataformat.xml.serialization.DataElementsSerializer;
2826
import io.adminshell.aas.v3.model.DataElement;
2927

3028
@JsonPropertyOrder({"extensions", "idShort", "displayNames", "category", "descriptions", "kind", "semanticId",
3129
"qualifiers", "dataSpecifications", "first", "second", "annotations"})
3230
public interface AnnotatedRelationshipElementMixin {
33-
34-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "annotations")
3531
@JsonSerialize(using = DataElementsSerializer.class)
3632
@JsonDeserialize(using = DataElementsDeserializer.class)
3733
public List<DataElement> getAnnotations();

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,17 @@
2222
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
2323

2424
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
25-
import io.adminshell.aas.v3.model.AssetInformation;
2625
import io.adminshell.aas.v3.model.Reference;
2726
import io.adminshell.aas.v3.model.View;
2827

2928
@JsonPropertyOrder({"extensions", "idShort", "displayNames", "category", "descriptions", "administration",
3029
"identification", "dataSpecifications", "security", "derivedFrom", "submodels", "assetInformation", "views"})
3130
public interface AssetAdministrationShellMixin {
32-
33-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "derivedFrom")
34-
public Reference getDerivedFrom();
35-
3631
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "submodelRef")
3732
@JacksonXmlElementWrapper(namespace = AasXmlNamespaceContext.AAS_URI, localName = "submodelRefs")
3833
public List<Reference> getSubmodels();
3934

4035
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "view")
4136
@JacksonXmlElementWrapper(namespace = AasXmlNamespaceContext.AAS_URI, localName = "views")
4237
public List<View> getViews();
43-
44-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "assetInformation")
45-
public AssetInformation getAssetInformation();
4638
}

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,13 @@
2222
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
2323

2424
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
25-
import io.adminshell.aas.v3.model.AssetKind;
2625
import io.adminshell.aas.v3.model.File;
2726
import io.adminshell.aas.v3.model.IdentifierKeyValuePair;
2827
import io.adminshell.aas.v3.model.Reference;
2928

3029
@JsonPropertyOrder({"defaultThumbnail", "globalAssetId", "assetKind", "billOfMaterials", "specificAssetIds"})
3130
public interface AssetInformationMixin {
3231

33-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "assetKind")
34-
public AssetKind getAssetKind();
35-
36-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "assetKind")
37-
public void setAssetKind(AssetKind assetKind);
38-
39-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "globalAssetId")
40-
public Reference getGlobalAssetId();
41-
42-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "globalAssetId")
43-
public void setGlobalAssetId(Reference globalAssetId);
44-
4532
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "specificAssetId")
4633
@JacksonXmlElementWrapper(namespace = AasXmlNamespaceContext.AAS_URI, localName = "specificAssetIds")
4734
public List<IdentifierKeyValuePair> getSpecificAssetIds();

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,8 @@
1616
package io.adminshell.aas.v3.dataformat.xml.mixins;
1717

1818
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
19-
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
20-
21-
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
22-
import io.adminshell.aas.v3.model.Reference;
2319

2420
@JsonPropertyOrder({"extensions", "idShort", "displayNames", "category", "descriptions", "kind",
2521
"semanticId", "qualifiers", "dataSpecifications", "observed"})
2622
public interface BasicEventMixin {
27-
28-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "observed")
29-
public Reference getObserved();
3023
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,8 @@
1616
package io.adminshell.aas.v3.dataformat.xml.mixins;
1717

1818
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
19-
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
20-
21-
import io.adminshell.aas.v3.dataformat.xml.AasXmlNamespaceContext;
2219

2320
@JsonPropertyOrder({"extensions", "idShort", "displayNames", "category", "descriptions", "kind", "semanticId",
2421
"qualifiers", "dataSpecifications", "value", "mimeType"})
2522
public interface BlobMixin {
26-
27-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "mimeType")
28-
public String getMimeType();
29-
30-
@JacksonXmlProperty(namespace = AasXmlNamespaceContext.AAS_URI, localName = "value")
31-
public byte[] getValue();
32-
3323
}

0 commit comments

Comments
 (0)