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

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,554,186
Community Members
 
Community Events
184
Community Groups

Create Listener that Links 2 Issues when Custom Field Changed

Our Current Scenario:

  1. Scripted Single Issue Picker Field: "Client Project Category Name"
    1. This field resides on all issues within a project and provides a search of all active Client Project Category type issues within that project. 
  2. We need to create a "child of" link between the current issue and what ever issue the user selected from the "Client Project Category Name" custom field. 

This field can be updated at any time and is not tied to a workflow as a result. 

We looked at behaviors, but it appears that listeners may be the best place to do this. I am new to groovy and unsure of what to place into our script to create a child link between 2 issues when that custom field is changed. 

Any help would be appreciated. 

1 answer

1 accepted

0 votes
Answer accepted
Alejandro Suárez
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
Jun 12, 2020 • edited

Hi @Stephen Higgins 

I think something like this (untested) should work:

Edit: I got creative and if you don't have much scripting experience it will be easier for you

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.changehistory.ChangeHistoryItem
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.fields.Field
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.user.ApplicationUser
import com.onresolve.scriptrunner.parameters.annotation.FieldPicker
import com.onresolve.scriptrunner.parameters.annotation.ShortTextInput
import com.onresolve.scriptrunner.parameters.annotation.UserPicker

@FieldPicker(label = "Issue Picker", description = "The Issue Picker field the user is selecting from")
Field issuePicker
@ShortTextInput(label = "LinkType Name", description = "The Link Type name you want to create between the two issues. Eg: Child Of")
String linkTypeName
@UserPicker(label = "Admin User", description = "User that have edit permission in all projects")
ApplicationUser admin

Issue issueFrom = event.getIssue()
CustomField cfIssuePicker = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(issuePicker.getId())

if (cfIssuePicker.getName() in getFieldsChanged()*.getField()) {
Issue issueTo = cfIssuePicker.getValue(issueFrom) as Issue
IssueLinkType issueLinkType = ComponentAccessor.getComponent(IssueLinkTypeManager).getIssueLinkTypesByName(linkTypeName)?.first()
if (issueLinkType)
ComponentAccessor.getIssueLinkManager().createIssueLink(issueFrom.getId(), issueTo.getId(), issueLinkType.getId(), 1L, admin)
}

List<ChangeHistoryItem> getFieldsChanged() {
return ComponentAccessor.getChangeHistoryManager().getAllChangeItems(event.getIssue())?.findAll {
it?.getChangeGroupId() == event.getChangeLog()?.id
}
}

 Regards

Alejandro Suárez
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
Jun 12, 2020

You should pick "Update Issue" event in the scriptrunner listener list. It may not work if the issue is edited in a transition screen.

@Alejandro Suárez this has been working great! I wanted to see if you had any additional insight into what changes we could make to this script to also copy values from the outward linked issue into the issue that had a change on the field. 

Example:

  1. Source issue selects a new parent issue in "Client Project Category Name"
  2. Listener creates the link between the 2 issues (as currently working)
  3. Listener also copies the following custom fields from the parent issue into the child issue.
    1. Senior Director of Client Services
    2. Director of Client Services
Alejandro Suárez
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
Jun 26, 2020

@Stephen Higgins this is the code:
Just to clarify, the values of that fields always will be copied to the linked issue, that means that if the values in the original issue are null, then it will erase the values in the linked issue (if there is any).

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.changehistory.ChangeHistoryItem
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.fields.Field
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.user.ApplicationUser
import com.onresolve.scriptrunner.parameters.annotation.FieldPicker
import com.onresolve.scriptrunner.parameters.annotation.ShortTextInput
import com.onresolve.scriptrunner.parameters.annotation.UserPicker

@FieldPicker(label = "Senior Director of Client Services", description = "Senior Director of Client Services Field")
Field seniorDirectorField
@FieldPicker(label = "Director of Client Services", description = "Director of Client Services Field")
Field directorClientField
@FieldPicker(label = "Issue Picker", description = "The Issue Picker field the user is selecting from")
Field issuePicker
@ShortTextInput(label = "LinkType Name", description = "The Link Type name you want to create between the two issues. Eg: Child Of")
String linkTypeName
@UserPicker(label = "Admin User", description = "User that have edit permission in all projects")
ApplicationUser admin

Issue issueFrom = event.getIssue()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
CustomField cfIssuePicker = customFieldManager.getCustomFieldObject(issuePicker.getId())

