Workflow throwing no seralizer error

Which IIQ version are you inquiring about?

[Replace this text with your version of IIQ. The more specific you can be (7.1, 8.3, 8.X), the more people can help. If you do not know, put Unsure.]

Please share any images or screenshots, if relevant.

[Please insert images here, otherwise delete this section]

Please share any other relevant files that may be required (for example, logs).

2025-01-23 14:32:56,195 TRACE http-nio-8080-exec-8 sailpoint.WorkflowTrace:216 - Ending step Compile
2025-01-23 14:32:56,196 TRACE http-nio-8080-exec-8 sailpoint.WorkflowTrace:216 - Starting step Provision Project
2025-01-23 14:32:57,498 ERROR http-nio-8080-exec-8 sailpoint.server.ScriptletEvaluator:143 - Step call threw an exception:
2025-01-23 14:32:57,525 ERROR http-nio-8080-exec-8 sailpoint.server.ScriptletEvaluator:144 - sailpoint.tools.GeneralException: No serializer registered for class class org.apache.catalina.session.StandardSessionFacade
	at sailpoint.persistence.HibernatePersistenceManager.saveInternal(HibernatePersistenceManager.java:1629)
	at sailpoint.persistence.HibernatePersistenceManager.saveObject(HibernatePersistenceManager.java:1396)
	at sailpoint.persistence.ClassPersistenceManager.saveObject(ClassPersistenceManager.java:287)

Share all details about your problem, including any error messages you may have received.

Launching this workflow from a quicklink that looks at a form field and provisions a role if true. The workflow generates the plan and project but when it gets to provision get following error.

Do you have an httpSession variable in the workflow that’s passed in by the quicklink by chance?

I don’t have it as a variable in the workflow. Is that needed?

No, it was just a guess based on the error message. Could you post the quicklink and workflow that’s throwing the error? You most likely have a workflow step that’s backgrounding or creating a workitem. And in the same or a previous workflow step, you’re returning a variable that IIQ doesn’t have a serializer for, in this case I assumed you were trying to do something with the httpSession variable.

If you share the quicklink and workflow, we can probably find out which variable is causing the issue. Generally, you want to only pass strings or anything that extends SailPointObject in and out of a workflow step.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Workflow PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Workflow created="1737671639226" explicitTransitions="true" id="7f000001949518e18194954d00ba000d" modified="1737672623734" name="BikiniBottomWorkflow" type="LCM Provisioning">
  <Variable editable="true" input="true" name="launcher">
    <Description>Launcher name.</Description>
  </Variable>
  <Variable input="true" name="identityName"/>
  <Variable initializer="true" name="trace">
    <Description>Used for debugging this workflow and when set to true trace
            will be sent to stdout.</Description>
  </Variable>
  <Variable name="plan"/>
  <Variable name="project"/>
  <Variable name="identityObject">
    <Script>
      <Source>Identity identityObject = context.getObjectByName(Identity.class, identityName);
