2

I am using struts2 for a project. Users can request to download files from a web page and this request will be processed on background. In order to make it work, I have to create a dispatcher which needs to pass in a servletContext object.

//MockServletContext comes from the spring framework
MockServletContext context = new MockServletContext("file:directory");
//Initialize a dispatcher
StrutsTestCaseHelper.initDispatcher(context, map);

My log file outputs a bunch of errors and one example for "unable to read class" exception:

ERROR [com.opensymphony.xwork2.util.finder.DefaultClassFinder] - Unable to read class [one.action.class.path]
java.lang.ArrayIndexOutOfBoundsException: 10792
    at org.objectweb.asm.ClassReader.readClass(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at com.opensymphony.xwork2.util.finder.DefaultClassFinder.readClassDef(DefaultClassFinder.java:473)
    at com.opensymphony.xwork2.util.finder.DefaultClassFinder.<init>(DefaultClassFinder.java:96)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildClassFinder(PackageBasedActionConfigBuilder.java:416)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:397)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:354)
    at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:274)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:978)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)
    at org.apache.struts2.util.StrutsTestCaseHelper.initDispatcher(StrutsTestCaseHelper.java:58)

There is another kind of exception:

[org.springframework.mock.web.MockServletContext] - Couldn't determine real path of resource class path resource [one/resource/path/resource]
java.io.FileNotFoundException: class path resource [one/resource/path/resource] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/home/user/dev/project/build_output/splice_links/da39a3ee5e6b4b0d3255bfef95601890afd80709/resources/resource.jar!one/resource/path/resource
    at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:192)
    at org.springframework.core.io.ClassPathResource.getFile(ClassPathResource.java:167)
    at org.springframework.mock.web.MockServletContext.getRealPath(MockServletContext.java:396)
    at freemarker.cache.WebappTemplateLoader.findTemplateSource(WebappTemplateLoader.java:95)
    at freemarker.cache.MultiTemplateLoader.findTemplateSource(MultiTemplateLoader.java:75)
    at org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader.findTemplateSource(FreemarkerThemeTemplateLoader.java:37)
    at freemarker.cache.TemplateCache.findTemplateSourceAndLog(TemplateCache.java:729)
    at freemarker.cache.TemplateCache.lookupTemplateWithAcquisitionStrategy(TemplateCache.java:681)
    at freemarker.cache.TemplateCache.access$500(TemplateCache.java:54)
    at freemarker.cache.TemplateCache$TemplateCacheTemplateLookupContext.lookupWithAcquisitionStrategy(TemplateCache.java:861)
    at freemarker.cache.TemplateCache$TemplateCacheTemplateLookupContext.lookupWithLocalizedThenAcquisitionStrategy(TemplateCache.java:868)
    at freemarker.cache.TemplateLookupStrategy$Default020300.lookup(TemplateLookupStrategy.java:98)
    at freemarker.cache.TemplateCache.lookupTemplate(TemplateCache.java:667)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:375)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:249)
    at freemarker.template.Configuration.getTemplate(Configuration.java:1537)
    at freemarker.template.Configuration.getTemplate(Configuration.java:1401)

I read a lot of posts on stack-overflow but none of them helped me. Do I need to add some configurations to MockServletContext. May anyone tell me how I could fix this error. If you need me to post more files/information, please let me know.

asm dependency in pom.xml :

 <dependency>
  <groupId>org.ow2.asm</groupId>
  <artifactId>asm</artifactId>
  <version>5.0.3</version>
</dependency>
user3369592
  • 1,367
  • 5
  • 21
  • 43

1 Answers1

1

With the following error,

java.lang.ArrayIndexOutOfBoundsException: 10792
    at org.objectweb.asm.ClassReader.readClass(Unknown Source)

I think, you need to check if you are using the correct version of asm jar file in your project.

amdg
  • 2,211
  • 1
  • 14
  • 25
  • what version of asm jar should I use? – user3369592 Jan 18 '18 at 18:31
  • ok, we had a similar problem. It has also to do with the JDK and the Spring version. [this](https://stackoverflow.com/questions/26496338/strange-java-lang-arrayindexoutofboundsexception-thrown-on-jetty-startup) post helped us to resolve it. – amdg Jan 19 '18 at 05:37
  • @amdgare you using java 8? I have to use java 8. – user3369592 Jan 19 '18 at 23:30