微信公众平台开发中-SAE不支持XStream框架的解决方案
时间:2016-04-30 15:32:41
收藏:0
阅读:740
问题描述
最近几天(2014年8月20日之后),突然有不少网友反应,柳峰博客中的微信公众平台开发代码在SAE上运行会报错,或者是能正常部署,但向公众号发消息没反应。以前也有一些初学者质疑过我博客中的代码是否能正常运行,最后都被我一一证明是由于他们的不理解和粗心导致,但这一次短短几天就有很多人反应同样的问题,这就引起了我的足够重视。对于这种“同样的代码以前可以正常运行,现在却不能运行”的问题,我猜测可能是程序运行环境发生了某种变化,应该是SAE近期做了什么更新导致的。
问题分析
如果Java Web项目中使用了日志工具log4j或者slf4j,并且设置了将日志输出到控制台(console),那么在项目部署到SAE之后,可以在SAE网站的“日志中心”看到应用的相关日志。查看HTTP服务error级别的日志,能够看到如下图所示的错误日志:
为了方便查看和讲解,我对上述错误日志进行了格式化处理,结果如下:
- 101.226.62.83 [27/Aug/2014:17:23:10 +0800] JAVA_SAE_Fatal_error:
- Error for /coreServletjava.lang.NoClassDefFoundError: Could not initialize class org.liufeng.weixin.util.MessageUtil
- at org.liufeng.gywodejia.service.CoreService.processRequest(CoreService.java:40)
- at org.liufeng.gywodejia.servlet.CoreServlet.doPost(CoreServlet.java:54)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
- at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538)
- at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478)
- at com.sina.sae.servlet.SaeServletHandler.doHandle(SaeServletHandler.java:49)
- at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
- at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517)
- at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
- at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
- at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
- at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
- at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
- at com.sina.sae.webapp.SaeWebAppContext.doScope(SaeWebAppContext.java:166)
- at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
- at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:259)
- at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
- at com.sina.sae.handler.SaeUserInfoHandler.handle(SaeUserInfoHandler.java:105)
- at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
- at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:305)
- at org.eclipse.jetty.server.handler.HandlerW yq36.javaruntime
从日志中的第二行可以看出,在访问/coreServlet时报了一个错误NoClassDefFoundError(类找不到),并且提示org.liufeng.weixin.util.MessageUtil类不能被实例化。在部署的WAR中,MessageUtil.class明明存在,为什么会找不到类呢?我们来看看,MessageUtil.java中到底都写了些什么,源代码如下:
评论(0)