Vijay Srivastava created WW-4846:
------------------------------------

             Summary: Not able to convert Spring object to the JSON response
                 Key: WW-4846
                 URL: https://issues.apache.org/jira/browse/WW-4846
             Project: Struts 2
          Issue Type: Bug
          Components: Core Results, Plugin - JSON
    Affects Versions: 2.5.13
            Reporter: Vijay Srivastava
            Priority: Blocker


Hi,

I am using latest version of struts struts-2.5.12 and and spring 4.1 as 
advised. I am having an issue in JSON response. There is an action class which 
is returning Spring request scoped object as JSON response however I am getting 
error as below 

ERROR ExceptionMappingInterceptor org.apache.struts2.json.JSONException: 
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
java.lang.reflect.InvocationTargetException
 org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: 
java.lang.reflect.InvocationTargetException
        at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:269)
        at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:197)
        at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:182)
        at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:143)
        at org.

Any idea what's wrong here ? I am using Java 1.8. I think below code in 
JSONWriter is not working as expected

protected Method findBaseAccessor(Class clazz, Method accessor) {
        Method baseAccessor = null;
        if (clazz.getName().contains("$$EnhancerByCGLIB$$")) {
            try {
                baseAccessor = 
Thread.currentThread().getContextClassLoader().loadClass(
                        clazz.getName().substring(0, 
clazz.getName().indexOf("$$"))).getMethod(
                        accessor.getName(), accessor.getParameterTypes());
            } catch (Exception ex) {
                LOG.debug(ex.getMessage(), ex);
            }
        } else if (clazz.getName().contains("$$_javassist")) {
            try {
                baseAccessor = Class.forName(
                        clazz.getName().substring(0, 
clazz.getName().indexOf("_$$")))
                        .getMethod(accessor.getName(), 
accessor.getParameterTypes());
            } catch (Exception ex) {
                LOG.debug(ex.getMessage(), ex);
            }
            
        //in hibernate4.3.7,because javassist3.18.1's class name generate rule 
is '_$$_jvst'+...
        } else if(clazz.getName().contains("$$_jvst")){
            try {
                baseAccessor = Class.forName(
                        clazz.getName().substring(0, 
clazz.getName().indexOf("_$$")))
                        .getMethod(accessor.getName(), 
accessor.getParameterTypes());
            } catch (Exception ex) {
                LOG.debug(ex.getMessage(), ex);
            }
        }
        else {
            return accessor;
        }
        return baseAccessor;
    }




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to