You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Matthew Payne (JIRA)" <ji...@apache.org> on 2010/01/14 20:40:45 UTC

[jira] Updated: (WW-3372) Convention Plugin is incompatible with wildcard mappings

     [ https://issues.apache.org/struts/browse/WW-3372?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Matthew Payne updated WW-3372:
------------------------------

    Description: 
When the convention plugin is enabled, wildcard mappings no longer work

The following should apply to serveral levels deep.
	<package name="publicPages" extends="pmlDefault" namespace="/pages/PML_Public">
		<action name="**" class="com.pennmutual.website.actions.BasePMLAppAction">
			<result name="success" type="freemarker">{1}.html</result>
		</action>
	</package>

If I set <constant name="struts.convention.result.flatLayout" value="false" />
The convention plugin blows up on .svn folders (which should be ignored).
Caused by: Unable to find a result type for extension [svn/] in location attribute [/sitemap/.svn/]. - [unknown location]
        at org.apache.struts2.convention.DefaultResultMapBuilder$ResultInfo.determineType(DefaultResultMapBuilder.java:497)
        at org.apache.struts2.convention.DefaultResultMapBuilder$ResultInfo.<init>(DefaultResultMapBuilder.java:460)
        at org.apache.struts2.convention.DefaultResultMapBuilder.makeResults(DefaultResultMapBuilder.java:355)
        at org.apache.struts2.convention.DefaultResultMapBuilder.createFromResources(DefaultResultMapBuilder.java:261)
        at org.apache.struts2.convention.DefaultResultMapBuilder.build(DefaultResultMapBuilder.java:191)
        at org.apache.struts2.convention.PackageBasedActionConfigBuilder.createActionConfig(PackageBasedActionConfigBuilder.java:800)
        at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:572)
        at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:318)
        at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
        at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)
        at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
        ... 17 more
2010-01-14 14:32:40.732::WARN:  Failed startup of context org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@54777e{/pmlwebsite,C:\fast\java\workspaces\website\pmlwebsite\trunk\src\main\webapp}
Unable to load configuration. - [unknown location]
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:431)
        at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.init(StrutsPrepareFilter.java:50)
        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:653)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
        at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1239)
        at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
        at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:466)
        at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:124)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at org.mortbay.jetty.plugin.AbstractJettyRunMojo.restartWebApp(AbstractJettyRunMojo.java:458)
        at org.mortbay.jetty.plugin.util.ConsoleScanner.restartWebApp(ConsoleScanner.java:95)
        at org.mortbay.jetty.plugin.util.ConsoleScanner.checkSystemInput(ConsoleScanner.java:58)
        at org.mortbay.jetty.plugin.util.ConsoleScanner.run(ConsoleScanner.java:28)
Caused by: Unable to load configuration. - [unknown location]
        at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
        at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
        ... 

Initial findings were below, however it think below may be caused by the files never getting mapped to an action---> 

In an application that locates freemarker resources correctly the introduction of the convention plugins breaks sitemesh/freemarker from finding global macros or includes that are on the classpath(or in classes)  

macro libs are set as:
      <property name="macroLibraries">
            <props>
                <prop key="l">/WEB-INF/macros/layout.ftl</prop>
                <prop key="cn">/WEB-INF/macros/contentNode.ftl</prop>
                <prop key="auth">/WEB-INF/macros/acl.ftl</prop>
                <!-- from classpath in search jar -->
	            <prop key="pager">/macros/pager.ftl</prop>
				<prop key="r">/macros/results.ftl</prop>
            </props>
        </property>

When the convention plugin is introduced page.ftl and results.ftl can no longer be found.  These are located in /WEB-INF/classes or inside a .jar file that is in the classpath.  It seems as if the convention plugin changes the templateLoaderPaths configuration of freemarker itself, which in this case is --->
        <property name="templateLoaderPaths">
            <list>
                <value>/WEB-INF/freemarker</value>
                <value>/</value>
                <value>classpath:/</value>
            </list>
        </property>

^^ from above classpath:/ resources are no longer found. 
Why does this plugin affect such things?

  was:
In an application that locates freemarker resources correctly the introduction of the convention plugins breaks sitemesh/freemarker from finding global macros or includes that are on the classpath(or in classes)  

macro libs are set as:
      <property name="macroLibraries">
            <props>
                <prop key="l">/WEB-INF/macros/layout.ftl</prop>
                <prop key="cn">/WEB-INF/macros/contentNode.ftl</prop>
                <prop key="auth">/WEB-INF/macros/acl.ftl</prop>
                <!-- from classpath in search jar -->
	            <prop key="pager">/macros/pager.ftl</prop>
				<prop key="r">/macros/results.ftl</prop>
            </props>
        </property>

