Hi Debajit,
On Oct 14, 2015 01:17, "Debajit Adhikary" <debajit(a)debajit.com> 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.
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:
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-script</artifactId>
<version>${commons.version}</version>
</dependency>
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(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users