JAXB Errors in process models

For a while now we are getting JAXB errors in several different process models with the following error or similar to this error. Difficulty is that even if it will return the same error; where the error happens might be in different parts of the same process model (see below), but mostly it will break on the start process nodes from what I can see.

We tried removing special characters or smileys from any fields that are passed to the process with clean(), since we feel like this might be causing the errors, but so far no luck yet. Any help would be appreciated!
*Please note that I have redacted a large piece of the errortext for privacy purposes. Including parts that might contain the possibly disallowed characters/smileys etc.
In this specific example I think it might have been the character ü, but we have found that it is also possible that the character that will break the process is only visible in our main database (not in the MariaDB) as a blank space which makes finding the issue near impossible for a lot of cases.

JAXB failure trying to convert value ProcessInfo{{pp={id=2474165, name=SCD Generic Create Transacties 22024049276, priority=1, initiator=UserRefImpl{id=xxx, uuid=null}, startTime=2024-06-14 14:59:23.91, deadline=null, timeZone=Europe/Amsterdam, starred=false, parentId=null, parentName=, execId=2, status=0, endTime=null}, pm={id=877, uuid=0006eab2-dc07-8000-3aec-7f0000014e7a, name=SCD Generic Create Transacties, description=, version=7.0, creator=UserRefImpl{id=adm.deployment, uuid=null}, timeZone=Europe/Amsterdam, starred=false, parentId=null, parentName=}, pv={TypedValue[it=3,v=archivedDossier]=TypedValue[it=4612,v=<null>], TypedValue[it=3,v=archivedTransacties]=TypedValue[it=4541,v=<null>], TypedValue[it=3,v=dossier]=TypedValue[it=3880,v={TypedValue[it=3,v=b1eb750b-11cb-43d6-8c84-e6dc3ad218e3]=TypedValue[it=3,v=22024049276], TypedValue[it=3,v=8d379549-6797-434f-a877-

...
...

52a844984530]=TypedValue[it=3606,v= TypedValue[it=3,v=7dc0de83-596a-4372-add8-64c6c36e3380]=TypedValue[it=57,v=<null>], TypedValue[it=3,v=a2ca2f28-a7e3-4119-8bfa-b4776cd63395]=TypedValue[it=3,v=xxx], TypedValue[it=3,v=0f10b481-e93a-48d3-b785-2e41bb618fd2]=TypedValue[it=3,v=J]}], TypedValue[it=3,v=errorText]=TypedValue[it=3,v=], TypedValue[it=3,v=parentObjectName]=TypedValue[it=3,v=DEC Send Email From Module - 22024049276], TypedValue[it=3,v=runSyncAsSubprocessBool]=TypedValue[it=26,v=<null>], TypedValue[it=3,v=standardChecks]=TypedValue[it=3,v=], TypedValue[it=3,v=transacties]=TypedValue[it=4085,v={{TypedValue[it=3,v=e56a58c2-d951-4f35-bd2c-d8ee9e9829ad]=TypedValue[it=3,v=TRN#BRIEF]}}], TypedValue[it=3,v=writeErrorBool]=TypedValue[it=26,v=<null>]}}} to Appian type ProcessInfo (id=2728) 

  Discussion posts and replies are publicly visible

Parents
  • We have found a solution for this error, it comes down to removing unprintable items before passing them to the start proces nodes.

    The function we use to solve this problem (I added the rules we use here below):
    rule!DEC_RemoveSmileys:
    a!forEach(
      items: ri!rappellen,
      expression: a!update(
        fv!item,
        "RAPL_OMSCHRIJVING",
        a!localVariables(
          local!cleaned: rule!DCO_Clean(
            inputData: fv!item["RAPL_OMSCHRIJVING"],
            specialCharMaps: { a!map(char: "€", string: " [#EURO#] ") }
          ),
          if(
            and(
              not(rule!DCO_IsVoid(local!cleaned)),
              find("[#EURO#]", local!cleaned) > 1
            ),
            substitute(local!cleaned, " [#EURO#] ", "€"),
            local!cleaned
          )
        )
      )
    ),
    rappellen: Text (array)
    
    rule!DCO_Clean: 
    if(
      rule!DCO_IsVoid(ri!inputData),
      null,
      a!flatten(
        a!forEach(
          items: ri!inputData,
          expression: if(
            rule!DCO_IsVoid(ri!specialCharMaps),
            clean(fv!item),
            clean(
              reduce(
                rule!DCO_CleanReduceSubFunction,
                fv!item,
                ri!specialCharMaps
              )
            )
          )
        )
      )
    ),
    inputData: Text (Array),
    specialCharMaps: Map (Array)
    __
    rule!DCO_CleanReduceSubFunction: 
    if(
      rule!DCO_IsVoid(ri!string),
      "",
      substitute(
        ri!string,
        ri!specialCharMap["char"],
        ri!specialCharMap["string"]
      )
    ),
    String: Text,
    sepcialCharMap: Map
    __
    rule!DCO_IsVoid: a!match(
      value: runtimetypeof(ri!value),
      whenTrue: a!isNullOrEmpty(ri!value),
      then: true,
      /* Strings */
      whenTrue: fv!value = 'type!{http://www.appian.com/ae/types/2009}Text',
      /* Ignore white space */
      then: len(trim(ri!value)) = 0,
      /* List of Variant */
      whenTrue: fv!value = 'type!{http://www.appian.com/ae/types/2009}Variant?list',
      then: all(a!isNullOrEmpty(_), a!flatten(ri!value)),
      /* Lists */
      /* Try to take first item in list and cast it to a list of itself */
      /* then compare its datatype to the incoming data type */
      whenTrue: fv!value = runtimetypeof(
        cast(
          runtimetypeof({ index(ri!value, 1, null) }),
          ri!value
        )
      ),
      /* Flatten takes care of lists in lists in lists in ... */
      /* List has zero non-null items, length() already ignores null values*/
      then: length(a!flatten(ri!value)) = 0,
      /* DataSubsets or Maps returned by queryRecordType */
      whenTrue: or(
        fv!value = 'type!{http://www.appian.com/ae/types/2009}DataSubset',
        and(
          fv!value = 'type!{http://www.appian.com/ae/types/2009}Map',
          contains(a!keys(ri!value), "data"),
          
        )
      ),
      then: a!isNullOrEmpty(ri!value.data),
      /* Empty map without any keys and values */
      whentrue: fv!value = 'type!{http://www.appian.com/ae/types/2009}Map',
      then: or(
        length(a!keys(ri!value)) = 0,
        
        /*  The commented line below will make a map filled with keys but no values seen as void  */
        /*all(a!isNullOrEmpty(_), index(ri!value, a!keys(ri!value), null))*/
        
      ),
      default: false
    )
    Value: Any type

Reply
  • We have found a solution for this error, it comes down to removing unprintable items before passing them to the start proces nodes.

    The function we use to solve this problem (I added the rules we use here below):
    rule!DEC_RemoveSmileys:
    a!forEach(
      items: ri!rappellen,
      expression: a!update(
        fv!item,
        "RAPL_OMSCHRIJVING",
        a!localVariables(
          local!cleaned: rule!DCO_Clean(
            inputData: fv!item["RAPL_OMSCHRIJVING"],
            specialCharMaps: { a!map(char: "€", string: " [#EURO#] ") }
          ),
          if(
            and(
              not(rule!DCO_IsVoid(local!cleaned)),
              find("[#EURO#]", local!cleaned) > 1
            ),
            substitute(local!cleaned, " [#EURO#] ", "€"),
            local!cleaned
          )
        )
      )
    ),
    rappellen: Text (array)
    
    rule!DCO_Clean: 
    if(
      rule!DCO_IsVoid(ri!inputData),
      null,
      a!flatten(
        a!forEach(
          items: ri!inputData,
          expression: if(
            rule!DCO_IsVoid(ri!specialCharMaps),
            clean(fv!item),
            clean(
              reduce(
                rule!DCO_CleanReduceSubFunction,
                fv!item,
                ri!specialCharMaps
              )
            )
          )
        )
      )
    ),
    inputData: Text (Array),
    specialCharMaps: Map (Array)
    __
    rule!DCO_CleanReduceSubFunction: 
    if(
      rule!DCO_IsVoid(ri!string),
      "",
      substitute(
        ri!string,
        ri!specialCharMap["char"],
        ri!specialCharMap["string"]
      )
    ),
    String: Text,
    sepcialCharMap: Map
    __
    rule!DCO_IsVoid: a!match(
      value: runtimetypeof(ri!value),
      whenTrue: a!isNullOrEmpty(ri!value),
      then: true,
      /* Strings */
      whenTrue: fv!value = 'type!{http://www.appian.com/ae/types/2009}Text',
      /* Ignore white space */
      then: len(trim(ri!value)) = 0,
      /* List of Variant */
      whenTrue: fv!value = 'type!{http://www.appian.com/ae/types/2009}Variant?list',
      then: all(a!isNullOrEmpty(_), a!flatten(ri!value)),
      /* Lists */
      /* Try to take first item in list and cast it to a list of itself */
      /* then compare its datatype to the incoming data type */
      whenTrue: fv!value = runtimetypeof(
        cast(
          runtimetypeof({ index(ri!value, 1, null) }),
          ri!value
        )
      ),
      /* Flatten takes care of lists in lists in lists in ... */
      /* List has zero non-null items, length() already ignores null values*/
      then: length(a!flatten(ri!value)) = 0,
      /* DataSubsets or Maps returned by queryRecordType */
      whenTrue: or(
        fv!value = 'type!{http://www.appian.com/ae/types/2009}DataSubset',
        and(
          fv!value = 'type!{http://www.appian.com/ae/types/2009}Map',
          contains(a!keys(ri!value), "data"),
          
        )
      ),
      then: a!isNullOrEmpty(ri!value.data),
      /* Empty map without any keys and values */
      whentrue: fv!value = 'type!{http://www.appian.com/ae/types/2009}Map',
      then: or(
        length(a!keys(ri!value)) = 0,
        
        /*  The commented line below will make a map filled with keys but no values seen as void  */
        /*all(a!isNullOrEmpty(_), index(ri!value, a!keys(ri!value), null))*/
        
      ),
      default: false
    )
    Value: Any type

Children
No Data