struts2 java.lang.StackOverflowError org.apache.struts2.json.JSONWriter

struts2 java.lang.StackOverflowError org.apache.struts2.json.JSONWriter,struts2printwriter

  1. 难题陈述:

   页面通过异步访问action,   
action的措施通过map封装数据,struts的result的type设置为json,后台报错

六月 25, 2016 6:54:33 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/msf] threw exception [Filter execution threw an exception] with root cause
java.lang.StackOverflowError
    at sun.reflect.misc.ReflectUtil.checkPackageAccess(ReflectUtil.java:177)
    at sun.reflect.misc.ReflectUtil.checkPackageAccess(ReflectUtil.java:164)
    at sun.reflect.misc.ReflectUtil.isPackageAccessible(ReflectUtil.java:195)
    at java.beans.Introspector.getBeanInfo(Introspector.java:154)
    at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:177)
    at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:160)
    at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:126)
    at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:352)
    at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:215)
    at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:160)

 

2.action的代码

package com.cdv.mediastar.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.cdv.mediastar.model.User;
import com.cdv.mediastar.model.UserSessionlog;
import com.cdv.mediastar.service.UserService;
import com.cdv.mediastar.util.PageParameter;
import com.opensymphony.xwork2.ActionSupport;
@Scope("request")
@Controller("logAction")
public class LogAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = -1455520770797186253L;

    Map<String, Object> dataMap = new HashMap<String, Object>();

    public Map<String, Object> getDataMap() {
        return dataMap;
    }

    public void setDataMap(Map<String, Object> dataMap) {
        this.dataMap = dataMap;
    } 
    @Resource
    private UserService userService;

    public String index(){
        return "index";
    }

    public String list(){
        dataMap.clear();
        PageParameter page = new PageParameter();
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        String userid = user.getUserid();
        String appName = "Alkaid";
        List<UserSessionlog> sessionlogList = userService.findlog(userid, appName, 0, page.getPageSize());
        int totalCount = userService.countlog(userid, appName);
        int totalPage = totalCount%page.getPageSize()==0?totalCount/page.getPageSize():totalCount%page.getPageSize()+1;
        page.setTotalCount(totalCount);
        page.setTotalPage(totalPage);
        int startNum = 0, stopNum = 0;
        startNum = 1;
        if((startNum+page.getPageSize()-1)<=totalCount){
            stopNum = startNum+page.getPageSize()-1;
        }else{
            stopNum = totalCount;
        }
        dataMap.put("startNum", startNum);
        dataMap.put("stopNum", stopNum);
        dataMap.put("page", page);
        dataMap.put("sessionlogList", sessionlogList);
        return "success";
    }


}

 

  1. 标题排查及消除方案

   以上暗黑部分,向map中增加了四个对象,结果值栈(StackOverflow)溢出。

   去掉三个目的page,改为踏向String类型的值,错误消除。

java.lang.StackOverflowError
org.apache.struts2.json.JSONWriter,struts2printwriter 1. 主题素材陈诉:
页面通过异步访谈action, action的法子通过map封装数据…

 

java.lang.InternalError

      以上的包都能够在struts第22中学找到,注意事项:
       8.2.1  
jsonobject的选择形式,能够转移八个指标,也足以协和加盟二个对象;
       8.2.2  
jsonobject和jsonarray只是骤增了叁个json中的对象,并非action中回到的json对象只有那二个转速后的json对象;
       8.2.4  
在action中应用jsonobject大概是jsonarray后不会变动已某个json重回对象;

2.action的代码

java.lang.CloneNotSupportedException

 

六月 25, 2016 6:54:33 下午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/msf] threw exception [Filter execution threw an exception] with root cause
java.lang.StackOverflowError
    at sun.reflect.misc.ReflectUtil.checkPackageAccess(ReflectUtil.java:177)
    at sun.reflect.misc.ReflectUtil.checkPackageAccess(ReflectUtil.java:164)
    at sun.reflect.misc.ReflectUtil.isPackageAccessible(ReflectUtil.java:195)
    at java.beans.Introspector.getBeanInfo(Introspector.java:154)
    at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:177)
    at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:160)
    at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:126)
    at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:352)
    at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:215)
    at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:160)

旅舍溢出荒唐

