|
报NullPointException不应该呀,根据您的错误信息,出错应该在
if (!clickstreams.containsKey(session.getId())) {
这一行出现NPE的,分析应该clicksteams为null。
但是不应该呀!
此 Map clickstreams = (Map) session.getServletContext().getAttribute(ClickstreamListener.CLICKSTREAMS_ATTRIBUTE_KEY);
是由CustomClickStreamListener父类com.opensymphony.clickstream.ClickstreamListener的contextInitialized方法来设置的,代码如下:
public ClickstreamListener()
{
log.debug("ClickstreamLogger constructed" ;
clickstreams = Collections.synchronizedMap(new HashMap());
}
public void contextInitialized(ServletContextEvent sce)
{
log.debug("ServletContext initialised" ;
sce.getServletContext().setAttribute(CLICKSTREAMS_ATTRIBUTE_KEY , clickstreams);
}
所以不应该出现clickstreams 为空的现象呀!
另外!!!!!!!!!!请把com.ibm.portal.user.utils.CustomClickStreamFilter重新更新一下,如下。
package com.ibm.portal.user.utils;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.ibm.wps.engine.RunData;
import com.opensymphony.clickstream.Clickstream;
import com.opensymphony.clickstream.ClickstreamFilter;
import com.opensymphony.clickstream.ClickstreamListener;
/**
* The filter that keeps track of a new entry in the clickstream for <b>every
* request </b>.
*
* @author <a href="hu_pengfei@yahoo.com.cn">Henry Hu </a>
*/
public class CustomClickStreamFilter extends ClickstreamFilter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) request).getSession();
ApplicationContext.getContext().setHttpSession(session);
/* Enumeration names = null;
if (session != null)
names = session.getAttributeNames();
if (names != null)
while (names.hasMoreElements()) {
Object name = names.nextElement();
System.out.println("SessionName from ClickStream Filter: " + name);
if (name != null)
System.out.println("SessionValue from ClickStream Filter: " + session.getAttribute((String) name));
}*/
/////////////////////////////////////////////////////////
// This code should used in Customer Login Codes/////////
com.ibm.portal.user.utils.User user = com.ibm.portal.user.utils.UserContext.getContext().getUser();
if (user == null || user.isAnonymous()) {
com.ibm.wps.puma.User portalUser = null;
com.ibm.wps.engine.RunData runData = null;
user = new com.ibm.portal.user.utils.User();
try {
runData = com.ibm.wps.engine.RunData.from((javax.servlet.ServletRequest) request);
} catch (java.lang.Exception ex) {
ex.printStackTrace();
}
if (runData != null)
portalUser = runData.getUser();
if (portalUser == null) {
user.setAnonymous(true);
} else {
user.setAnonymous(false);
user.setUserName(portalUser.getName());
}
com.ibm.portal.user.utils.UserContext.getContext().setUser(user);
}
//This code should used in Customer Login Codes/////////
//////////////////////////////////////////////////////////
Map clickstreams = (Map) session.getServletContext().getAttribute(ClickstreamListener.CLICKSTREAMS_ATTRIBUTE_KEY);
if (!clickstreams.containsKey(session.getId())) {
Clickstream clickstream = new Clickstream();
session.setAttribute(ClickstreamListener.SESSION_ATTRIBUTE_KEY, clickstream);
clickstreams.put(session.getId(), clickstream);
}
super.doFilter(request, response, chain);
}
}
编译时可能会用到以下类库:
“C:IBM/WebSphere/AppServer/lib/httpsession.jar”
“C:IBM/WebSphere/AppServer/lib/wmm.jar”
“C:IBM/WebSphere/PortalServer/shared/app/wp.auth.cmd.jar”
“D:IBM/Portal51/PortalServer/shared/app/wp.user.api.jar”
“D:IBM/Portal51/AppServer/lib/commons-logging-1.1-dev.jar” |
|