Error when trying to uses classes of GreenHopper plugin

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

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
How to earn badges on the Atlassian Community

How to earn badges on the Atlassian Community

Badges are a great way to show off community activity, whether you’re a newbie or a Champion.

Learn more
Community showcase
Published yesterday in Jira Software

How large do you think Jira Software can grow?

Hi Atlassian Community! My name is Shana, and I’m on the Jira Software team. One of the many reasons this Community exists is to connect you to others on similar product journeys or with comparabl...

125 views 4 5
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you