Never resolved service exception for Jira Rest plugin classes

We are working on to extend Jira Rest Api and using atlassian spring scanner version 1.2.13.
When we try to use ProjectBeanFactory on our rest module, we are getting an error like as below and we could not enable our plugin;

[INFO] [talledLocalContainer] 2017-08-31 03:54:49,738 QuickReload - Plugin Installer ERROR      [c.a.p.osgi.factory.OsgiPlugin] Plugin 'com.kostebekteknoloji.plugins.jira.jira-ca-integration' never resolved service '&projectBeanFactory' with filter '(&(objectClass=com.atlassian.jira.rest.v2.issue.project.ProjectBeanFactory)(objectClass=com.atlassian.jira.rest.v2.issue.project.ProjectBeanFactory))'

We added dependencies

    <dependencies>
        <dependency>
            <groupId>com.atlassian.jira</groupId>
            <artifactId>jira-api</artifactId>
            <version>${jira.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.jira</groupId>
            <artifactId>jira-core</artifactId>
            <version>${jira.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.atlassian.plugin</groupId>
            <artifactId>atlassian-spring-scanner-annotation</artifactId>
            <version>${atlassian.spring.scanner.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.plugin</groupId>
            <artifactId>atlassian-spring-scanner-runtime</artifactId>
            <version>${atlassian.spring.scanner.version}</version>
            <scope>runtime</scope>
        </dependency>

		<!-- REST -->
 		<dependency>
			<groupId>javax.ws.rs</groupId>
			<artifactId>jsr311-api</artifactId>
			<version>1.1.1</version>
			<scope>provided</scope>
		</dependency>
 		<dependency>
			<groupId>com.atlassian.plugins.rest</groupId>
			<artifactId>atlassian-rest-common</artifactId>
			<version>3.2.11</version>
			<scope>provided</scope>
		</dependency> 
            <groupId>com.atlassian.jira</groupId>
            <artifactId>jira-rest-plugin</artifactId>
            <version>${jira.version}</version>
            <scope>provided</scope>
        </dependency>
                <dependency>
            <groupId>com.atlassian.jira.plugins</groupId>
            <artifactId>jira-core-project-templates-api</artifactId>
            <version>${project.templates.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.jira.plugins</groupId>
            <artifactId>project-templates-api</artifactId>
            <version>${project.templates.version}</version>
            <scope>provided</scope>
        </dependency>
                <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

Moreover, we imported packages like as;

                    <instructions>
                        <Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>
                        <!-- Add package to export here -->

                        <!-- Add package import here -->
                        <Import-Package>
                         com.atlassian.jira.rest.api.*;version="${jira.version}",
                         com.atlassian.jira.rest.v1.*;version="${jira.version}",
                         com.atlassian.jira.rest.v2.*;version="${jira.version}"
                         com.atlassian.jira.rest.util;version="${jira.version}",
                         javax.ws.rs.*,
                         
                            *;resolution:=optional
                        </Import-Package>
 
                    </instructions>

Lastly, our constructor l

.....
@Scanned
@Path("customproject")
@AnonymousAllowed
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class CustomProjectResource {
    
    private final ProjectService projectService;
    private final UserManager userManager;
    private final JiraAuthenticationContext authContext;
    private final UriInfo uriInfo;
    private final ProjectManager projectManager;
    private final ProjectBeanFactory projectBeanFactory;
    private final ProjectFinder projectFinder;
    private final ResponseFactory responses;
    private final I18nHelper i18nHelper; 
    private final CoreProjectConfigurator coreProjectConfigurator;

    @Autowired
    public CustomProjectResource(
            @ComponentImport final ProjectService projectService,
            @ComponentImport final JiraAuthenticationContext authContext,
            @ComponentImport final UserManager userManager,
            @ComponentImport final UriInfo uriInfo,

            @ComponentImport final ProjectBeanFactory projectBeanFactory,
            @ComponentImport final ProjectManager projectManager,
            @ComponentImport final ProjectFinder projectFinder,
            @ComponentImport final ResponseFactory responses,
            @ComponentImport final I18nHelper i18nHelper,
            @ComponentImport final CoreProjectConfigurator coreProjectConfigurator) {

        this.projectFinder = projectFinder;
        this.responses = responses;
        this.i18nHelper = i18nHelper;

        this.projectService = projectService;
        this.authContext = authContext;
        this.userManager = userManager;
        this.projectBeanFactory = projectBeanFactory;

        this.uriInfo = uriInfo;
        this.projectManager = projectManager;
        this.coreProjectConfigurator = coreProjectConfigurator;
    }
......

Hi, @mkaradagli. ProjectBeanFactory is not a component nor a service, hence in my understanding, it cannot be injected this way. I’m not sure about your use case, but I’m going to suggest that you can inject com.atlassian.jira.bc.project.ProjectService. Checking your constructor, I believe you already used ProjectService.

Are there any way to use ProjectBeanFactory ?

Best regards,

The ProjectBeanFactory is not an exported OSGI package so you cannot inject it with SpringScanner.

To use ProjectBeanFactory and if you’ll only need it in a class, although I haven’t personally tried it yet, I’ll instantiate it the old school way via ProjectBeanFactory projectBeanFactory = new ProjectBeanFactoryImpl(...).