You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/03/31 11:04:44 UTC

[plc4x] branch develop updated: plc4go: fixed issue when unmarshaling list elements from xml

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 9cbe531  plc4go: fixed issue when unmarshaling list elements from xml
9cbe531 is described below

commit 9cbe5317dd006987d54dfdcec06daa5675a6d894
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Mar 31 13:04:29 2021 +0200

    plc4go: fixed issue when unmarshaling list elements from xml
---
 .../src/main/resources/templates/go/model-template.ftlh          | 9 ++++-----
 .../internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go   | 7 ++++---
 .../plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go        | 7 ++++---
 plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go    | 7 ++++---
 plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go      | 7 ++++---
 plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go      | 7 ++++---
 plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go      | 7 ++++---
 plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go          | 7 ++++---
 .../plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go       | 7 ++++---
 plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go | 7 ++++---
 .../plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go      | 7 ++++---
 plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go   | 7 ++++---
 12 files changed, 48 insertions(+), 38 deletions(-)

diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index 62c5cf7..053f0d2 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@ -946,16 +946,15 @@ func (m *${type.name}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) erro
 				}
 				m.${field.name?cap_first} = utils.ByteArrayToInt8Array(_decoded[0:_len])
 				<#elseif helper.isComplexTypeReference(field.type) && helper.isDiscriminatedParentTypeDefinition(helper.getTypeDefinitionForTypeReference(field.type))>
-					<#if helper.isArrayField(field)>
-				var _values []<#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForTypeReference(field.type)}
-					</#if>
 				var dt *${helper.getLanguageTypeNameForField(field)}
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
 					<#if helper.isArrayField(field)>
-				_values = append(_values, dt)
-				m.${field.name?cap_first} = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.${field.name?cap_first} = append(m.${field.name?cap_first}, dt)
+				}
 					<#else>
 				m.${field.name?cap_first} = dt
 					</#if>
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index 053d102..681e80a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -277,13 +277,14 @@ func (m *AdsReadWriteRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElemen
 				}
 				m.ReadLength = data
 			case "items":
-				var _values []*AdsMultiRequestItem
 				var dt *AdsMultiRequestItem
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.Items = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.Items = append(m.Items, dt)
+				}
 			case "data":
 				var _encoded string
 				if err := d.DecodeElement(&_encoded, &tok); err != nil {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
index f5790be..3011649 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
@@ -168,13 +168,14 @@ func (m *DIBSuppSvcFamilies) UnmarshalXML(d *xml.Decoder, start xml.StartElement
 				}
 				m.DescriptionType = data
 			case "serviceIds":
-				var _values []*ServiceId
 				var dt *ServiceId
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.ServiceIds = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.ServiceIds = append(m.ServiceIds, dt)
+				}
 			}
 		}
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
index cc90e84..022c085 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
@@ -223,13 +223,14 @@ func (m *LBusmonInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
 				}
 				m.AdditionalInformationLength = data
 			case "additionalInformation":
-				var _values []*CEMIAdditionalInformation
 				var dt *CEMIAdditionalInformation
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.AdditionalInformation = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.AdditionalInformation = append(m.AdditionalInformation, dt)
+				}
 			case "dataFrame":
 				var dt *LDataFrame
 				if err := d.DecodeElement(&dt, &tok); err != nil {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
index f348f6d..734cbdc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
@@ -195,13 +195,14 @@ func (m *LDataCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
 				}
 				m.AdditionalInformationLength = data
 			case "additionalInformation":
-				var _values []*CEMIAdditionalInformation
 				var dt *CEMIAdditionalInformation
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.AdditionalInformation = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.AdditionalInformation = append(m.AdditionalInformation, dt)
+				}
 			case "dataFrame":
 				var dt *LDataFrame
 				if err := d.DecodeElement(&dt, &tok); err != nil {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
index 5b11d3d..f4489cc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
@@ -195,13 +195,14 @@ func (m *LDataInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
 				}
 				m.AdditionalInformationLength = data
 			case "additionalInformation":
-				var _values []*CEMIAdditionalInformation
 				var dt *CEMIAdditionalInformation
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.AdditionalInformation = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.AdditionalInformation = append(m.AdditionalInformation, dt)
+				}
 			case "dataFrame":
 				var dt *LDataFrame
 				if err := d.DecodeElement(&dt, &tok); err != nil {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
index c1a838f..80a0c56 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
@@ -195,13 +195,14 @@ func (m *LDataReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
 				}
 				m.AdditionalInformationLength = data
 			case "additionalInformation":
-				var _values []*CEMIAdditionalInformation
 				var dt *CEMIAdditionalInformation
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.AdditionalInformation = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.AdditionalInformation = append(m.AdditionalInformation, dt)
+				}
 			case "dataFrame":
 				var dt *LDataFrame
 				if err := d.DecodeElement(&dt, &tok); err != nil {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index 7eeab9c..14e610b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -243,13 +243,14 @@ func (m *COTPPacket) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
 			tok := token.(xml.StartElement)
 			switch tok.Name.Local {
 			case "parameters":
-				var _values []*COTPParameter
 				var dt *COTPParameter
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.Parameters = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.Parameters = append(m.Parameters, dt)
+				}
 			case "payload":
 				var dt *S7Message
 				if err := d.DecodeElement(&dt, &tok); err != nil {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
index c58772b..ba3f247 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
@@ -171,13 +171,14 @@ func (m *S7ParameterReadVarRequest) UnmarshalXML(d *xml.Decoder, start xml.Start
 			tok := token.(xml.StartElement)
 			switch tok.Name.Local {
 			case "items":
-				var _values []*S7VarRequestParameterItem
 				var dt *S7VarRequestParameterItem
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.Items = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.Items = append(m.Items, dt)
+				}
 			}
 		}
 		token, err = d.Token()
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
index c4c2ec4..7c9e263 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
@@ -171,13 +171,14 @@ func (m *S7ParameterUserData) UnmarshalXML(d *xml.Decoder, start xml.StartElemen
 			tok := token.(xml.StartElement)
 			switch tok.Name.Local {
 			case "items":
-				var _values []*S7ParameterUserDataItem
 				var dt *S7ParameterUserDataItem
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.Items = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.Items = append(m.Items, dt)
+				}
 			}
 		}
 		token, err = d.Token()
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
index cb2143f..a4bb9d2 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
@@ -171,13 +171,14 @@ func (m *S7ParameterWriteVarRequest) UnmarshalXML(d *xml.Decoder, start xml.Star
 			tok := token.(xml.StartElement)
 			switch tok.Name.Local {
 			case "items":
-				var _values []*S7VarRequestParameterItem
 				var dt *S7VarRequestParameterItem
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.Items = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.Items = append(m.Items, dt)
+				}
 			}
 		}
 		token, err = d.Token()
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
index 2bfffd1..dd9139b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
@@ -154,13 +154,14 @@ func (m *S7PayloadUserData) UnmarshalXML(d *xml.Decoder, start xml.StartElement)
 			tok := token.(xml.StartElement)
 			switch tok.Name.Local {
 			case "items":
-				var _values []*S7PayloadUserDataItem
 				var dt *S7PayloadUserDataItem
 				if err := d.DecodeElement(&dt, &tok); err != nil {
 					return err
 				}
-				_values = append(_values, dt)
-				m.Items = _values
+				// TODO: this is a workaround for empty tags which omit this strange structure
+				if dt.Child != nil {
+					m.Items = append(m.Items, dt)
+				}
 			}
 		}
 		token, err = d.Token()