Extending CQ native commerce provider API
Hi there ,
I have started exploring cq commerce and as part of it was trying to extend the CQ native API . Referring the article from here http://helpx.adobe.com/adobe-cq/using/creating-custom-cq-commerce-providers.html , i have deployed my extended CQ commerce classes in felix console as a OSGI bundle . My custom CQ commerce provider is 'training' .
However in geometrixx / en pages when I change 'cq:commerceprovider' property to 'training' and start using the pages it throws Null pointer exceptions in the back end with no products getting displayed on the category pages .
My debugger pointed out to getServiceContext method from OOTB class 'AbstractJcrCommerceServiceFactory' . It seems that AbstractJcrCommerceServiceFactory has service dependencies via @ reference to set of services like languagemanager , slingRepository etc which should normally gets injected . The getServiceContext method basically gives handles to these set of injected references .
These services are injecting as expected when I'm using the OOTB reference commerce provider implementation('geometrixx') which by default ships in with CQ installation . However when I change the provider to 'training' these services are not getting injected and getserviceContext returns null,which eventually is throwing null pointer exception .
I see the same behaviour when I deploy my bundle from 'crxde' or 'eclipse ' . I was on java 1.7 and also tested it in java 1.6 . From felix console I can see the bundle properly registered . Any pointers why these services not getting injected ?
@Component(componentAbstract = true, metatype = false) public abstract class AbstractJcrCommerceServiceFactory implements CommerceServiceFactory { @Reference protected LanguageManager languageManager; @Reference protected UserPropertiesService userPropertiesService; @Reference protected SlingSettingsService slingSettingsService; @Reference protected SlingRepository slingRepository; @Reference protected CommerceSearchProviderManager searchProviderManager;