return identityObject;</Source>
    </Script>
  </Variable>
  <Variable initializer="true" name="trace"/>
  <Variable name="source"/>
  <Variable name="bikiniBottomAccess"/>
  <Variable initializer="script:(identityDisplayName!=void)?identityDisplayName : resolveDisplayName(identityName)" name="identityDisplayName"/>
  <Variable initializer="true" name="transient">
    <Description>Set to false to cause workflow-related objects, such as approval
      work items, to be saved in the database even if they are only
      viewed by the person registering.</Description>
  </Variable>
  <Variable initializer="1" name="participantNumber"/>
  <Step icon="Start" name="Start" posX="55" posY="19">
    <Transition to="Generic Step"/>
  </Step>
  <Step icon="Stop" name="Stop" posX="795" posY="44"/>
  <Step icon="Approval" name="Generic Step" posX="252" posY="46">
    <Approval mode="serial" name="BikiniBottom Access" owner="string:spadmin" return="bikiniBottomAccess,participantNumber" send="">
      <Form name="BikiniBottom Access">
        <Attributes>
          <Map>
            <entry key="hideIncompleteFields">
              <value>
                <Boolean></Boolean>
              </value>
            </entry>
            <entry key="includeHiddenFields">
              <value>
                <Boolean></Boolean>
              </value>
            </entry>
            <entry key="pageTitle" value="BikiniBottom Access"/>
          </Map>
        </Attributes>
        <Section name="Bikini Bottom Access">
          <Field displayName="Bikini Bottom Access" name="bikiniBottomAccess" type="string">
            <AllowedValuesDefinition>
              <Value>
                <List>
                  <String>YES</String>
                  <String>NO</String>
                </List>
              </Value>
            </AllowedValuesDefinition>
          </Field>
          <Field displayName="Participant Number" name="participantNumber" type="string"/>
        </Section>
        <Button action="cancel" label="Cancel"/>
        <Button action="back" label="Back"/>
        <Button action="next" label="Next"/>
      </Form>
    </Approval>
    <Arg name="trace" value="ref:trace"/>
    <Transition to="Create Plan"/>
  </Step>
  <Step icon="Task" name="Create Plan" posX="414" posY="68" resultVariable="plan">
    <Arg name="bikiniBottomAccess" value="ref:bikiniBottomAccess"/>
    <Arg name="participantNumber" value="ref:participantNumber"/>
    <Script>
      <Source>import sailpoint.api.SailPointContext;
import sailpoint.object.Form;
import sailpoint.object.Identity;
import sailpoint.object.ProvisioningPlan;
import sailpoint.object.ProvisioningPlan.AccountRequest;
import sailpoint.object.ProvisioningPlan.AttributeRequest;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import sailpoint.object.Application;

            Log log = LogFactory.getLog("WorkflowLogger");

            // Log the retrieved values
            log.info("Retrieved Bikini Bottom Access: " + bikiniBottomAccess);
            log.info("Retrieved Participant Number: " + participantNumber);

            if (bikiniBottomAccess!=null){
                    String access = bikiniBottomAccess.toString();
                    Identity id = context.getObjectByName(Identity.class, participantNumber);
                    log.error("id::::"+id);
                    // Build the provisioning plan

                    String roleName = "Bikini Bottom Access - Business";
                    if (access.equalsIgnoreCase("yes")){
                            ProvisioningPlan plan = new ProvisioningPlan();
                            List accountRequestList = new ArrayList();


                            // Create an AccountRequest
                            AccountRequest accountRequest = new AccountRequest();
                            accountRequest.setOperation(AccountRequest.Operation.Modify);
                            accountRequest.setApplication("IIQ");
                            AttributeRequest attReq = new AttributeRequest("assignedRoles", ProvisioningPlan.Operation.Add, roleName);
                            accountRequest.add(attReq);
                            accountRequestList.add(accountRequest);


                            plan.setAccountRequests(accountRequestList);
                            plan.setIdentity(id);


                            // Log the provisioning plan creation
                            log.error("Provisioning plan created: " + plan.toXml());
                            return plan;
                    }

            }
        
                </Source>
    </Script>
    <Transition to="Provision" when="plan!=null"/>
    <Transition to="Stop"/>
  </Step>
  <Step icon="Provision" name="Provision" posX="659" posY="119">
    <Arg name="identityEmailTemplate"/>
    <Arg name="enableRetryRequest"/>
    <Arg name="securityOfficerElectronicSignature"/>
    <Arg name="fallbackApprover"/>
    <Arg name="endOnManualWorkItems"/>
    <Arg name="userEmailTemplate"/>
    <Arg name="policiesToCheck"/>
    <Arg name="project"/>
    <Arg name="workItemComments"/>
    <Arg name="identityRequestId"/>
    <Arg name="approvalSplitPoint"/>
    <Arg name="source"/>
    <Arg name="identityDisplayName"/>
    <Arg name="foregroundProvisioning"/>
    <Arg name="ownerElectronicSignature"/>
    <Arg name="batchRequestItemId"/>
    <Arg name="saveUnmanagedPlan_WithProjectArgument"/>
    <Arg name="splitPlans"/>
    <Arg name="doRefresh"/>
    <Arg name="plan" value="ref:plan"/>
    <Arg name="flow" value="EntitlementsRequest"/>
    <Arg name="identityElectronicSignature"/>
    <Arg name="identityName" value="ref:participantNumber"/>
    <Arg name="approvalSet"/>
    <Arg name="violationReviewDecision"/>
    <Arg name="filterRejects"/>
    <Arg name="splitProjects"/>
    <Arg name="requireCommentsForDenial"/>
    <Arg name="requesterEmailTemplate"/>
    <Arg name="approvalEmailTemplate"/>
    <Arg name="ticketManagementApplication"/>
    <Arg name="securityOfficerName"/>
    <Arg name="approvingIdentities"/>
    <Arg name="managerEmailTemplate"/>
    <Arg name="ticketId"/>
    <Arg name="approvalScheme"/>
    <Arg name="allowRequestsWithViolations"/>
    <Arg name="workItemPriority"/>
    <Arg name="managerElectronicSignature"/>
    <Arg name="requireViolationReviewComments"/>
    <Arg name="splitApprovalSet"/>
    <Arg name="approvalMode"/>
    <Arg name="trace" value="ref:trace"/>
    <Arg name="endOnProvisioningForms"/>
    <Arg name="splitWorkItemComments"/>
    <Arg name="requireCommentsForApproval"/>
    <Arg name="notificationScheme"/>
    <Arg name="policyViolations"/>
    <Arg name="policyScheme"/>
    <Arg name="setPreviousApprovalDecisions"/>
    <Arg name="optimisticProvisioning"/>
    <Arg name="securityOfficerEmailTemplate"/>
    <WorkflowRef>
      <Reference class="sailpoint.object.Workflow" id="7f000001915710f181915731d4fe02f7" name="LCM Provisioning"/>
    </WorkflowRef>
  </Step>
