[ 
https://issues.apache.org/struts/browse/WW-2897?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45064#action_45064
 ] 

careprad commented on WW-2897:
------------------------------

we have resolved this problem,the root cause is the StrutsTilesListener,we have 
retrotranslate all the relevant library files,but the StrutsTilesListener did 
not work,so we change the code by ourself,this is the class:
public class MyStrutsTilesListener implements ServletContextListener
{
    /**
     * Log instance.
     */
    protected static final Log LOG =
        LogFactory.getLog(MyStrutsTilesListener.class);
       
    private static final Map INIT;

    static
    {
        INIT = new HashMap();
        INIT.put(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM,
                 StrutsTilesContainerFactory.class.getName());
    }

    /**
     * Initialize the TilesContainer and place it
     * into service.
     *
     * @param event The intercepted event.
     */
    public void contextInitialized(ServletContextEvent event)
    {
        ServletContext servletContext = event.getServletContext();
        try
        {
            TilesContainer container = createContainer(servletContext);
            TilesAccess.setContainer(servletContext, container);
        }
        catch (TilesException e)
        {
            throw new IllegalStateException("Unable to instantiate container.");
        }
    }

    /**
     * Remove the tiles container from service.
     *
     * @param event The intercepted event.
     */
    public void contextDestroyed(ServletContextEvent event) {
        ServletContext servletContext = event.getServletContext();
        try
        {
            TilesAccess.setContainer(servletContext, null);
        }
        catch (TilesException e) {
            LOG.warn("Unable to remove tiles container from service.");
        }
    }

    /**
     * Creates a Tiles container.
     *
     * @param context The servlet context to use.
     * @return The created container
     * @throws TilesException If something goes wrong during creation.
     */
    protected TilesContainer createContainer(ServletContext context)
        throws TilesException
        {
        
if(context.getInitParameter(TilesContainerFactory.CONTEXT_FACTORY_INIT_PARAM) 
== null) {
            context = decorate(context);
        }
        else
        {
            LOG.warn("Tiles container factory is explicitly set.  Not injecting 
struts configuration.");
        }
        TilesContainerFactory factory =
            TilesContainerFactory.getFactory(context);
        return factory.createContainer(context);
    }
   
    protected ServletContext decorate(ServletContext context)
    {
        return new ConfiguredServletContext(context, INIT);
    }

}

as you see,there is no other code,but it just work,we still did not know how it 
can do it!!

I must to point out our environment is wsad5,so its jdk is 14 implemented by 
ibm,we retrotranslate  the jar file with classpath=%wasruntime%/core.jar.I 
think this is the right way.
But this problem cost our 2 days to resolve it.I am disappointed to the 
struts2(this problem is one of the reason but not the only!).

> org.apache.struts2.tiles.StrutsTilesListener do not work
> --------------------------------------------------------
>
>                 Key: WW-2897
>                 URL: https://issues.apache.org/struts/browse/WW-2897
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Tiles
>    Affects Versions: 2.0.11.2
>         Environment: websphere6.0 (jdk1.42),all the referenced jar is in the 
> struts-2.0.11.2-all.zip downloaded from the official site. 
>            Reporter: careprad
>            Priority: Blocker
>
> first of all,the reason is the exception on ServletDispatcherResult.doExecute:
>               setLocation(location);
>               javax.servlet.ServletContext servletContext = 
> ServletActionContext.getServletContext();
>               TilesContainer container = 
> TilesAccess.getContainer(servletContext);               //here get null 
> container
>               javax.servlet.http.HttpServletRequest request = 
> ServletActionContext.getRequest();
>               javax.servlet.http.HttpServletResponse response = 
> ServletActionContext.getResponse();
>               container.render(location, new Object[] {request, response});   
>                           //here will throw the null pointer exception
> I traced the exception in the StrutsTilesListener ,it do not work at all,I 
> suppose it  is the static initialize method work in error:
>               INIT.put(
>                       "org.apache.tiles.factory.TilesContainerFactory",
>                       
> (class$org$apache$struts2$tiles$StrutsTilesContainerFactory == null
>                               && 
> (class$org$apache$struts2$tiles$StrutsTilesContainerFactory =
>                                       (new 
> StrutsTilesContainerFactory[0]).getClass().getComponentType())
>                                       == null
>                                       ? 
> class$org$apache$struts2$tiles$StrutsTilesContainerFactory
>                                       : 
> class$org$apache$struts2$tiles$StrutsTilesContainerFactory)
>                               .getName());
> this code is what I can't understand!and How can I get the source code of the 
> pluggin?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to