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

Reply via email to