I was using struts-layout,struts-taglib1.3.8.jar, and struts2.application was working fine. But, as struts2 already has taglibs, so I removed struts-taglib1.3.8.jar and upgraded struts-layout from 1.2 to 1.4 (which says is compatible with struts2). I started getting below exception where I used layout policy.
I decompiled the layout jar. It contains a class LayoutUtils.java which makes a call
protected static MessageResources messages = MessageResources.getMessageResources("org.apache.struts.taglib.html.LocalStrings");
which throws the below exception.
Caused by: java.lang.NoClassDefFoundError: org/apache/struts/util/MessageResources at fr.improve.struts.taglib.layout.util.LayoutUtils.<clinit>(LayoutUtils.java:48) at fr.improve.struts.taglib.layout.PolicyTag.doStartTag(PolicyTag.java:25) at jsp_servlet._common.__appmenu._jspService(__appmenu.java:269) at weblogic.servlet.jsp.JspBase.service(JspBase.java:34) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:416) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:326) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:527) at weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:447) at weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:163) at weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:184) at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:80) ... 95 more Caused by: java.lang.ClassNotFoundException: org.apache.struts.util.MessageResources at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:280) at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:253) at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:177) at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:37) ... 113 more
I don't see where it says it's compatible with Struts 2.
In any case, on the off-chance it actually is, it still depends on Struts 1 classes, e.g.,
<dependency>
<groupId>struts</groupId>
<artifactId>struts</artifactId>
<version>1.2.9</version>
</dependency>
At the very least you'd need to include the Struts 1 core library.
Here's the thing: Struts 2 looks up its message resources in a very different way than Struts 1, exposes values to the view layer in a different way (although they're still accessible via JSP EL), and so on.
It's quite possible I completely missed the Struts 2 compatibility part, though.