</Workflow>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE QuickLink PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<QuickLink action="workflow" category="Custom" created="1736721800729" id="7f000001945c19bc81945caf9e19006d" messageKey="BikiniBottom Access" modified="1737671691893" name="BikiniBottom Access">
  <Attributes>
    <Map>
      <entry key="forceAllowOthers" value="true"/>
      <entry key="hideAllowSelf" value="true"/>
      <entry key="httpSession">
        <value>
          <Script>
            <Source>
              import javax.faces.context.FacesContext;
              import javax.servlet.http.HttpSession;
              FacesContext fc = FacesContext.getCurrentInstance();
              HttpSession session = fc.getExternalContext().getSession(true);
              return session;
            </Source>
          </Script>
        </value>
      </entry>
      <entry key="requester">
        <value>
          <Script>
            <Source>
              return currentUser.getName();
            </Source>
          </Script>
        </value>
      </entry>
      <entry key="workflowName" value="BikiniBottomWorkflow"/>
    </Map>
  </Attributes>
  <QuickLinkOptions allowOther="true" created="1736952566209" id="7f0000019461132b81946a70d1c10f7c" modified="1737671691894">
    <DynamicScopeRef>
      <Reference class="sailpoint.object.DynamicScope" id="7f000001945c19bc81945ca0bdc6003c" name="Bikini Bottom Access"/>
    </DynamicScopeRef>
  </QuickLinkOptions>
</QuickLink>

Out of curiosity, what happens if you remove this section of the QuickLink since you aren’t using it?


      <entry key="httpSession">
        <value>
          <Script>
            <Source>
              import javax.faces.context.FacesContext;
              import javax.servlet.http.HttpSession;
              FacesContext fc = FacesContext.getCurrentInstance();
              HttpSession session = fc.getExternalContext().getSession(true);
              return session;
            </Source>
          </Script>
        </value>
      </entry>

It worked thank you so much

Awesome! No problem!

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.