8.1
即使是总结的不知去向字符串,只必要参预二个struts2-json-plugin-2.3.1.2.jar包就能够;
8.2
假若是急需传入前台的是三个jsonobject,那么要求的有格外的6个包,不可或缺,绝对要注意:
      1.commons-beanutils-1.7.0.jar
      2.commons-collections-3.2.1.jar
      3.commons-lang-2.3.jar
      4.commons-logging-1.0.4.jar
      5.ezmorph-1.0.3.jar
      6.json-lib-2.1.jar
     别的必须包如下:
      7.struts2-json-plugin-2.3.1.2.jar

package com.cdv.mediastar.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.cdv.mediastar.model.User;
import com.cdv.mediastar.model.UserSessionlog;
import com.cdv.mediastar.service.UserService;
import com.cdv.mediastar.util.PageParameter;
import com.opensymphony.xwork2.ActionSupport;
@Scope("request")
@Controller("logAction")
public class LogAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = -1455520770797186253L;

    Map<String, Object> dataMap = new HashMap<String, Object>();

    public Map<String, Object> getDataMap() {
        return dataMap;
    }

    public void setDataMap(Map<String, Object> dataMap) {
        this.dataMap = dataMap;
    } 
    @Resource
    private UserService userService;

    public String index(){
        return "index";
    }

    public String list(){
        dataMap.clear();
        PageParameter page = new PageParameter();
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        String userid = user.getUserid();
        String appName = "Alkaid";
        List<UserSessionlog> sessionlogList = userService.findlog(userid, appName, 0, page.getPageSize());
        int totalCount = userService.countlog(userid, appName);
        int totalPage = totalCount%page.getPageSize()==0?totalCount/page.getPageSize():totalCount%page.getPageSize()+1;
        page.setTotalCount(totalCount);
        page.setTotalPage(totalPage);
        int startNum = 0, stopNum = 0;
        startNum = 1;
        if((startNum+page.getPageSize()-1)<=totalCount){
            stopNum = startNum+page.getPageSize()-1;
        }else{
            stopNum = totalCount;
        }
        dataMap.put("startNum", startNum);
        dataMap.put("stopNum", stopNum);
        dataMap.put("page", page);
        dataMap.put("sessionlogList", sessionlogList);
        return "success";
    }


}

数组大小为负值十分。当使用负数大小值成立数组时抛出该特别。

jsonobject.fromobject(括号中是bean只怕是map对象,无法是action中的属性)

  1. 主题素材排查及解决方案

java.lang.ArithmeticException

Method public java.lang.String
org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int)
threw an exception when invoked on net.sf.json.JSONException: A
JSONObject text must begin with ‘{‘ at character 1 of judd The
problematic instruction: ———- ==> ${msgs[0][0]} [on line
76, column 25 in org/apache/struts2/dispatcher/error.ftl] ———-
Java backtrace for programmers: ———-
freemarker.template.TemplateModelException: Method public
java.lang.String
org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int)
threw an exception when invoked on net.sf.json.JSONException: A
JSONObject text must begin with ‘{‘ at character 1 of judd at
freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)

  1. 主题素材叙述:

在地点的一无所能中,原因是找不到ActionForm类。

异常
javax.servlet.jsp.JspException: Exception creating bean of
classorg.apache.struts.action.ActionForm: {1}

想必原因
Instantiating Struts-provided ActionForm class directly instead
ofinstantiating a class derived off ActionForm. This might

occur implicitlyif you specify that a form-bean is this Struts
ActionForm class rather thanspecifying a child of this class

for the form-bean.

Not associating an ActionForm-descended class with an action can also

别的小计如下:

   页面通过异步访问action,   
action的方法通过map封装数据,struts的result的type设置为json,后台报错

java.lang.UnknownError

8  json通过struts2后台传递json对象可能是json字符串;

 

未知足的链接错误。当Java虚构机未找到有个别类的宣示为native方法的本机语言定义时抛出。

出错音讯如下:

   去掉一个指标page,改为加入String类型的值,错误化解。

再有就是在采取taglib引入HTML标识库时,你利用的prefix的值不是html。

异常
javax.servlet.jsp.JspException: Missing message for key xx.xx.xx

Probable Causes
本条key的值对从未在财富文件ApplicationResources.properties中定义。假设你使用eclipse时平时境遇这么的场馆,当项目重新编写翻译时,

eclipse会自动将classes目录下的财富文件删除。

财富文件ApplicationResources.properties 不在classpath中应将能源文件放到
WEB-INF/classes 目录下,当然要在struts-config.xml中

