Разработка плагина Jira, как получить экземпляр RapidViewServiceImpl - PullRequest
0 голосов
/ 16 марта 2020

Я разрабатываю плагин для отчетов Jira, используя Java, и мне нужно получить экземпляр класса RapidViewServiceImpl. Если я использую конструктор, я получаю исключение nullPtrException и думаю, что есть другой способ получить этот экземпляр. Например, у меня была точно такая же проблема с SprintManager и SprintManagerImpl, и я получаю следующий экземпляр:

private com.atlassian.greenhopper.service.sprint.SprintManager getSprintManager() throws InvalidSyntaxException {   
    ApplicationContext appCtx = (ApplicationContext) getGreenHopperAppCtx();
    if (appCtx != null) {
        return (com.atlassian.greenhopper.service.sprint.SprintManager) appCtx.getBean("sprintManagerImpl");
    }
    return null;
}

private Object getGreenHopperAppCtx() throws InvalidSyntaxException {
    OsgiContainerManager osgi = ComponentAccessor.getComponentOfType(OsgiContainerManager.class);
    if (osgi == null) {
        java.lang.System.out.println("OSGI Not Found");
        return null;
    }    
    Bundle[] bundles = osgi.getBundles();        
    for (int i = 0; i < bundles.length; i++) {
        Bundle bundle = bundles[i];    
        if ("com.pyxis.greenhopper.jira".equals(bundle.getSymbolicName())) {

            BundleContext bctx = bundle.getBundleContext();
            ServiceReference[] refs = bctx.getAllServiceReferences(null, null);
            if (refs != null) {
                for (int j = 0; j < refs.length; j++) {
                    Object prop = refs[j].getProperty("org.springframework.context.service.name");
                    if ("com.pyxis.greenhopper.jira".equals(prop)) {
                        return bctx.getService(refs[j]);
                    }
                }
            }
        }
    }
    return null;
}

И в основной функции я назвал SprintManager spManager = getSprintManager(). Я попробовал то же самое с RapidViewServiceImpl:

private Object getGreenHopperAppCtx() throws InvalidSyntaxException {
    OsgiContainerManager osgi = ComponentAccessor.getComponentOfType(OsgiContainerManager.class);
    if (osgi == null) {
        java.lang.System.out.println("OSGI Not Found");
        return null;
    }    
    Bundle[] bundles = osgi.getBundles();        
    for (int i = 0; i < bundles.length; i++) {
        Bundle bundle = bundles[i];    
        if ("com.pyxis.greenhopper.jira".equals(bundle.getSymbolicName())) {

            BundleContext bctx = bundle.getBundleContext();
            ServiceReference[] refs = bctx.getAllServiceReferences(null, null);
            if (refs != null) {
                for (int j = 0; j < refs.length; j++) {
                    Object prop = refs[j].getProperty("org.springframework.context.service.name");
                    if ("com.pyxis.greenhopper.jira".equals(prop)) {
                        return bctx.getService(refs[j]);
                    }    
                }
            }
        }
    }
    return null;
}    
//------------------------------------------------------------------------------------------------------------------
private com.atlassian.greenhopper.service.rapid.view.RapidViewService getRapidViewManager() throws InvalidSyntaxException {    
    ApplicationContext appCtx = (ApplicationContext) getGreenHopperAppCtx();
    if (appCtx != null) {
        return (RapidViewService) appCtx.getBean("rapidViewService");
    }
    return null;
}

Но я получаю сообщение об ошибке, которое говорит, что нет пакета с именем "rapidViewService". Это часть ошибки, я не могу опубликовать всю ошибку, потому что она слишком длинная:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'rapidViewService' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698) [spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1175) [spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) [spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) [spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) [spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at com.jiraPlugin.utility.SprintManager.getRapidViewManager(SprintManager.java:72) [?:?]
    at com.jiraPlugin.utility.SprintManager.getListOfSprints(SprintManager.java:95) [?:?]
    at com.jiraPlugin.utility.GetSprintsForUI.getValues(GetSprintsForUI.java:35) [?:?]
    at com.atlassian.configurable.ValuesGeneratorObjectConfigurationProperty.getInternalValues(ValuesGeneratorObjectConfigurationProperty.java:75) [classes/:?]
    at com.atlassian.configurable.ObjectConfigurationPropertyImpl.entrySet(ObjectConfigurationPropertyImpl.java:266) [classes/:?]
    at com.atlassian.jira.plugin.corereports.web.action.ConfigureReport.mapAndConvertToList(ConfigureReport.java:383) [?:?]
    at com.atlassian.jira.plugin.corereports.web.action.ConfigureReport.access$000(ConfigureReport.java:53) [?:?]
    at com.atlassian.jira.plugin.corereports.web.action.ConfigureReport$ObjectConfigurationField.getValues(ConfigureReport.java:440) [?:?]
    ... 387 more

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 16 марта 2020

Я решил проблему с помощью класса ProjectRapidViewServiceImpl, и я получил экземпляр этого класса, используя пакет с именем "projectRapidViewServiceImpl"

private com.atlassian.greenhopper.service.rapid.ProjectRapidViewService getRapidViewManager() throws InvalidSyntaxException {    
    ApplicationContext appCtx = (ApplicationContext) getGreenHopperAppCtx();
    if (appCtx != null) {
        return (ProjectRapidViewServiceImpl) appCtx.getBean("projectRapidViewServiceImpl");
    }
    return null;
}

И этот класс имеет функцию с именем findRapidViewsByProject(com.atlassian.jira.user.ApplicationUser user, com.atlassian.jira.project.Project project), которая возвращает список RapidView, связанных с проектом.

...