Actually... seems like componentDescriptor.addComponentDependency() doesn't add the dependency either :-( Just ends up being null when retrieving it. Is there something that needs to be done before injection happens on these objects?
On Fri, Dec 4, 2009 at 12:34 AM, Lewis Denizen <orang...@gmail.com> wrote: > 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