举个例子急需action再次来到多个json字符串,只须要申明就能够;

   以上朱红部分,向map中增加了三个对象,结果值栈(StackOverflow)溢出。

输入输出非凡:IOException

jsonarray只好转变list对象;

了。所以写程序碰到错误或极其应该从多地点思考难点存在的也许,想到系统提醒新闻以外的事物。

  1. 定义Action后, 若是钦赐了name,
    那么必供给定义一个与它同名的FormBean工夫展开form映射.

  2. 365bet体育在线网投 ,只要定义Action后, 提交页面时出现 “No input attribute for mapping
    path…” 错误, 则须求在其input属性中定义转向的页面.

  3. 如若插入新的多寡时出现 “Batch update row countwrong:…” 错误,
    则表明XXX.hbm.xml中钦点的key的类型为原始类型(int, long),

因为这体系型会自行分配值, 而那些值往往会让系统以为已经存在该记录,
准确的点子是采用java.lang.Integer或java.lang.Long对象.

  1. 只要插入数据时出现 “argument type mismatch” 错误,
    只怕是你使用了Date等新鲜目的, 因为struts不能够自动从String型转变来Date型,

因而, 你要求在Action中手动把String型调换到Date型.

  1. Hibernate中, Query的iterator方法快比非常多.

  2. 比方出现 “equal symbol expected” 错误,
    表达您的strtus标签中蕴藏另三个标签或许变量, 比方:
    <html:select property=”test”onchange=”<%=test%>”/>
    或者
    <html:hidden property=”test” value=”<bean:writename=”t”
    property=”p”/>”/>
    如此的意况…


错误:

Exception inthread “main” org.hibernate.exception.SQLGrammarException:
Could notexecute JDBC batch update

案由与减轻:

因为Hibernate Tools(或者Eclipse本身的Database
Explorer)生成*.hbn.xml工具中带有有catalog=”***”这样的

jsonobject只可以转变map类型大概是bean类型的多寡,而无法生成action中的属性。

lead tothis error.

异常
javax.servlet.jsp.JspException: Cannot find ActionMappings or
ActionFormBeanscollection

唯恐原因
不是标记Struts
actionServlet的<servlet>标识正是映射.do扩张名的<sevlet-mapping>标记只怕两个都尚未在web.xml中评释。

在struts-config.xml中的打字或然拼写错误也可引致那个这几个的产生。举例贫乏叁个标识的闭馆符号/>。最佳使用struts
console工具检查一

下。

其余,load-on-startup必须在web.xml中申明,那仍然是三个空标识,要么钦点多少个数值,那个数值用来表servlet运维的优先级,数值越大优

先级越低。

消除方案:

NO.1 java.lang.NullPointerException

 

NO.9 java.lang.LinkageError

注意!

java.lang.ClassNotFoundException

字符串索引越界卓殊。当使用索引值访谈有个别字符串中的字符,而该索引值小于0或高于等于类别大小时,抛出该特别。

开端化程序不当。当施行三个类的静态初阶化程序的进程中,产生了极其时抛出。静态开首化程序是指直接富含于类中的static语句段。

java.lang.AssertionError

安全特别。由平安管理器抛出,用于提醒违反安全景况的要命。

品种强制调换极度:ClassCastException

java.lang.RuntimeException

方法未找到万分:NoSuchMethodException

java.lang.ThreadDeath

java.lang.InstantiationException

注脚错误。当验证器检查评定到某些类公事中留存里面不合营可能安全主题材料时抛出该错误。

办法的参数错误

异常
javax.servlet.jsp.JspException: Cannot retrieve mapping for action
/Login (/Login是你的action名字)

NO.8 java.lang.InstantiationError

空指针分外类:NullPointerException

NO.7 java.lang.IncompatibleClassChangeError

犯案的监督景况十一分。当有个别线程试图等待四个团结并不具备的靶子的监察和控制器大概布告任何线程等待该目的的监察和控制器时,抛出该极度。

java.lang.NullPointerException

文件已完工格外:EOFException

java.lang.NegativeArraySizeException

犯罪访问错误。当三个施用试图访问、修改有个别类的域也许调用其格局,但是又违反域或措施的可知性表明,则抛出该特别。

java.lang.NoSuchFieldException

链接错误。该错误连同具备子类提示某些类重视于别的一些类,在此类编写翻译之后,被重视的类退换了其类定义而从不重新编写翻译全数的类,进而引发错误的事态。

发表评论

电子邮件地址不会被公开。 必填项已用*标注