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