Thanks Vincent! That's exactly what I needed :-) Just one more question, though.. Is it possible to inject dependencies by using the attributes defined within the class then? Right now, using the DefaultComponentDescriptor, I can inject dependencies using:
componentDescriptor.addComponentDependency(QueryManager.class, "default") but would be nice if it could auto-inject into something like: class UserXWQLDAO implements UserDAO { @Requirement def QueryManager queryManager //... } Thanks again for a great wiki! On Wed, Dec 2, 2009 at 3:56 AM, Vincent Massol <vinc...@massol.net> wrote: > Hi Lewis, > > On Dec 1, 2009, at 7:12 PM, Lewis Denizen wrote: > > > Hi xwiki-users, > > > > I'm trying to bootstrap a component from the wiki itself (via > > Groovy). I > > have an interface defined as follows: > > > > // This is the text inside the User.UserDAO document > > {{groovy}} > > interface UserDAO > > { > > def ROLE = UserDAO.class.name > > > > /** > > * Returns the current user name. > > */ > > def getUserName() > > > > /** > > * Returns the current user's password > > */ > > def getPassword() > > } > > {{/groovy}} > > > > I also have a dummy implementation defined as follows: > > > > // This is the text inside the User.UserXWQLDAO document > > {{include document="User.UserDAO" /}} > > {{groovy}} > > import org.xwiki.component.annotation.Component > > import org.xwiki.component.annotation.Requirement > > import org.xwiki.component.descriptor.DefaultComponentDescriptor > > import org.xwiki.query.Query > > import org.xwiki.query.QueryManager > > > > import com.xpn.xwiki.web.Utils > > > > @Component(roles = [ UserDAO.class ]) > > class UserXWQLDAO implements UserDAO > > { > > @Requirement > > def QueryManager queryManager > > > > /** > > * Returns the current user name. > > */ > > def getUserName() { > > return "bleh" > > } > > > > /** > > * Returns the current user's password > > */ > > def getPassword() { > > return "bleh" > > } > > } > > > > if(!Utils.componentManager.hasComponent(UserDAO.class)) > > { > > def componentDescriptor = new DefaultComponentDescriptor() > > componentDescriptor.setImplementation(UserDAO.class) > > > > Utils.componentManager.registerComponent(componentDescriptor, new > > UserXWQLDAO()) > > } > > {{/groovy}} > > > > The first problem I ran into was that Groovy 1.6.5 ran into > > IncompatibleClassChangeErrors ( > http://jira.codehaus.org/browse/GROOVY-3830 > > ). > > Upgrading to 1.6.6 fixed this issue. But, then I ran into a NPE: > > > > *exception* > > > > javax.servlet.ServletException: Failed to initialize Request/ > > Response or Session > > > > com > > .xpn > > .xwiki.web.XWikiAction.initializeContainerComponent(XWikiAction.java: > > 391) > > > > com > > .xpn.xwiki.web.XWikiAction.initializeXWikiContext(XWikiAction.java: > > 372) > > com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:112) > > > > org > > .apache > > .struts > > .action.RequestProcessor.processActionPerform(RequestProcessor.java: > > 431) > > > > org > > .apache.struts.action.RequestProcessor.process(RequestProcessor.java: > > 236) > > org.apache.struts.action.ActionServlet.process(ActionServlet.java: > > 1196) > > > org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) > > javax.servlet.http.HttpServlet.service(Unknown Source) > > javax.servlet.http.HttpServlet.service(Unknown Source) > > > > com > > .xpn > > .xwiki > > .wysiwyg > > .server.filter.ConversionFilter.doFilter(ConversionFilter.java:152) > > com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:119) > > > > com > > .xpn.xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java: > > 68) > > > > com > > .xpn > > .xwiki > > .web > > .SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java: > > 295) > > > > com > > .xpn > > .xwiki > > .web > > .SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java: > > 112) > > > > *root cause* > > > > org.xwiki.container.servlet.ServletContainerException: Failed to > > initialize request > > > > org > > .xwiki > > .container > > .servlet > > .internal > > .DefaultServletContainerInitializer > > .initializeRequest(DefaultServletContainerInitializer.java:98) > > > > com > > .xpn > > .xwiki.web.XWikiAction.initializeContainerComponent(XWikiAction.java: > > 387) > > > > com > > .xpn.xwiki.web.XWikiAction.initializeXWikiContext(XWikiAction.java: > > 372) > > com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:112) > > > > org > > .apache > > .struts > > .action.RequestProcessor.processActionPerform(RequestProcessor.java: > > 431) > > > > org > > .apache.struts.action.RequestProcessor.process(RequestProcessor.java: > > 236) > > org.apache.struts.action.ActionServlet.process(ActionServlet.java: > > 1196) > > > org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) > > javax.servlet.http.HttpServlet.service(Unknown Source) > > javax.servlet.http.HttpServlet.service(Unknown Source) > > > > com > > .xpn > > .xwiki > > .wysiwyg > > .server.filter.ConversionFilter.doFilter(ConversionFilter.java:152) > > com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:119) > > > > com > > .xpn.xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java: > > 68) > > > > com > > .xpn > > .xwiki > > .web > > .SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java: > > 295) > > > > com > > .xpn > > .xwiki > > .web > > .SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java: > > 112) > > > > *root cause* > > > > java.lang.NullPointerException > > > > > > Haven't investigated any further than this, but has anyone > > successfully > > created components completely within a wiki document? That would > > just be so > > cool! Great work! > > Yes, I've done that several times. > > Here's an example: > > http://svn.xwiki.org/svnroot/xwiki/platform/xwiki-applications/trunk/ircbot/src/main/resources/IRC/JiraBotlet.xml > (search for registerComponent). > > Hope it helps, > -Vincent > _______________________________________________ > users mailing list > users@xwiki.org > http://lists.xwiki.org/mailman/listinfo/users > _______________________________________________ users mailing list users@xwiki.org http://lists.xwiki.org/mailman/listinfo/users