Instantiation of bean failed; Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke because "this." is null

Viewed 34

Controller:

import java.util.List;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class FunctionalRequirementController {

    @Autowired
    RequirementRepository requirementRepository;

    @Autowired
    private RequirementStrategy requirementStrategy;
    RequirementRepository strategy = requirementStrategy.findStrategy(Requirement.FunctionalRequirement);

    @GetMapping("/FunctionalRequirement")
    public List<Requirement> getAllFunctionalRequirements() {
        return requirementRepository.findAll();
    }

    @GetMapping("/FunctionalRequirement/{id}")
    public Requirement getRequirementById(@PathVariable(value = "id") Long requirementId) {
        return requirementRepository.findById(requirementId).orElseThrow();
    }

}

FunctionalRequirement:

import javax.persistence.*;


import org.springframework.stereotype.Component;

@Table(name = "functionalrequirement")
@Entity
@Component
public abstract class FunctionalRequirement implements RequirementRepository {
    @Override
    public Requirement getStrategyName() {
        return Requirement.FunctionalRequirement;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "idrisorsa")
    private Risorsa risorsa;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "idaction")
    private Action action;

    public Risorsa getRisorsa() {
        return risorsa;
    }

    public void setRisorsa(Risorsa risorsa) {
        this.risorsa = risorsa;
    }

    public Action getAction() {
        return action;
    }

    public void setAction(Action action) {
        this.action = action;
    }

}

Requirement:

public enum Requirement {
    FunctionalRequirement,
    NonFunctionalRequirement
}

RequirementStrategy:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class RequirementStrategy {
    private Map<Requirement, RequirementRepository> requirements;

    @Autowired
    public RequirementStrategy(Set<RequirementRepository> strategySet) {
        createStrategy(strategySet);
    }

    public RequirementRepository findStrategy(Requirement strategyName) {
        return requirements.get(strategyName);
    }

    private void createStrategy(Set<RequirementRepository> strategySet) {
        requirements = new HashMap<Requirement, RequirementRepository>();
        strategySet.forEach(strategy -> requirements.put(strategy.getStrategyName(), strategy));
    }

}

RequirementRepository:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RequirementRepository extends JpaRepository<Requirement, Long> {
     Requirement getStrategyName();
}

The error is:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'functionalRequirementController' defined in file [\Controllers\FunctionalRequirementController.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [Controllers.FunctionalRequirementController]: Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "Model.RequirementStrategy.findStrategy(Model.Requirement)" because "this.requirementStrategy" is null

Someone knows how to resolve? Thanks for help

0 Answers
Related