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

JIRA 7.2.3 + Script Runner 4.3.18 - error No such method signature

nyxnyx March 16, 2017

Hi,

I have script runner script that should create WebLink:

import com.atlassian.jira.ComponentManager
import com.atlassian.jira.bc.customfield.CreateValidationResult
import com.atlassian.jira.bc.issue.link.RemoteIssueLinkService
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueFieldConstants
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.fields.CustomFieldFactory
import com.atlassian.jira.issue.link.RemoteIssueLink
import com.atlassian.jira.issue.link.RemoteIssueLinkBuilder
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.web.bean.PagerFilter
import com.opensymphony.workflow.InvalidInputException
import webwork.action.ActionContext
import org.apache.log4j.Category



//RemoteIssueLinkService remoteIssueLinkService = ComponentManager.getComponent(RemoteIssueLinkService.class)
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def authContext = ComponentAccessor.getJiraAuthenticationContext()
IssueManager issueManager = ComponentAccessor.getIssueManager()
SearchService searchService = ComponentAccessor.getComponent(SearchService.class)
UserUtil userUtil = ComponentAccessor.getUserUtil()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()

def jqlSearch = "cf[10502] ~ \"http\""

List<MutableIssue> issues = null
SearchService.ParseResult parseResult =  searchService.parseQuery(user, jqlSearch)

if (parseResult.isValid()) {
    def searchResult = searchService.search(
            user,
            parseResult.getQuery(),
            PagerFilter.getUnlimitedFilter()
    )
    // Transform issues from DocumentIssueImpl to the "pure" form IssueImpl (some methods don't work with DocumentIssueImps)
    issues = searchResult.issues.collect {issueManager.getIssueObject(it.id)}
} else {
    log.error("Invalid JQL: " + jqlSearch);
}

for(currentIssue in issues) {
    //RemoteIssueLinkService.RemoteIssueLinkListResult links = remoteIssueLinkService.getRemoteIssueLinksForIssue(user, currentIssue)

    def link = new RemoteIssueLinkBuilder()
    link.issueId(currentIssue.getId())
    def cField = customFieldManager.getCustomFieldObject("customfield_10502") 
    link.url = currentIssue.getCustomFieldValue(cField)
    link.title = "title"
    link.summary = "cummary"
    link.relationship("Remote Link")
    link.build()
    def remoteIssueLinkService = ComponentManager.getComponentInstanceOfType(RemoteIssueLinkService.class)
    def validationResult = remoteIssueLinkService.validateCreate(authContext.getLoggedInUser(), link)
    //def createResult = remoteIssueLinkService.create(authContext.getLoggedInUser(), validationResult)
    //RemoteIssueLinkService.RemoteIssueLinkListResult links = remoteIssueLinkService.getRemoteIssueLinksForIssue(authContext.getLoggedInUser(), issue)
    log.info("Link Collection: " + validationResult.errorCollection)
}

 

But this script fails with:

Error
No signature of method: com.atlassian.jira.bc.issue.link.DefaultRemoteIssueLinkService.validateCreate() is applicable for argument types: (com.atlassian.jira.user.DelegatingApplicationUser, com.atlassian.jira.issue.link.RemoteIssueLinkBuilder) values: [Szostak_G(szostak_g), com.atlassian.jira.issue.link.RemoteIssueLinkBuilder@35493b38] Possible solutions: validateCreate(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.link.RemoteIssueLink), validateUpdate(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.link.RemoteIssueLink)

 

As I understand:

  1. com.atlassian.jira.bc.issue.link.DefaultRemoteIssueLinkService.validateCreate() takes two arguments of type ApplicationUser and RemoteIssueLink
  2. DelegatingApplicationUser implements ApplicationUser interface
  3. I don't understand why Groovy can not cast from DeletatingApplicationUser to ApplicationUser

I've tested different combinations from authContext like getUser, getUser() and other functions. But none works.

 

2 answers

Comments for this post are closed

Community moderators have prevented the ability to post new answers.

Post a new question

0 votes
Tarun Sapra
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
March 20, 2017

It seems the error is in your code

You are passing "RemoteIssueLinkBuilder" object in the "validateCreate() method instead of the "remoteIssueLink" object.

You should change the code to 

def validationResult = remoteIssueLinkService.validateCreate(authContext.getLoggedInUser(), link.build())

 

 

0 votes
nyxnyx March 16, 2017

Bump

TAGS
AUG Leaders

Atlassian Community Events