if (cfIssuePicker.getName() in getFieldsChanged()*.getField()) {
MutableIssue issueTo = cfIssuePicker.getValue(issueFrom) as MutableIssue
IssueLinkType issueLinkType = ComponentAccessor.getComponent(IssueLinkTypeManager).getIssueLinkTypesByName(linkTypeName)?.first()
if (issueLinkType) {
ComponentAccessor.getIssueLinkManager().createIssueLink(issueFrom.getId(), issueTo.getId(), issueLinkType.getId(), 1L, admin)
CustomField cfSeniorDirector = customFieldManager.getCustomFieldObject(seniorDirectorField.getId())
CustomField cfDirectorClient = customFieldManager.getCustomFieldObject(directorClientField.getId())
issueTo.setCustomFieldValue(cfSeniorDirector, issueFrom.getCustomFieldValue(cfSeniorDirector))
issueTo.setCustomFieldValue(cfDirectorClient, issueFrom.getCustomFieldValue(cfDirectorClient))
ComponentAccessor.getIssueManager().updateIssue(admin, issueTo, EventDispatchOption.ISSUE_UPDATED, false)
}

}

List<ChangeHistoryItem> getFieldsChanged() {
return ComponentAccessor.getChangeHistoryManager().getAllChangeItems(event.getIssue())?.findAll {
it?.getChangeGroupId() == event.getChangeLog()?.id
}
}

Hello,
How can I edit this script for the linked issue in assigned users?

Tim Perrault
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
May 14, 2021

@Alejandro Suárez- Your script is awesome and works great! I know this is like a year old, but I was wondering if there was a way to have it work on the issue created event?

 

Thanks,

Tim

Hello @Alejandro Suárez ,

I know this is somewhat of an old thread, but I copied your code for my instance (Jira SM 5.3.1, Scriptrunner 7.9.0), and I get the following error: 

