Just a heads up: On March 24, 2025, starting at 4:30pm CDT / 21:30 UTC, the site will be undergoing scheduled maintenance for a few hours. During this time, the site might be unavailable for a short while. Thanks for your patience.

×
Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Getting IssueValidator cannot be cast to com.opensymphony.workflow.loader.ValidateDescriptor Excepti

Himanshu Agarwal June 8, 2019

Hello,
My requirement is add workflow validator programmatically. I have created a workflow validator using https://www.j-tricks.com/tutorials/workflow-validator.
Now i am getting below exception.

IssueValidator cannot be cast to com.opensymphony.workflow.loader.ValidateDescriptor

I am using below code for creating validator.

public class IssueValidatorFactory extends AbstractWorkflowPluginFactory implements WorkflowPluginValidatorFactory {

@Override
protected void getVelocityParamsForInput(Map<String, Object> map) {
}

@Override
protected void getVelocityParamsForEdit(Map<String, Object> map, AbstractDescriptor abstractDescriptor) {
}

@Override
protected void getVelocityParamsForView(Map<String, Object> map, AbstractDescriptor abstractDescriptor) {
}

@Override
public Map<String, ?> getDescriptorParams(Map<String, Object> map) {
return map;
}

}

 

public class IssueValidator implements Validator {

private final ScheduleManager scheduleManager;

public IssueValidator(ScheduleManager scheduleManager) {
this.scheduleManager = scheduleManager;
}

public void validate(Map transientVars, Map args, PropertySet ps) throws InvalidInputException, WorkflowException {
Issue issue = (Issue) transientVars.get("issue");
List<Schedule> schedules = scheduleManager.getSchedulesByExecutionStatus(String.valueOf(ApplicationConstants.JOB_STATUS_FAILED), issue.getId().intValue());
if (!schedules.isEmpty()){
throw new InvalidInputException("You can't set done status of this issue because " + schedules.size() + " execution is in fail conditions.");
}

}
}

  

Using below code for add validator programmatically.

WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager();

JiraWorkflow workflow = workflowManager.getWorkflow(projectEvent.getProject().getId(),
JiraUtil.getTestcaseIssueTypeId());
JiraWorkflow draftWorkflow =
workflowManager.createDraftWorkflow(projectEvent.getUser(), workflow.getName());
Collection<ActionDescriptor> actionDescriptors = workflow.getActionsByName("Done");
for(ActionDescriptor actionDescriptor : actionDescriptors){
actionDescriptor.getValidators().add(new IssueValidator(scheduleManager));
}
workflowManager.updateWorkflow(projectEvent.getUser(), draftWorkflow);

 

Please help me out of this problem. 

0 answers

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events