On Wed, Oct 14, 2015 at 9:11 AM, vinc...@massol.net <vinc...@massol.net> wrote: > > > On 14 Oct 2015 at 09:00:15, vinc...@massol.net > (vinc...@massol.net(mailto:vinc...@massol.net)) wrote: > >> >> >> On 14 Oct 2015 at 06:43:36, Marius Dumitru Florea >> (mariusdumitru.flo...@xwiki.com(mailto:mariusdumitru.flo...@xwiki.com)) >> wrote: >> >> > Hi Debajit, >> > >> > On Oct 14, 2015 01:17, "Debajit Adhikary" wrote: >> > > >> > > I created an XWiki component which is available as a jar file. >> > > >> > > I have a ScriptService class for the component too: >> > > >> > > ---- >> > > >> > > @Role >> > > public interface SearchClient >> > > { >> > > String search(); >> > > } >> > > >> > > ---- >> > > >> > > @Component >> > > @Singleton >> > > public class InternalSearchClient implements SearchClient >> > > { >> > > public String search() >> > > { >> > > return "test search results"; >> > > } >> > > } >> > > >> > > ---- >> > > >> > > @Component >> > > @Named("internalSearch") >> > > @Singleton >> > > public class InternalSearchScriptService implements ScriptService >> > > { >> > >> > > @Inject >> > > private InternalSearchClient searchClient; >> > >> > You need to "inject" the role (interface), not directly the implementation. >> > That's why you use the Component Manager. Othewise you could have simply >> > used the "new" operator to instantiate yourself the component. >> >> Good catch, didn’t see it when I replied yesterday! :) >> >> I guess we could catch this in the AnnotationComponentLoader and report an >> error. > > Actually, the Component Manager should raise an error if it fails to inject a > field. I was sure it was doing that, strange. I’ll debug it.
It does. > > Thanks > -Vincent > >> Thanks >> -Vincent >> >> > Hope this helps, >> > Marius >> > >> > > >> > > public String search() >> > > { >> > > return this.searchClient.search(); >> > > } >> > > } >> > > >> > > ---- >> > > >> > > I've added all the above files into their own jar with a components.txt >> > > file: >> > > >> > > com.mycompany.wiki.search.InternalSearchClient >> > > com.mycompany.wiki.search.InternalSearchScriptService >> > > >> > > and in my Wiki's pom.xml, I have the following: >> > > >> > > >> > > org.xwiki.commons >> > > xwiki-commons-script >> > > ${commons.version} >> > > >> > > >> > > >> > > Now from my Wiki page, when I do the following: >> > > >> > > {{groovy}} >> > > println(services.internalSearch.search()) >> > > {{/groovy}} >> > > >> > > I get an error message saying "java.lang.NullPointerException: Cannot >> > > invoke method search() on null object" >> > > >> > > What am I doing wrong here? >> > > >> > > (I followed the directions in >> > > http://platform.xwiki.org/xwiki/bin/view/DevGuide/WritingComponents — >> > > have >> > > these directions changed, and/or is there anything else I need to do? ) >> > > _______________________________________________ > users mailing list > users@xwiki.org > http://lists.xwiki.org/mailman/listinfo/users -- Thomas Mortagne _______________________________________________ users mailing list users@xwiki.org http://lists.xwiki.org/mailman/listinfo/users