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
[email protected]
http://lists.xwiki.org/mailman/listinfo/users