Error when trying to uses classes of GreenHopper plugin

Edgar Hernandez Meraz November 8, 2017

Hi,

I am trying to create a report accessing information of sprints. I am adding the greenhopper plugin in the pom.xml file:

 

<dependency>
<groupId>com.atlassian.jira.plugins</groupId>
<artifactId>jira-greenhopper-plugin</artifactId>
<version>${jira.greenhoper.version}</version>
<scope>provided</scope>
</dependency>

 However when I try to use some classes in the constructor class:

private final RapidViewService rapidViewService;
private final VelocityChartModelFactory velocityChartModelFactory;



public BugPieReport(JiraAuthenticationContext authenticationContext, ApplicationProperties applicationProperties,
ProjectManager projectManager, SearchRequestService searchRequestService, ChartUtils chartUtils,
ChartFactory chartFactory,RapidViewService rapidViewService, VelocityChartModelFactory velocityChartModelFactory) {
super(authenticationContext, applicationProperties, projectManager, searchRequestService, chartUtils);
this.chartFactory = chartFactory;
this.jiraAuthenticationContext = authenticationContext;
this.rapidViewService = rapidViewService;
this.velocityChartModelFactory = velocityChartModelFactory;
}

I get the following error:
1 plugin failed to load during JIRA startup.

'com.atlassian.plugins.tutorial.jira.jira-report-plugin' - 'jira-report-plugin' failed to load.
Unexpected exception parsing XML document from URL [bundle://153.0:0/META-INF/spring/plugin-context.xml]; nested exception is java.lang.NullPointerException
null

It was loaded from E:\QSCPC880_EHM_Backup\Reports\Plugins\Version2\jira-report-plugin\target\jira\home\plugins\installed-plugins\jira-report-plugin-2.10-SNAPSHOT.jar


I then tried, adding the @ComponentImport in greenhopper classes:


public BugPieReport(JiraAuthenticationContext authenticationContext, ApplicationProperties applicationProperties,
ProjectManager projectManager, SearchRequestService searchRequestService, ChartUtils chartUtils,
ChartFactory chartFactory,@ComponentImport RapidViewService rapidViewService, @ComponentImport VelocityChartModelFactory velocityChartModelFactory) {
super(authenticationContext, applicationProperties, projectManager, searchRequestService, chartUtils);
this.chartFactory = chartFactory;
this.jiraAuthenticationContext = authenticationContext;
this.rapidViewService = rapidViewService;
this.velocityChartModelFactory = velocityChartModelFactory;
}

But get this error:

[c.atlassian.ozymandias.SafePluginPointAccess] Unable to run plugin code because of 'org.springframework.beans.factory.UnsatisfiedDependencyException - Error creating bean with name 'com.atlassian.plugins.tutorial.jira.reports.BugPieReport': Unsatisfied dependency expressed through constructor argument with index 6 of type [com.atlassian.greenhopper.service.rapid.view.RapidViewService]: No qualifying bean of type [com.atlassian.greenhopper.service.rapid.view.RapidViewService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value=)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.atlassian.greenhopper.service.rapid.view.RapidViewService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value=)}'.


What am I missing?, what is the correct way to use classes of the GreenHopper Plugin in a custom plugin?. Thanks.

Regards,

Edgar

 

1 answer

0 votes
Edgar Hernandez Meraz November 9, 2017

I realized that in order to import components from other plugins i need to use also the @Scanned and @Autowired annotations, besides the @ComponentImport. I added these and could make it work:

 

@Scanned
public class BugPieReport extends AbstractChartReport {

private final ChartFactory chartFactory;
private final JiraAuthenticationContext jiraAuthenticationContext;

private final RapidViewService rapidViewService;
//private final VelocityChartModelFactory velocityChartModelFactory;

@Autowired
public BugPieReport(JiraAuthenticationContext authenticationContext, ApplicationProperties applicationProperties,
ProjectManager projectManager, SearchRequestService searchRequestService, ChartUtils chartUtils,
ChartFactory chartFactory, @ComponentImport RapidViewService rapidViewService/*, @ComponentImport VelocityChartModelFactory velocityChartModelFactory*/) {
super(authenticationContext, applicationProperties, projectManager, searchRequestService, chartUtils);
this.chartFactory = chartFactory;
this.jiraAuthenticationContext = authenticationContext;
this.rapidViewService = rapidViewService;
//this.velocityChartModelFactory = velocityChartModelFactory;
}

But only for the RapidViewService class. I took a look at code of GreenHopper plugin and noticed that this class is exposed in the atlassian-plugin.xml file:

<component key="greenhopper-rapidview-service" name="Rapid View Service" class="com.atlassian.greenhopper.service.rapid.view.RapidViewServiceImpl" public="true"><interface>com.atlassian.greenhopper.service.rapid.view.RapidViewService</interface></component>

But unfortunately not the VelocityChartModelFactory class. That's why I am getting this error in the log:


'com.atlassian.plugins.tutorial.jira.jira-report-plugin' - 'jira-report-plugin' failed to load.
The plugin has been disabled. A likely cause is that it timed out during initialisation

It has the following missing service dependencies :
&velocityChartModelFactory of type (&(objectClass=com.atlassian.greenhopper.web.rapid.chart.VelocityChartModelFactory)(objectClass=com.atlassian.greenhopper.web.rapid.chart.VelocityChartModelFactory))

So I am looking how to include that class. I see that only the javascript controllers are exposed for that class in the atlassian-plugin.xml file.

If someone has a clue how to avoid the above error, would be appreciated.

Regards,

Edgar

Suggest an answer

Log in or Sign up to answer