@@ -190,14 +190,20 @@ func ParseMessageWithDataDictionary(
190190 return
191191 }
192192
193+ prevTag := tagMsgType
194+
193195 msg .Header .add (msg .fields [fieldIndex : fieldIndex + 1 ])
194196 fieldIndex ++
195197
196198 trailerBytes := []byte {}
197199 foundBody := false
198200 for {
199201 parsedFieldBytes = & msg .fields [fieldIndex ]
200- rawBytes , err = extractField (parsedFieldBytes , rawBytes )
202+ if prevTag == tagXMLDataLen {
203+ rawBytes , err = extractXMLDataField (parsedFieldBytes , rawBytes )
204+ } else {
205+ rawBytes , err = extractField (parsedFieldBytes , rawBytes )
206+ }
201207 if err != nil {
202208 return
203209 }
@@ -220,6 +226,7 @@ func ParseMessageWithDataDictionary(
220226 msg .bodyBytes = rawBytes
221227 }
222228
229+ prevTag = parsedFieldBytes .tag
223230 fieldIndex ++
224231 }
225232
@@ -338,6 +345,30 @@ func extractSpecificField(field *TagValue, expectedTag Tag, buffer []byte) (remB
338345 return
339346}
340347
348+ func extractXMLDataField (parsedFieldBytes * TagValue , buffer []byte ) (remBytes []byte , err error ) {
349+ endIndex := bytes .IndexByte (buffer , '>' )
350+ if endIndex == - 1 {
351+ err = parseError {OrigError : "extractField: No Trailing Delim in " + string (buffer )}
352+ remBytes = buffer
353+ return
354+ }
355+
356+ endIndex = bytes .IndexByte (buffer [endIndex + 1 :], '>' )
357+ if endIndex == - 1 {
358+ err = parseError {OrigError : "extractField: No Trailing Delim in " + string (buffer )}
359+ remBytes = buffer
360+ return
361+ }
362+
363+ tempEndIndex := bytes .IndexByte (buffer [endIndex :], '\001' )
364+ endIndex += tempEndIndex
365+ tempEndIndex = bytes .IndexByte (buffer [endIndex + 1 :], '\001' )
366+ endIndex += tempEndIndex + 1
367+
368+ err = parsedFieldBytes .parse (buffer [:endIndex + 1 ])
369+ return buffer [(endIndex + 1 ):], err
370+ }
371+
341372func extractField (parsedFieldBytes * TagValue , buffer []byte ) (remBytes []byte , err error ) {
342373 endIndex := bytes .IndexByte (buffer , '\001' )
343374 if endIndex == - 1 {
0 commit comments