When the convention plugin is introduced page.ftl and results.ftl can no longer be found.  These are located in /WEB-INF/classes or inside a .jar file that is in the classpath.  It seems as if the convention plugin changes the templateLoaderPaths configuration of freemarker itself, which in this case is --->
        <property name="templateLoaderPaths">
            <list>
                <value>/WEB-INF/freemarker</value>
                <value>/</value>
                <value>classpath:/</value>
            </list>
        </property>

^^ from above classpath:/ resources are no longer found. 
Why does this plugin affect such things?

        Summary: Convention Plugin is incompatible with wildcard mappings  (was: Convention Plugin breaks settings for freemarker configuration.  )

> Convention Plugin is incompatible with wildcard mappings
> --------------------------------------------------------
>
>                 Key: WW-3372
>                 URL: https://issues.apache.org/struts/browse/WW-3372
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Convention
>    Affects Versions: 2.1.8
>            Reporter: Matthew Payne
>
> When the convention plugin is enabled, wildcard mappings no longer work
> The following should apply to serveral levels deep.
> 	<package name="publicPages" extends="pmlDefault" namespace="/pages/PML_Public">
> 		<action name="**" class="com.pennmutual.website.actions.BasePMLAppAction">
> 			<result name="success" type="freemarker">{1}.html</result>
> 		</action>
> 	</package>
> If I set <constant name="struts.convention.result.flatLayout" value="false" />
> The convention plugin blows up on .svn folders (which should be ignored).
> Caused by: Unable to find a result type for extension [svn/] in location attribute [/sitemap/.svn/]. - [unknown location]
>         at org.apache.struts2.convention.DefaultResultMapBuilder$ResultInfo.determineType(DefaultResultMapBuilder.java:497)
>         at org.apache.struts2.convention.DefaultResultMapBuilder$ResultInfo.<init>(DefaultResultMapBuilder.java:460)
>         at org.apache.struts2.convention.DefaultResultMapBuilder.makeResults(DefaultResultMapBuilder.java:355)
>         at org.apache.struts2.convention.DefaultResultMapBuilder.createFromResources(DefaultResultMapBuilder.java:261)
>         at org.apache.struts2.convention.DefaultResultMapBuilder.build(DefaultResultMapBuilder.java:191)
>         at org.apache.struts2.convention.PackageBasedActionConfigBuilder.createActionConfig(PackageBasedActionConfigBuilder.java:800)
>         at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:572)
>         at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:318)
>         at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
>         at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)
>         at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
>         ... 17 more
> 2010-01-14 14:32:40.732::WARN:  Failed startup of context org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@54777e{/pmlwebsite,C:\fast\java\workspaces\website\pmlwebsite\trunk\src\main\webapp}
> Unable to load configuration. - [unknown location]
>         at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:431)
>         at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
>         at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.init(StrutsPrepareFilter.java:50)
>         at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
>         at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>         at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:653)
>         at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
>         at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1239)
>         at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
>         at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:466)
>         at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:124)
>         at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>         at org.mortbay.jetty.plugin.AbstractJettyRunMojo.restartWebApp(AbstractJettyRunMojo.java:458)
>         at org.mortbay.jetty.plugin.util.ConsoleScanner.restartWebApp(ConsoleScanner.java:95)
>         at org.mortbay.jetty.plugin.util.ConsoleScanner.checkSystemInput(ConsoleScanner.java:58)
>         at org.mortbay.jetty.plugin.util.ConsoleScanner.run(ConsoleScanner.java:28)
> Caused by: Unable to load configuration. - [unknown location]
>         at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
>         at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
>         at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
>         ... 
> Initial findings were below, however it think below may be caused by the files never getting mapped to an action---> 
> In an application that locates freemarker resources correctly the introduction of the convention plugins breaks sitemesh/freemarker from finding global macros or includes that are on the classpath(or in classes)  
> macro libs are set as:
>       <property name="macroLibraries">
>             <props>
>                 <prop key="l">/WEB-INF/macros/layout.ftl</prop>
>                 <prop key="cn">/WEB-INF/macros/contentNode.ftl</prop>
>                 <prop key="auth">/WEB-INF/macros/acl.ftl</prop>
>                 <!-- from classpath in search jar -->
> 	            <prop key="pager">/macros/pager.ftl</prop>
> 				<prop key="r">/macros/results.ftl</prop>
>             </props>
>         </property>
> When the convention plugin is introduced page.ftl and results.ftl can no longer be found.  These are located in /WEB-INF/classes or inside a .jar file that is in the classpath.  It seems as if the convention plugin changes the templateLoaderPaths configuration of freemarker itself, which in this case is --->
>         <property name="templateLoaderPaths">
>             <list>
>                 <value>/WEB-INF/freemarker</value>
>                 <value>/</value>
>                 <value>classpath:/</value>
>             </list>
>         </property>
> ^^ from above classpath:/ resources are no longer found. 
> Why does this plugin affect such things?

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