You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jira创建关联Issue时新ID为空引发空指针异常的解决咨询

问题描述

我想要为一个超级功能Issue创建Feature类型的关联Issue,编写了如下代码:

void createFeature(Issue issue, List<String> componentList){

    // Issue issue

//def issueManager = ComponentAccessor.issueManager

//def issueFactory = ComponentAccessor.issueFactory

def issueLinkManager = ComponentAccessor.issueLinkManager

//def userManager = ComponentAccessor.userManager

def authenticationContext = ComponentAccessor.jiraAuthenticationContext

def issueFactory = ComponentAccessor.getIssueFactory()

def issueManager = ComponentAccessor.getIssueManager()

def userManager = ComponentAccessor.getUserUtil()

 def currentUserObj = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();

MutableIssue newIssue= ComponentAccessor.issueFactory.issue

newIssue.setProjectObject(issue.getProjectObject())

newIssue.setSummary("MOUNA CAMELIA")

newIssue.setIssueTypeId("19")

int issueLinkType= 10070

long sequence =1

long newissueTypeID= 19

long myissueID= issue.getId()

 MutableIssue newissue

newissue = issueFactory.getIssue()

//set values

newissue.setProjectObject(issue.projectObject)

newissue.setIssueTypeId("19") 

newissue.setSummary("MOUNA CAMELIA")

newissue.setDescription("MOUNA CAMELIA")

newissue.reporter = issue.getReporter()

def newIssueCreated = issueManager.createIssueObject(currentUserObj, newissue)

newIssue.setDescription(issue.getDescription())

                for(String component: componentList){
                    log.warn("MOUNA CAMELIA component"+ component +" NEW ISSUE "+ newIssue)
                     log.warn("MOUNA CAMELIA Component ====="+ component+"===== myissueID ====="+ myissueID+" =====newissueTypeID ====="+newissueTypeID +" =====issueLinkType ====="+issueLinkType 

                     +" =====sequence ====="+ sequence +" =====authenticationContext.getLoggedInUser() ====="+authenticationContext.getLoggedInUser()+" newIssue.getId() "+newIssue.getId())                

                    issueLinkManager.createIssueLink(myissueID, newIssue.getId(), issueLinkType, sequence, authenticationContext.getLoggedInUser())
                }

}

调用issueLinkManager.createIssueLink(myissueID, newIssue.getId(), issueLinkType, sequence, authenticationContext.getLoggedInUser())设置关联Issue时触发空指针异常,原因是newIssue.getId()返回null,且无法手动分配Issue ID,请问如何让Jira自动生成该ID以避免空指针异常?

问题原因与解决方法

核心问题

代码里存在变量混淆:同时创建了newIssue和newissue两个MutableIssue对象,实际被Jira持久化的是newissue,但后续关联操作却用了从未被保存的newIssue——这个对象未进入Jira数据库,自然没有自动生成的ID,导致空指针。

修正步骤

  1. 删除冗余对象:移除未被持久化的newIssue变量,统一使用newissue(建议重命名为更清晰的featureIssue,避免拼写混淆)。
  2. 使用持久化后的对象ID:issueManager.createIssueObject()返回的newIssueCreated是已经完成持久化的Issue对象,自带Jira自动生成的ID,关联操作必须用这个对象的ID。
  3. 提前设置字段:如果需要继承原Issue的描述,要在调用createIssueObject()前设置到待创建的Issue对象上,否则持久化后再设置不会生效。

修正后的代码

void createFeature(Issue issue, List<String> componentList){
    def issueLinkManager = ComponentAccessor.issueLinkManager
    def authenticationContext = ComponentAccessor.jiraAuthenticationContext
    def issueFactory = ComponentAccessor.getIssueFactory()
    def issueManager = ComponentAccessor.getIssueManager()
    def currentUserObj = authenticationContext.getLoggedInUser()

    // 创建待生成的Feature Issue对象
    MutableIssue featureIssue = issueFactory.getIssue()
    featureIssue.setProjectObject(issue.getProjectObject())
    featureIssue.setIssueTypeId("19")
    featureIssue.setSummary("MOUNA CAMELIA")
    // 提前设置描述,确保持久化后生效
    featureIssue.setDescription(issue.getDescription())
    featureIssue.setReporter(issue.getReporter())

    // 持久化Issue,获取带自动生成ID的对象
    Issue createdFeatureIssue = issueManager.createIssueObject(currentUserObj, featureIssue)
    if (!createdFeatureIssue) {
        log.error("Feature Issue创建失败")
        return
    }

    long originalIssueId = issue.getId()
    int issueLinkType = 10070
    long sequence = 1

    for(String component : componentList){
        log.warn("关联组件:{},原Issue ID:{},新Feature Issue ID:{}", 
                  component, originalIssueId, createdFeatureIssue.getId())
        // 使用持久化后的ID创建关联
        issueLinkManager.createIssueLink(
            originalIssueId, 
            createdFeatureIssue.getId(), 
            issueLinkType, 
            sequence, 
            currentUserObj
        )
    }
}

关键说明

  • Jira的Issue ID只有在对象被持久化到数据库后才会自动生成,必须通过issueManager.createIssueObject()或issueManager.createIssue()完成持久化,返回的对象才会有有效ID。
  • 避免创建多个未使用的MutableIssue对象,防止变量混淆引发错误。
  • 调用createIssueObject()后建议添加非空判断,避免因创建失败导致后续操作异常。

内容的提问来源于stack exchange,提问作者منى

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:15:01