[xwiki-users] Components from the wiki
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! -- Lewis
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/... (search for registerComponent). Hope it helps, -Vincent
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 <[email protected]> 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/... (search for registerComponent).
Hope it helps, -Vincent _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
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 <[email protected]> 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 <[email protected]> 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/... (search for registerComponent).
Hope it helps, -Vincent _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
On Dec 3, 2009, at 4:34 PM, Lewis Denizen 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 //... }
You'd need to use the annotation loader to do that. new ComponentAnnotationLoader().initialize(componentManager, classloader) However note that it'll re-register all components for which it finds annotations. I guess you could also use the ComponentDescriptorFactory class which would be much simpler since you pass to it the class to configure. See http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-component/xwiki... Thanks -Vincent
Thanks again for a great wiki!
On Wed, Dec 2, 2009 at 3:56 AM, Vincent Massol <[email protected]> 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/... (search for registerComponent).
Hope it helps, -Vincent
On Dec 3, 2009, at 5:14 PM, Lewis Denizen wrote:
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?
Nothing to do. It just works normally. We're using that in some tests so it should work fine. Basically you register your component with deps and next time you do a lookup() it'll get instantiated and its dependencies too. -Vincent
On Fri, Dec 4, 2009 at 12:34 AM, Lewis Denizen <[email protected]> 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 <[email protected]> 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/... (search for registerComponent).
Hope it helps, -Vincent
Thanks again, Vincent! Yup, ComponentDescriptorFactory did the magic :-D On Dec 4, 2009, at 1:39 AM, Vincent Massol <[email protected]> wrote:
On Dec 3, 2009, at 4:34 PM, Lewis Denizen 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 //... }
You'd need to use the annotation loader to do that. new ComponentAnnotationLoader().initialize(componentManager, classloader)
However note that it'll re-register all components for which it finds annotations.
I guess you could also use the ComponentDescriptorFactory class which would be much simpler since you pass to it the class to configure.
See http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-component/xwiki...
Thanks -Vincent
Thanks again for a great wiki!
On Wed, Dec 2, 2009 at 3:56 AM, Vincent Massol <[email protected]> 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/... (search for registerComponent).
Hope it helps, -Vincent
users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
participants (2)
-
Lewis Denizen -
Vincent Massol