[Building Sakai] Use Sakai Help Tool to access customized external help source?

Walters, Cynthia (cmw6s) cmw6s at eservices.virginia.edu
Wed Nov 30 12:47:52 PST 2011


Hi Jon:
Thanks for the memories :-)  Your clarifications are very helpful.  I'll revisit the Michigan example with these tips in mind.  I assume 'restart your server' means 'restart tomcat', but if not please write me back (I have been restarting tomcat between tests.)

Cheers,
Cynthia

________________________________
From: Jon Hays [jonmhays at media.berkeley.edu]
Sent: Wednesday, November 30, 2011 3:06 PM
To: Walters, Cynthia (cmw6s)
Cc: sakai-dev at collab.sakaiproject.org
Subject: Re: [Building Sakai] Use Sakai Help Tool to access customized external help source?


Hi Cynthia,



It has been a while since I've tread this ground and I'm sure that there are others who have a better handle on it, but I remember a few things:



1. The current tool's help.xml isn't used.  The help.xml for externally hosted pages is for the entire help system and needs to have all of the pages included because it is how the index is built.  Take another look at how michigan has structured their example.



2. The files don't need to be in one directory since you are providing the paths for each page in the help.xml



3. You will need to restart your server to force the index to be rebuilt.



best,



Jon



On Wed, 30 Nov 2011 17:48:59 +0000, "Walters, Cynthia (cmw6s)" <cmw6s at eservices.virginia.edu> wrote:

P {margin-top:0;margin-bottom:0;} -->
Hello:

I've been reading past references about how to change the default behavior of the Help Tool to read external help files that have been customized.  I've not been successful in my attempts to get this to work with Sakai 2.7.1 so far, and wonder if someone with knowledge of the tool and/or a similar set-up could give me some guidance with questions I have?

We want the online help files to be editable by non-programming staff.  We would like the help source files located on a shared file system such that Sakai Help Tool knows how to access them, and the trusted members of our support team can edit/customize them without the need to rebuild and redeploy as in the default help tool configuration.

Thanks in advance for help with this - questions follow,
Cynthia Gast Walters @ UVa


What do we need to change, from the default configuration, to get this to work?
These are the steps I've taken so far, but it is not working yet:
    a)  Copy each tool's help files source and help.xml file to our external location. (testing with only announcements, assignments)
             - Do all the tool's HTML files need to be in one directory, or can per-tool sub-directories be used?

    b)  Create a 'help.xml' file (see contents below) patterned after https://confluence.sakaiproject.org/display/HELP/Help+Configuration+Examples, but using the distributed help files.

    c)  Set sakai.properties to include "help.location=" a URL for the shared location.
             - Our example: help.location=http://collab-dev.itc.virginia.edu/usr/local/sakai/content/docs/help

    d)  How is the current tool's help.xml file used (if at all)?  (it contains spring bean syntax...)

    e)  Is there anything else needed to adjust the current default configuration to use our external help files?
             - A web.xml file is mentioned; does the one deployed with the help tool suffice?  Or do I need to modify that one?


My test help.xml contents:

$ cat help.xml






                    location="http://collab-dev.itc.virginia.edu/usr/local/sakai/content/docs/help/sakai_announcements/argc.html"
            defaultForTool="sakai.announcements">




                   location="http://collab-dev.itc.virginia.edu/usr/local/sakai/content/docs/help/sakai_assignment_grades/argj.html"
           defaultForTool="sakai.assignment">





With these change in place:
1) the help tool displays the 'welcome' text, but there is no table of contents, so no help topics available...
2) catalina.out shows the following when I click on the Help menu item...  is it still trying to use the 'default' configuration?


2011-11-30 12:37:25,930 ERROR TP-Processor49 org.sakaiproject.component.app.help.HelpManagerImpl - White spaces are required between publicId and systemId.
org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at org.sakaiproject.component.app.help.HelpManagerImpl.registerExternalHelpContent(HelpManagerImpl.java:1060)
    at org.sakaiproject.component.app.help.HelpManagerImpl.registerHelpContent(HelpManagerImpl.java:984)
    at org.sakaiproject.component.app.help.HelpManagerImpl.initialize(HelpManagerImpl.java:906)
    at org.sakaiproject.component.app.help.HelpManagerImpl.getWelcomePage(HelpManagerImpl.java:673)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy57.getWelcomePage(Unknown Source)
    at org.sakaiproject.jsf.help.HelpFrameSetRender.encodeBegin(HelpFrameSetRender.java:113)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:683)
    at javax.faces.component.UIData.encodeBegin(UIData.java:681)
    at javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:591)
    at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:478)
    at org.apache.jsp.main_jsp._jspx_meth_help_005fhelpFrameSet_005f0(main_jsp.java:133)
    at org.apache.jsp.main_jsp._jspx_meth_f_005fview_005f0(main_jsp.java:102)
    at org.apache.jsp.main_jsp._jspService(main_jsp.java:69)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:659)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
    at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    at org.sakaiproject.jsf.app.SakaiViewHandler.renderView(SakaiViewHandler.java:137)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:585)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:659)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
    at org.sakaiproject.jsf.util.JsfTool.dispatch(JsfTool.java:221)
    at org.sakaiproject.tool.help.HelpJsfTool.dispatch(HelpJsfTool.java:96)
    at org.sakaiproject.jsf.util.JsfTool.doGet(JsfTool.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:659)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
    at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:512)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1221)
    at org.sakaiproject.portal.charon.handlers.HelpHandler.doHelp(HelpHandler.java:107)
    at org.sakaiproject.portal.charon.handlers.HelpHandler.doGet(HelpHandler.java:69)
    at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:768)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:775)
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:704)
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:897)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:662)
2011-11-30 12:37:25,965  INFO TP-Processor49 org.sakaiproject.component.app.help.HelpManagerImpl - finished initializing lucene for 'default' in 31 total milliseconds









-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20111130/4c05a399/attachment.html 


More information about the sakai-dev mailing list