(版本:速度-1.7,公地集合-3.2)使用速度,發生 「顯示java.lang.NullPointerException」
我使用速度解析VM模板,和設定值在request
範圍,顯示在JSP
我的應用程序work normaly a period of time
,但是當用戶訪問了一段時間後,這個JSP顯示錯誤,無法訪問
這裏是登錄:
Mar 8, 2013 11:40:54 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet spring threw exception
java.lang.NullPointerException
at org.apache.commons.collections.ExtendedProperties.clearProperty(ExtendedProperties.java:797)
at org.apache.commons.collections.ExtendedProperties.setProperty(ExtendedProperties.java:722)
at org.apache.commons.collections.ExtendedProperties.combine(ExtendedProperties.java:783)
at org.apache.velocity.runtime.RuntimeInstance.setProperties(RuntimeInstance.java:657)
at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:645)
at org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:226)
at org.apache.velocity.app.Velocity.init(Velocity.java:97)
at com.feilong.tools.velocity.VelocityUtil.parseVMTemplateWithClasspathResourceLoader(VelocityUtil.java:67)
at com.feilong.taglib.display.pager.PagerUtil.getPagerContent(PagerUtil.java:107)
at com.feilong.taglib.display.pager.PagerTag.writeContent(PagerTag.java:48)
at com.feilong.taglib.display.pager.PagerTag.writeContent(PagerTag.java:13)
at com.feilong.taglib.base.AbstractCommonTag.doStartTag(AbstractCommonTag.java:19)
at org.apache.jsp.pages.product.product_005flist_jsp._jspx_meth_feilongDisplay_005fpager_005f0(product_005flist_jsp.java:762)
at org.apache.jsp.pages.product.product_005flist_jsp._jspx_meth_c_005fotherwise_005f1(product_005flist_jsp.java:433)
at org.apache.jsp.pages.product.product_005flist_jsp._jspx_meth_c_005fchoose_005f1(product_005flist_jsp.java:243)
at org.apache.jsp.pages.product.product_005flist_jsp._jspService(product_005flist_jsp.java:116)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
這裏是我的UTIL代碼: (兩個公共方法:有時我用它來解析VM模板,有時我用它來解析字符串)
/**
* VelocityUtil
*
* @author feilong
*/
public final class VelocityUtil{
private static String RUNTIME_LOG_LOG4J_LOGGER = "feilongVelocityLogger";
private static String RUNTIME_LOG_LOG4J_LOGGER_LEVEL = "debug";
public static String parseVMTemplateWithClasspathResourceLoader(String templateInClassPath,Map<String, Object> contextKeyValues){
String resource_loader = "class";
Properties properties = new Properties();
properties.put(Velocity.RESOURCE_LOADER, resource_loader);
properties.put(resource_loader + ".resource.loader.class", ClasspathResourceLoader.class.getName());
properties.put(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, Log4JLogChute.class.getName());
properties.put(Log4JLogChute.RUNTIME_LOG_LOG4J_LOGGER, RUNTIME_LOG_LOG4J_LOGGER);
properties.put(Log4JLogChute.RUNTIME_LOG_LOG4J_LOGGER_LEVEL, RUNTIME_LOG_LOG4J_LOGGER_LEVEL);
properties.put(Velocity.INPUT_ENCODING, CharsetType.UTF8);
properties.put(Velocity.OUTPUT_ENCODING, CharsetType.UTF8);
Velocity.init(properties);
return parseVMTemplateAfterInitVelocity(templateInClassPath, contextKeyValues);
}
public static String parseVMContentWithStringResourceLoader(String vmContent,Map<String, Object> contextKeyValues){
String resource_loader = "string";
Properties properties = new Properties();
properties.put(Velocity.RESOURCE_LOADER, resource_loader);
properties.put(resource_loader + ".resource.loader.class", StringResourceLoader.class.getName());
properties.put(Velocity.INPUT_ENCODING, CharsetType.UTF8);
properties.put(Velocity.OUTPUT_ENCODING, CharsetType.UTF8);
Velocity.init(properties);
String templateName = "feilongStringVelocity";
StringResourceRepository stringResourceRepository = StringResourceLoader.getRepository();
stringResourceRepository.putStringResource(templateName, vmContent);
return parseVMTemplateAfterInitVelocity(templateName, contextKeyValues);
}
private static String parseVMTemplateAfterInitVelocity(String templateName,Map<String, Object> contextKeyValues){
Template template = Velocity.getTemplate(templateName, CharsetType.UTF8);
VelocityContext velocityContext = new VelocityContext();
if (null != contextKeyValues){
for (Map.Entry<String, Object> entry : contextKeyValues.entrySet()){
velocityContext.put(entry.getKey(), entry.getValue());
}
}
Writer writer = new StringWriter();
template.merge(velocityContext, writer);
try{
writer.flush();
}catch (IOException e){
e.printStackTrace();
}
return writer.toString();
}
}
您使用的是哪個版本的commons-collections? – orique 2013-03-09 13:30:22
@orique commons-collections-3.2 – feilong 2013-03-09 13:39:18
查看源代碼(http://javasourcecode.org/html/open-source/commons-collections/commons-collections-3.2/org/apache/commons/collections/ExtendedProperties.java。 HTML)看起來像你的屬性中的一些鍵是空的,但看着你的代碼我不明白它是如何有意義的。 – orique 2013-03-09 13:45:53