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

Jon Hays jonmhays at media.berkeley.edu
Wed Nov 30 12:06:06 PST 2011



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)"  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
[1], 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




Links:
------
[1]
https://confluence.sakaiproject.org/display/HELP/Help+Configuration+Examples
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20111130/a8699978/attachment.html 


More information about the sakai-dev mailing list