0
点赞
收藏
分享

微信扫一扫

FAQ(76):java.lang.NullPointerException at com.xs.fun.base.proto.service.WorldChannelProtoBuffer


2018年8月31日

1、日志:

java.lang.NullPointerException
at com.xs.fun.base.proto.service.WorldChannelProtoBuffer$ProclamationInfoProto$Builder.setContent(WorldChannelProtoBuffer.java:2859)
at com.xs.fun.base.bo.proclamation.ProclamationInfo.copyTo( ProclamationInfo.java:44)
at com.xs.fun.base.bo.proclamation.ProclamationInfoList.copyTo ( ProclamationInfoList.java:30)
at com.xs.fun.base.dao.redis.ProclamationRepo.saveProclamationNotice( ProclamationRepo.java:20)
at com.xs.fun.hall.service.ProclamationService.saveProclamationNotice( ProclamationService.java:22)
at org.apache.jsp.admin.proclamationtManager.sendProclamation_jsp._jspService( sendProclamation_jsp.java:184)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:370)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:745)

 

2、解决方法

1)使用了Google的protobuffer;

2)定位是序列化的问题;
  

at com.xs.fun.base.proto.service.WorldChannelProtoBuffer$ProclamationInfoProto$Builder.setContent(WorldChannelProtoBuffer.java:2859)
at com.xs.fun.base.bo.proclamation.ProclamationInfo.copyTo( ProclamationInfo.java:44)
at com.xs.fun.base.bo.proclamation.ProclamationInfoList.copyTo ( ProclamationInfoList.java:30)
at com.xs.fun.base.dao.redis.ProclamationRepo.saveProclamationNotice( ProclamationRepo.java:20)
at com.xs.fun.hall.service.ProclamationService.saveProclamationNotice( ProclamationService.java:22)
at org.apache.jsp.admin.proclamationtManager.sendProclamation_jsp._jspService( sendProclamation_jsp.java:184)

 

3)经过测试,是content为null,

      if(Split.equals("1")){
proclamationInfo_robotClient.setContent("{c=100,111,11}{"+title2+"}{/}"
+"{c=100,111,11}{"+content2+"}{/}"
+"{c=255,239,28}{"+startTime+"}{/}"
+"{c=255,239,28}{"+endTime+"}{/}");
proclamationInfo_robotClient.setPostTime(Long.parseLong(startTime));
proclamationInfo_robotClient.setType(3);
proclamationInfo_robotClient.setProclamationId(Integer.parseInt(id));
proclamationInfo_robotClient.setPackageInfo(Integer.parseInt(Split));
proclamationInfo_robotClient.setProclamationReadState(ProclamationState.NEW.getCode());

accountService.notifyLogonPlayerWorldChannelMsg(proclamationInfo_robotClient.getType()
,(long)proclamationInfo_robotClient.getPostTime()
,"NEW_PROCLAMATION"
,Integer.parseInt(Split));
System.out.println("1");
}

 

4)继续找,原因找到了;就是逻辑出错了,将保存的步骤放在了if里头,导致没有遍历别的,但是保存了,空数据结构就会发生报错。如下所示为错的;

wrong:  
if(type.equals("new")){
String[] proclamationChannelSplit = packageId.split(",");

System.out.println("0.size:"+proclamationChannelSplit.length);
for(String Split : proclamationChannelSplit){
if(Split.equals("-1")){
//四个WorldChannelInfo组合为list表,存储到redis
proclamationInfoList.addProclamationInfo(proclamationInfo_unknowClient);
proclamationInfoList.addProclamationInfo(proclamationInfo_devClient);
proclamationInfoList.addProclamationInfo(proclamationInfo_robotClient);
proclamationInfoList.addProclamationInfo(proclamationInfo_hanyanClient);
proclamationService.saveProclamationInfoList(proclamationInfoList);
System.out.println("** ProclamationInfoList: "+proclamationService.getProclamationNotice());

}
if(Split.equals("2")){


}
if(Split.equals("1")){

}
if(Split.equals("19588")){

}
}
}else if(type.equals("old")){ //old,当前无需发送公告
accountService.notifyLogonPlayerWorldChannelMsg(3,0l,"NO_PROCLAMATION",-11);
System.out.println("** no procalmation");
}

 

correct:


if(type.equals("new")){
String[] proclamationChannelSplit = packageId.split(",");

System.out.println("0.size:"+proclamationChannelSplit.length);
for(String Split : proclamationChannelSplit){
if(Split.equals("-1")){

}
if(Split.equals("2")){


}
if(Split.equals("1")){

}
if(Split.equals("19588")){

}
}
}else if(type.equals("old")){ //old,当前无需发送公告
accountService.notifyLogonPlayerWorldChannelMsg(3,0l,"NO_PROCLAMATION",-11);
System.out.println("** no procalmation");
}

//四个WorldChannelInfo组合为list表,存储到redis
proclamationInfoList.addProclamationInfo(proclamationInfo_unknowClient);
proclamationInfoList.addProclamationInfo(proclamationInfo_devClient);
proclamationInfoList.addProclamationInfo(proclamationInfo_robotClient);
proclamationInfoList.addProclamationInfo(proclamationInfo_hanyanClient);
proclamationService.saveProclamationInfoList(proclamationInfoList);
System.out.println("** ProclamationInfoList: "+proclamationService.getProclamationNotice());

 

举报

相关推荐

0 条评论