Reputation: 392
In the below code I am using inAppPurchaseService
to call its function, but at runtime its showing me null
when I print inAppPurchaseService
public class SubscriptionChecker {
private static final Logger log =Logger.getLogger(SubscriptionChecker.class);
@Autowired
private EmployerService employerService;
@Autowired
private InAppPurchaseService inAppPurchaseService;
private static final RenewalCheckStrategy STRATEGY_APPLE
= new AppleRenewalCheckStrategyImpl();
private static final RenewalCheckStrategy STRATEGY_GOOGLE
= new GoogleRenewalCheckStrategyImpl();
public boolean checkSubscription(User user) throws IOException, HunterException{
boolean res = false;
OptedPlan optedPlan = getCurrentSubscription(user);
switch (optedPlan.getPlanType()){
case FREE: res = checkFreeSubscription(optedPlan);
break;
case PREMIUM: res = checkPremiumSubscription(optedPlan,user);
break;
}
return res;
}
/**
*
* @param optedPlan
* @return
*/
public boolean checkFreeSubscription(OptedPlan optedPlan ){
optedPlan.setPlanExpired(HunterUtil.isPlanExpired(optedPlan.getPlanExpirationDate()));
optedPlan.setPlanActive(HunterUtil.isPlanActive(optedPlan.getPlanActiveDate()));
//log.info("checkFreeSubscriptionResponse:: "+(optedPlan.isPlanActive())?(optedPlan.getMaxConnectionCount()>0 && optedPlan.getMaxJobCount()>0):true);
return(optedPlan.isPlanActive())?(optedPlan.getMaxConnectionCount()>0 || optedPlan.getMaxJobCount()>0):true;
}
private boolean checkPremiumSubscription(OptedPlan optedPlan,User user) throws IOException, HunterException{
boolean res = false;
Date now = new Date();
optedPlan.setPlanExpired(HunterUtil.isPlanExpired(optedPlan.getPlanExpirationDate()));
Employer employer=(Employer)user;
//First check stored expiry date
log.info("checkPremiumSubscription:: "+optedPlan.isPlanExpired());
if(optedPlan.isPlanExpired()){
// If expired, check for renewal
optedPlan =
getRenwRenewalCheckStrategy(optedPlan).getRenewal(optedPlan,user);
employer.setOptedPlan(optedPlan);
employerService.save(employer);
if (optedPlan != null){
// Renewal found: check date and update information in db
res = optedPlan.getPlanExpirationDate().after(now);
log.info("checkPremiumSubscriptionFlag:: "+optedPlan.getPlanExpirationDate().after(now));
}
}
return res;
}
private OptedPlan getCurrentSubscription(User user) throws HunterException{
Employer employer=(Employer)user;
log.info("getCurrentSubscriptionResponse:: "+(HunterUtil.isNull(employer.getOptedPlan())?inAppPurchaseService.setFreePlanInEmployer(new StripeChargeTokenDto("FREE",DeviceType.ANDROID), employer)
:employer.getOptedPlan()));
return (HunterUtil.isNull(employer.getOptedPlan())?inAppPurchaseService.setFreePlanInEmployer(new StripeChargeTokenDto("FREE",DeviceType.ANDROID), employer)
:employer.getOptedPlan());
}
private RenewalCheckStrategy getRenwRenewalCheckStrategy(OptedPlan optedPlan){
RenewalCheckStrategy res = null;
res = (optedPlan.getDeviceType().equals(DeviceType.ANDROID))?STRATEGY_GOOGLE:STRATEGY_APPLE;
return res;
}
}
My inAppPurchaseService
is like
public interface InAppPurchaseService extends GenericService<BillingDetails> {
OptedPlan setFreePlanInEmployer(StripeChargeTokenDto stripeChargeTokenDto,Employer employer)throws HunterException;
String gettingResponseForReceiptValidation(InAppPurchaseReceiptDto inAppPurchaseReceiptDto,Employer employer) throws HunterException;
JSONObject createRequestForValidation(String inAppPurchaseReceipt,Employer employer) throws HunterException;
void receiptForSuccessTransaction(InAppPurchaseReceiptResponse inAppResponse, Employer employer);
void updateOptedPlanOfEmployer(InAppPurchaseReceiptResponse inAppResponse, Employer emp,String productId,DeviceType deviceType) throws HunterException;
}
Also please note on InAppPurchaseServiceImpl
I have added @Service
annotations in my code.
Upvotes: 1
Views: 344
Reputation: 1474
In the top of class of SubscriptionChecker should be @Component
, because SubscriptionChecker is not initialized by spring context.
Upvotes: 1
Reputation: 2701
Your SubscriptionChecker isn't managed by Spring.
For @Autowired annotation to work you have to annotate that class with either
@Component
@Service
@Controller
@Repository
Upvotes: 0