java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:878)
at org.codehaus.groovy.runtime.ProxyGeneratorAdapter$InnerLoader.defineClass(ProxyGeneratorAdapter.java:846)
at org.codehaus.groovy.runtime.ProxyGeneratorAdapter.<init>(ProxyGeneratorAdapter.java:194)
at groovy.util.ProxyGenerator.lambda$createAdapter$0(ProxyGenerator.java:234)
at org.apache.groovy.util.concurrent.concurrentlinkedhashmap.ConcurrentLinkedHashMap.lambda$compute$0(ConcurrentLinkedHashMap.java:788)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
at org.apache.groovy.util.concurrent.concurrentlinkedhashmap.ConcurrentLinkedHashMap.compute(ConcurrentLinkedHashMap.java:800)
at org.apache.groovy.util.concurrent.concurrentlinkedhashmap.ConcurrentLinkedHashMap.computeIfAbsent(ConcurrentLinkedHashMap.java:777)
at org.codehaus.groovy.runtime.memoize.LRUCache.getAndPut(LRUCache.java:63)
at groovy.util.ProxyGenerator.createAdapter(ProxyGenerator.java:230)
at groovy.util.ProxyGenerator.instantiateDelegateWithBaseClass(ProxyGenerator.java:205)
at groovy.util.ProxyGenerator.instantiateDelegateWithBaseClass(ProxyGenerator.java:189)
at groovy.util.ProxyGenerator.instantiateDelegate(ProxyGenerator.java:181)
at groovy.util.ProxyGenerator.instantiateDelegate(ProxyGenerator.java:177)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.asType(DefaultGroovyMethods.java:17939)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.asType(DefaultGroovyMethods.java:12284)
at org.codehaus.groovy.runtime.dgm$57.doMethodInvoke(Unknown Source)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1268)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at org.codehaus.groovy.runtime.InvokerHelper.invokePojoMethod(InvokerHelper.java:1017)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:1008)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:180)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.asType(ScriptBytecodeAdapter.java:603)
at Script1.run(Script1.groovy:24)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:155)
at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
at javax.script.ScriptEngine$eval.call(Unknown Source)
at com.onresolve.scriptrunner.runner.AbstractScriptRunner.runScriptAndGetContext(AbstractScriptRunner.groovy:185)
at com.onresolve.scriptrunner.runner.AbstractScriptRunner$runScriptAndGetContext$5.callCurrent(Unknown Source)
at com.onresolve.scriptrunner.runner.AbstractScriptRunner.runScriptAndGetContext(AbstractScriptRunner.groovy:304)
at com.onresolve.scriptrunner.runner.AbstractScriptRunner$runScriptAndGetContext$4.callCurrent(Unknown Source)
at com.onresolve.scriptrunner.runner.AbstractScriptRunner.runScript(AbstractScriptRunner.groovy:316)
at com.onresolve.scriptrunner.runner.ScriptRunner$runScript$16.call(Unknown Source)
at com.onresolve.scriptrunner.canned.jira.workflow.listeners.CustomListener.execute(CustomListener.groovy:117)
at com.onresolve.scriptrunner.canned.jira.workflow.listeners.CustomListener$execute$0.callCurrent(Unknown Source)
at com.onresolve.scriptrunner.canned.jira.workflow.AbstractWorkflowCannedScript.execute(AbstractWorkflowCannedScript.groovy:26)
at com.onresolve.scriptrunner.canned.jira.workflow.AbstractWorkflowCannedScript$execute.call(Unknown Source)
at com.onresolve.scriptrunner.runner.AbstractScriptListener$_run_closure1$_closure4.doCall(ListenerManagerImpl.groovy:261)
at com.onresolve.scriptrunner.runner.AbstractScriptListener$_run_closure1$_closure4.doCall(ListenerManagerImpl.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at groovy.lang.Closure.call(Closure.java:412)
at groovy.lang.Closure.call(Closure.java:406)
at com.onresolve.scriptrunner.runner.classloading.ClassLoaderUtils.withUnsetContextClassLoader(ClassLoaderUtils.groovy:11)
at com.onresolve.scriptrunner.runner.classloading.ClassLoaderUtils$withUnsetContextClassLoader.call(Unknown Source)
at com.onresolve.scriptrunner.runner.AbstractScriptListener$_run_closure1.doCall(ListenerManagerImpl.groovy:257)
at com.onresolve.scriptrunner.runner.AbstractScriptListener$_run_closure1.doCall(ListenerManagerImpl.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:38)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
at com.onresolve.scriptrunner.runner.diag.DiagnosticsManagerImpl$DiagnosticsExecutionHandlerImpl$_execute_closure1.doCall(DiagnosticsManagerImpl.groovy:397)
at com.onresolve.scriptrunner.runner.diag.DiagnosticsManagerImpl$DiagnosticsExecutionHandlerImpl$_execute_closure1.doCall(DiagnosticsManagerImpl.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:38)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
at com.onresolve.scriptrunner.runner.ScriptExecutionRecorder.withRecording(ScriptExecutionRecorder.groovy:13)
at com.onresolve.scriptrunner.runner.ScriptExecutionRecorder$withRecording.call(Unknown Source)
at com.onresolve.scriptrunner.runner.diag.DiagnosticsManagerImpl$DiagnosticsExecutionHandlerImpl.execute(DiagnosticsManagerImpl.groovy:394)
at com.onresolve.scriptrunner.runner.diag.DiagnosticsExecutionHandler$execute$3.call(Unknown Source)
at com.onresolve.scriptrunner.runner.AbstractScriptListener.run(ListenerManagerImpl.groovy:254)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:362)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:61)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:203)
at com.onresolve.scriptrunner.runner.IssueEventScriptListener$_handleEventOrBundle_closure3.doCall(ListenerManagerImpl.groovy:351)
at com.onresolve.scriptrunner.runner.IssueEventScriptListener$_handleEventOrBundle_closure3.doCall(ListenerManagerImpl.groovy)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at groovy.lang.Closure.call(Closure.java:412)
at groovy.lang.Closure.call(Closure.java:406)
at groovy.lang.Closure.run(Closure.java:493)
at com.adaptavist.scriptrunner.jfr.events.EventWrapper.run(EventWrapper.java:54)
at com.adaptavist.scriptrunner.jfr.events.EventWrapper$run$1.call(Unknown Source)
at com.onresolve.scriptrunner.runner.IssueEventScriptListener.handleEventOrBundle(ListenerManagerImpl.groovy:343)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:362)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:61)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:194)
at com.onresolve.scriptrunner.runner.IssueEventScriptListener$_invoke_closure1.doCall(ListenerManagerImpl.groovy:307)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:274)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
at groovy.lang.Closure.call(Closure.java:412)
at groovy.lang.Closure.call(Closure.java:428)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2359)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2344)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2385)
at org.codehaus.groovy.runtime.dgm$202.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:247)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
at com.onresolve.scriptrunner.runner.IssueEventScriptListener.invoke(ListenerManagerImpl.groovy:305)
at com.atlassian.event.internal.ComparableListenerInvoker.invoke(ComparableListenerInvoker.java:48)
at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.lambda$null$0(AsynchronousAbleEventDispatcher.java:37)
at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:85)
at com.atlassian.diagnostics.internal.platform.monitor.event.MonitoredEventDispatcher.dispatch(MonitoredEventDispatcher.java:36)
at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:114)
at com.atlassian.event.internal.LockFreeEventPublisher.publish(LockFreeEventPublisher.java:40)
at com.atlassian.jira.event.issue.DefaultIssueEventManager.publishEventIfNotificationsAreEnabled(DefaultIssueEventManager.java:180)
at com.atlassian.jira.event.issue.DefaultIssueEventManager.publishEvent(DefaultIssueEventManager.java:175)
at com.atlassian.jira.event.issue.DefaultIssueEventManager.dispatchIssueEventBundle(DefaultIssueEventManager.java:129)
at com.atlassian.jira.event.issue.IssueEventManager.dispatchEvent(IssueEventManager.java:284)
at com.atlassian.jira.issue.util.DefaultIssueUpdater.storeModifiedFields(DefaultIssueUpdater.java:164)
at com.atlassian.jira.issue.util.DefaultIssueUpdater.doUpdate(DefaultIssueUpdater.java:94)
at com.atlassian.jira.issue.util.DefaultIssueUpdater.doUpdate(DefaultIssueUpdater.java:68)
at com.atlassian.jira.issue.managers.DefaultIssueManager.doUpdate(DefaultIssueManager.java:703)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:674)
at com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:222)
at com.atlassian.jira.bc.issue.DefaultIssueService.update(DefaultIssueService.java:366)
at com.atlassian.jira.bc.issue.DefaultIssueService.update(DefaultIssueService.java:339)
at jdk.internal.reflect.GeneratedMethodAccessor5035.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
at com.sun.proxy.$Proxy569.update(Unknown Source)
at jdk.internal.reflect.GeneratedMethodAccessor5035.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:130)
at com.sun.proxy.$Proxy569.update(Unknown Source)
at com.atlassian.jira.quickedit.action.QuickEditIssue.doExecute(QuickEditIssue.java:142)
... 1 filtered
at com.atlassian.jira.web.action.JiraWebActionSupport.execute(JiraWebActionSupport.java:1364)
... 7 filtered
at javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
... 19 filtered
at com.miniorange.twofactor.jira.servlet.MoTwoFactorLoginFilter.doFilter(MoTwoFactorLoginFilter.java:174)
... 32 filtered
at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:55)
... 4 filtered
at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:56)
... 7 filtered
at com.atlassian.jira.plugin.mobile.web.filter.MobileAppRequestFilter.doFilter(MobileAppRequestFilter.java:59)
... 4 filtered
at com.atlassian.jira.plugin.mobile.login.MobileLoginSuccessFilter.doFilter(MobileLoginSuccessFilter.java:54)
... 3 filtered
at com.atlassian.diagnostics.internal.platform.monitor.http.HttpRequestMonitoringFilter.doFilter(HttpRequestMonitoringFilter.java:54)
... 8 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 48 filtered
at com.atlassian.oauth2.scopes.web.ReadWriteScopeFilter.doFilter(ReadWriteScopeFilter.java:46)
... 3 filtered
at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)
... 17 filtered
at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
... 1 filtered
at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
... 16 filtered
at com.atlassian.pats.web.filter.TokenBasedAuthenticationFilter.doFilter(TokenBasedAuthenticationFilter.java:82)
... 3 filtered
at com.atlassian.oauth2.provider.core.web.AccessTokenFilter.doFilter(AccessTokenFilter.java:81)
... 3 filtered
at org.techtime.easysso.PrincipalUserComponent.processPrincipalUser(PrincipalUserComponent.java:159)
at org.techtime.easysso.ntlm.statemachine.strategy.AbstractAllUploadedStrategy.doPrincipalFiltering(AbstractAllUploadedStrategy.java:135)
at org.techtime.easysso.PrincipalFilter.doFilter(PrincipalFilter.java:27)
... 3 filtered
at org.techtime.easysso.ntlm.statemachine.strategy.AbstractAllUploadedStrategy.doX509Filtering(AbstractAllUploadedStrategy.java:156)
at org.techtime.easysso.x509.X509Filter.doFilter(X509Filter.java:27)
... 26 filtered
at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
... 5 filtered
at com.atlassian.plugins.authentication.impl.basicauth.filter.DisableBasicAuthFilter.doFilter(DisableBasicAuthFilter.java:70)
... 3 filtered
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:220)
at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:136)
at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:89)
at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:47)
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:211)
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:139)
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:128)
... 9 filtered
at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:37)
... 3 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 4 filtered
at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)
... 3 filtered
at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
... 3 filtered
at org.techtime.easysso.interfaces.SAMLFilter.doFilter(SAMLFilter.java:91)
... 3 filtered
at org.techtime.easysso.ntlm.NtlmFilterComponent$FilterChainWrapper.doFilter(NtlmFilterComponent.java:679)
at jespa.http.HttpSecurityService.doFilter(HttpSecurityService.java:1590)
at jdk.internal.reflect.GeneratedMethodAccessor6279.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.techtime.easysso.ntlm.NtlmFilterComponent.invokeMethod(NtlmFilterComponent.java:649)
at org.techtime.easysso.ntlm.NtlmFilterComponent.doFilter(NtlmFilterComponent.java:596)
at org.techtime.easysso.ntlm.statemachine.strategy.FullyEnabledStrategy.doNTLMFiltering(FullyEnabledStrategy.java:62)
at org.techtime.easysso.ntlm.JespaFilter.doFilter(JespaFilter.java:47)
... 29 filtered
at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
... 25 filtered
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:869)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:979)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:967)
... 505 more

Can you please help?

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events