Hi team, We are getting the below attached exceptions when we are using struts2-core-6.1.2.jar. We tested the action class using struts2-core-2.5.22.jar and struts2-core-2.5.30.jar. We are getting response properly when using those versions of struts. But when using struts2-core-6.1.2.jar, we are getting response for the post request of the url in postman, but for the same url if we make a post request using xhr in the browser we are getting the below attached exception. Also if we post to the url using xhr with http protocol, we are getting proper response but we are getting the below exception if we make a post request using xhr with https protocol. Can you please explain why this behaviour is and how to get this fixed?
Exception : - 127.0.0.1 test - 13 - 68 com.company.mfw.Starter$SysLogStream log INFO "10-05-2023 11:34:57:610" - "11:34:57.609 [/company/test/sampleresponse-1683698697020_###_https-jsse-nio-9443-exec-4] ERROR org.apache.struts2.dispatcher.Dispatcher - Could not find action or result: /company/test/sampleresponse com.opensymphony.xwork2.config.ConfigurationException: No result defined for action com.struts.sample.action.StrutsAction and result 403 at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:380) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:284) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.CoopInterceptor.intercept(CoopInterceptor.java:57) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.CoepInterceptor.intercept(CoepInterceptor.java:55) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:143) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:152) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:152) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:202) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:133) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:89) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:242) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:101) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:142) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:161) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:175) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.csp.CspInterceptor.intercept(CspInterceptor.java:47) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:140) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:209) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:229) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvoc" - - - - - - 1683698697610 - - - - - - struts - thread_name=/company/test/sampleresponse-1683698697020_###_https-jsse-nio-9443-exec-4 logger_name=SYSOUT - 127.0.0.1 test - 13 - 68 com.company.mfw.Starter$SysLogStream log INFO "10-05-2023 11:34:57:610" - "ation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.1.2.jar:6.1.2] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48) ~[struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:630) [struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79) [struts2-core-6.1.2.jar:6.1.2] at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:140) [struts2-core-6.1.2.jar:6.1.2] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) [catalina.jar:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) [catalina.jar:?] Struts Action Mapping : <package name="default" extends="struts-default" namespace="/company"> <action name="/{service:[a-z0-9_\-]+}/sampleresponse" class= "com.struts.sample.action.StrutsAction"> <result name="success">/jsp/response.jsp</result> <result name="failure">/jsp/failure.jsp</result> </action> </package> Class File Corresponding to the action mapping : package com.struts.sample.action; import java.io.IOException; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.action.ServletRequestAware; import org.apache.struts2.action.ServletResponseAware; import org.json.JSONObject; import org.apache.http.HttpStatus; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.util.ValueStack; public class StrutsAction extends ActionSupport implements ServletRequestAware, ServletResponseAware { private static final long serialVersionUID = 1L; public HttpServletRequest request; public HttpServletResponse response; private String action; private String actionParams; private String module; private ValueStack valueStack; private HashMap<String,Object> valueMap; @Override public void withServletResponse(HttpServletResponse response) { this.response = response; } @Override public void withServletRequest(HttpServletRequest request) { this.request = request; } public void setModule(String module){ this.module = module; } public String getModule(){ return module; } public void setActionParams(String actionParams){ this.actionParams = actionParams; } public String getActionParams(){ return actionParams; } public void setAction(String action){ this.action = action; } public String getAction(){ return action; } public void addToStack(String key,Object value){ HashMap<String, Object> vMap = getValueMap(); vMap.put(key, value); } public void addToStack(HashMap<String,Object> map){ ValueStack vStack = getValueStack(); vStack.push(map); } private HashMap<String,Object> getValueMap(){ if(valueMap == null){ valueMap = new HashMap<String,Object>(); getValueStack().push(valueMap); } return valueMap; } private ValueStack getValueStack(){ if(valueStack == null){ valueStack = ActionContext.getContext().getValueStack(); } return valueStack; } public String execute() throws IOException { if(request.getParameter("action") != null) { JSONObject responseJSON = new JSONObject(); responseJSON.put("key", "value"); response.setStatus(HttpStatus.SC_OK); response.setContentType("application/json"); response.getWriter().write(responseJSON.toString()); return null; } return null; } } Thanks & Regards, Vishnu Mahendiren