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.

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

Reply via email to