You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by wkbutler <ke...@gmail.com> on 2009/03/06 21:20:11 UTC

Struts mapping failing when using struts2-convention-plugin

Hi - 
I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for me,
and I have modeled my struts.xml, web.xml, and pom.xml after its example.   

Still, my app always returns a 404 error for any RESTful URL request.  Here
are my 2 example URLs that I would expect to work at this point:

http://localhost:8080/rest/subdivision.xml
http://localhost:8080/rest/subdivision/F11.xml

I have cranked up debug, and even though the Restful Mapper & Interceptor
appear to be properly registered at startup:

[code]
DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
{PackageConfig Name:convention-default namespace: parents:[{PackageConfig
Name:struts-default namespace: parents:[]}]}

DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
default parent package to [rest-default]

DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
configurations

DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
loaded using package locators [rest]

DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding actions
from packages [org.apache.struts.*, org.apache.struts2.*,
org.springframework.web.struts.*, org.springframework.web.struts2.*,
org.hibernate.*]

DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing class
[com.tousa.ws.rest.SubdivisionController] in package [com.tousa.ws.rest]

DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
[SubdivisionController] to [subdivision]

DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName for
class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]

DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created package
config named [com.tousa.ws.rest#rest-default#] with a namespace []

DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating action
config for class [class com.tousa.ws.rest.SubdivisionController], name
[subdivision] and package name [com.tousa.ws.rest#rest-default#] in
namespace []

DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
namespace []

DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
the Servlet container at [/WEB-INF/content/] with result prefix of
[/WEB-INF/content/subdivision]

DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
the class path at [WEB-INF/content/] with a result prefix of
[/WEB-INF/content/subdivision] and action name [subdivision]
[/code]

on any of the above requests, this is the only logged output (to go along
with the 404 response):
[code]
DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
ConfigurationProviders for reload.

DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
nullPropertyValue
[target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
property=struts]

WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
[struts.actionMapping]
[/code]

which seems totally irrelevant.

I am spinning my wheels now and have tried numerous things, but I cannot
understand why the supposed action configured at startup does not pick up my
URLs.

Here are my general configs - I have pared down the configuration to a bare
minimum, to match the Showcase app, to no avail (yet):

struts.xml
[code]
    <constant name="struts.convention.action.suffix" value="Controller"/>
    <constant name="struts.convention.action.mapAllMatches" value="true"/>
    <constant name="struts.convention.default.parent.package"
value="rest-default"/>
    <constant name="struts.convention.package.locators" value="rest"/>
[/code]

web.xml
[code]
	<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext*.xml</param-value>
    </context-param>

	<!-- Filters -->
    <filter>
        <filter-name>struts2</filter-name>
       
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Listeners -->
    <listener>
       
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

[/code]

pom.xml
[code]
      <dependencies>

        <!--  Struts 2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.1.6</version>
        </dependency>
        <dependency>
        	<groupId>org.apache.struts</groupId>
        	<artifactId>struts2-convention-plugin</artifactId>
        	<version>2.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.1.6</version>
        </dependency>
        <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-rest-plugin</artifactId>
        <version>2.1.6</version>
      </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>3.2.1.ga</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>3.2.1.ga</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.2.1.ga</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
      	<groupId>log4j</groupId>
      	<artifactId>log4j</artifactId>
      	<version>1.2.13</version>
      </dependency>

  </dependencies>

[/code]


Any suggestions?  I guess I will be going through source code now - the
showcase example makes it seem so simple, and I cannot see what little
switch I have missing or need to remove.  Thanks for ideas.
-- 
View this message in context: http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts mapping failing when using struts2-convention-plugin

Posted by wkbutler <ke...@gmail.com>.
I resolved this by removing a struts.properties in our resources/  dir that
had snuck in.  It had defined properties conflicting with our struts.xml, in
particular the 'spring' configuration type caused trouble.  

Unfortunately I deleted the .properties file from CVS already and don't have
access to the properties it had contained - however I had not surgically
identified conflicts anyway.


Musachy Barroso wrote:
> 
> Yes, try convention first and then get on REST. You need to include
> the config browser plugin, for that url to be available. I don't know
> much of REST myself, but with your config settings, Convention should
> be mapping
> 
> http://localhost:8080/lotmap/subdivision
> 
> to the mentioned class. Look at the logs in debug mode, Convention
> will say to what namespace and action name is mapped to every class.
> 
> musachy
> 
> On Fri, Mar 6, 2009 at 4:32 PM, wkbutler <ke...@gmail.com> wrote:
>>
>> Thanks Musachy, that page
>> (http://struts.apache.org/2.1.6/docs/convention-plugin.html) was very
>> useful
>> and now I think I understand the "locators" property much better.
>>
>> So here's my class:  com.tousa.ws.rest.SubdivisionController
>>
>> and I think I told Convention to use suffix "Controller" via the
>> property:
>>
>>    <constant name="struts.convention.action.suffix" value="Controller"/>
>>
>> so according my locators:
>>
>>    <constant name="struts.convention.package.locators" value="rest"/>
>>
>> you are correct, the namespace should be[].  Unfortunately, that is what
>> those URLs already represented. It's a bit confusing because the app is
>> also
>> named "rest".  Doh.  I renamed the app to 'lotmap' to prove this to
>> myself,
>> and, well, I get the same errors, regardless of my URL permutations:
>>
>>    http://localhost:8080/subdivision.xml
>>    http://localhost:8080/lotmap/subdivision.xml   <-- this should be the
>> correct URL, IMHO
>>    http://localhost:8080/lotmap/rest/subdivision.xml
>>
>> I did not mention this, but I am deploying into Jetty, and by default the
>> app deploys under a context named for the app.  Hence the 'lotmap'
>> required
>> in the URL.
>>
>> I am afraid I am doing something even more silly than that.  The
>> Convention
>> documentation mentions using the config-browser-plugin to see all
>> supported
>> actions, at URL
>>     http://localhost:8080/YOUR_CONTEXT_HERE/config-browser/index.action
>>
>> but unfortunately I got an error when running that
>> (java.lang.NoSuchMethodException:
>> com.opensymphony.xwork2.ActionSupport.index()).
>>
>> I think I will back out the struts2-rest-plugin and just try to get
>> Convention working. Currently it is failing when I try to load
>>   WEB-INF/content/subdivision-success.jsp
>> via URL
>>    http://localhost:8080/lotmap/subdivision.jsp
>>
>> however my Controller is set up for the rest-plugin, so both the show()
>> and
>> index() methods return HttpHeaders, not a simple String response. I don't
>> recall the semantics there but that may be interfering with the normal
>> Convention result mapping.
>>
>> Thanks again -
>> Kent
>>
>>
>>
>> Musachy Barroso wrote:
>>>
>>> Ah the little things that drive us crazy :). Your class is
>>> "com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
>>> which means the the action won't have a namespace, so the url will be
>>> /subdivision instead of /rest/subdivision, because the namespace is
>>> what follows the locator, for example:
>>>
>>> com.example.rest.orders.ViewController
>>>
>>> will map to:
>>>
>>> /orders/view
>>>
>>> see the troubleshooting section in the convention plugin.
>>>
>>> musachy
>>>
>>> On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com> wrote:
>>>>
>>>> Hi -
>>>> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
>>>> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for
>>>> me,
>>>> and I have modeled my struts.xml, web.xml, and pom.xml after its
>>>> example.
>>>>
>>>> Still, my app always returns a 404 error for any RESTful URL request.
>>>>  Here
>>>> are my 2 example URLs that I would expect to work at this point:
>>>>
>>>> http://localhost:8080/rest/subdivision.xml
>>>> http://localhost:8080/rest/subdivision/F11.xml
>>>>
>>>> I have cranked up debug, and even though the Restful Mapper &
>>>> Interceptor
>>>> appear to be properly registered at startup:
>>>>
>>>> [code]
>>>> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
>>>> {PackageConfig Name:convention-default namespace:
>>>> parents:[{PackageConfig
>>>> Name:struts-default namespace: parents:[]}]}
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
>>>> default parent package to [rest-default]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
>>>> configurations
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
>>>> loaded using package locators [rest]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding
>>>> actions
>>>> from packages [org.apache.struts.*, org.apache.struts2.*,
>>>> org.springframework.web.struts.*, org.springframework.web.struts2.*,
>>>> org.hibernate.*]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing
>>>> class
>>>> [com.tousa.ws.rest.SubdivisionController] in package
>>>> [com.tousa.ws.rest]
>>>>
>>>> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
>>>> [SubdivisionController] to [subdivision]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName
>>>> for
>>>> class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created
>>>> package
>>>> config named [com.tousa.ws.rest#rest-default#] with a namespace []
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating
>>>> action
>>>> config for class [class com.tousa.ws.rest.SubdivisionController], name
>>>> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
>>>> namespace []
>>>>
>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
>>>> namespace []
>>>>
>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results
>>>> in
>>>> the Servlet container at [/WEB-INF/content/] with result prefix of
>>>> [/WEB-INF/content/subdivision]
>>>>
>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results
>>>> in
>>>> the class path at [WEB-INF/content/] with a result prefix of
>>>> [/WEB-INF/content/subdivision] and action name [subdivision]
>>>> [/code]
>>>>
>>>> on any of the above requests, this is the only logged output (to go
>>>> along
>>>> with the 404 response):
>>>> [code]
>>>> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
>>>> ConfigurationProviders for reload.
>>>>
>>>> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
>>>> nullPropertyValue
>>>> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
>>>> property=struts]
>>>>
>>>> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
>>>> [struts.actionMapping]
>>>> [/code]
>>>>
>>>> which seems totally irrelevant.
>>>>
>>>> I am spinning my wheels now and have tried numerous things, but I
>>>> cannot
>>>> understand why the supposed action configured at startup does not pick
>>>> up
>>>> my
>>>> URLs.
>>>>
>>>> Here are my general configs - I have pared down the configuration to a
>>>> bare
>>>> minimum, to match the Showcase app, to no avail (yet):
>>>>
>>>> struts.xml
>>>> [code]
>>>>    <constant name="struts.convention.action.suffix"
>>>> value="Controller"/>
>>>>    <constant name="struts.convention.action.mapAllMatches"
>>>> value="true"/>
>>>>    <constant name="struts.convention.default.parent.package"
>>>> value="rest-default"/>
>>>>    <constant name="struts.convention.package.locators" value="rest"/>
>>>> [/code]
>>>>
>>>> web.xml
>>>> [code]
>>>>        <context-param>
>>>>        <param-name>contextConfigLocation</param-name>
>>>>        <param-value>classpath*:applicationContext*.xml</param-value>
>>>>    </context-param>
>>>>
>>>>        <!-- Filters -->
>>>>    <filter>
>>>>        <filter-name>struts2</filter-name>
>>>>
>>>> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>>>>    </filter>
>>>>    <filter-mapping>
>>>>        <filter-name>struts2</filter-name>
>>>>        <url-pattern>/*</url-pattern>
>>>>    </filter-mapping>
>>>>
>>>>    <!-- Listeners -->
>>>>    <listener>
>>>>
>>>> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>>>>    </listener>
>>>>
>>>> [/code]
>>>>
>>>> pom.xml
>>>> [code]
>>>>      <dependencies>
>>>>
>>>>        <!--  Struts 2 -->
>>>>        <dependency>
>>>>            <groupId>org.apache.struts</groupId>
>>>>            <artifactId>struts2-core</artifactId>
>>>>            <version>2.1.6</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>                <groupId>org.apache.struts</groupId>
>>>>                <artifactId>struts2-convention-plugin</artifactId>
>>>>                <version>2.1.6</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>org.apache.struts</groupId>
>>>>            <artifactId>struts2-spring-plugin</artifactId>
>>>>            <version>2.1.6</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>        <groupId>org.apache.struts</groupId>
>>>>        <artifactId>struts2-rest-plugin</artifactId>
>>>>        <version>2.1.6</version>
>>>>      </dependency>
>>>>
>>>>        <dependency>
>>>>            <groupId>org.hibernate</groupId>
>>>>            <artifactId>hibernate</artifactId>
>>>>            <version>3.2.1.ga</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>org.hibernate</groupId>
>>>>            <artifactId>hibernate-annotations</artifactId>
>>>>            <version>3.2.1.ga</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>org.hibernate</groupId>
>>>>            <artifactId>hibernate-entitymanager</artifactId>
>>>>            <version>3.2.1.ga</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>javax.persistence</groupId>
>>>>            <artifactId>persistence-api</artifactId>
>>>>            <version>1.0</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>        <groupId>log4j</groupId>
>>>>        <artifactId>log4j</artifactId>
>>>>        <version>1.2.13</version>
>>>>      </dependency>
>>>>
>>>>  </dependencies>
>>>>
>>>> [/code]
>>>>
>>>>
>>>> Any suggestions?  I guess I will be going through source code now - the
>>>> showcase example makes it seem so simple, and I cannot see what little
>>>> switch I have missing or need to remove.  Thanks for ideas.
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
>>>> Sent from the Struts - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22380845.html
>> Sent from the Struts - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 
> 
> -- 
> "Hey you! Would you help me to carry the stone?" Pink Floyd
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22443397.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts mapping failing when using struts2-convention-plugin

Posted by st...@gmail.com.
Thanks my good brother.  I'll attribute my weirdness to trying to code and
watch football at the same time!

Peace,
Scott

2011/1/24 Paweł Wielgus <po...@gmail.com>

> Hi Scott,
> i use them side by side,
> normal action by conention and freaks in xml.
>
> Best greetings,
> Paweł Wielgus.
>
>
> 2011/1/23 stanlick <st...@gmail.com>:
> >
> > Do you guys know if using the convention plugin is mutually exclusive of
> > having an action mapping xml file?  IOW, is the convention plugin an all
> or
> > nothing proposition?  I know it alters the request handling machinery but
> > cannot find anywhere in the docs if it is "expected" to play alongside
> > conventional hand coded mappings.
> >
> > Peace,
> > Scott
> >
> >
> >
> > Musachy Barroso wrote:
> >>
> >> Yes, try convention first and then get on REST. You need to include
> >> the config browser plugin, for that url to be available. I don't know
> >> much of REST myself, but with your config settings, Convention should
> >> be mapping
> >>
> >> http://localhost:8080/lotmap/subdivision
> >>
> >> to the mentioned class. Look at the logs in debug mode, Convention
> >> will say to what namespace and action name is mapped to every class.
> >>
> >> musachy
> >>
> >> On Fri, Mar 6, 2009 at 4:32 PM, wkbutler <ke...@gmail.com> wrote:
> >>>
> >>> Thanks Musachy, that page
> >>> (http://struts.apache.org/2.1.6/docs/convention-plugin.html) was very
> >>> useful
> >>> and now I think I understand the "locators" property much better.
> >>>
> >>> So here's my class:  com.tousa.ws.rest.SubdivisionController
> >>>
> >>> and I think I told Convention to use suffix "Controller" via the
> >>> property:
> >>>
> >>>    <constant name="struts.convention.action.suffix"
> value="Controller"/>
> >>>
> >>> so according my locators:
> >>>
> >>>    <constant name="struts.convention.package.locators" value="rest"/>
> >>>
> >>> you are correct, the namespace should be[].  Unfortunately, that is
> what
> >>> those URLs already represented. It's a bit confusing because the app is
> >>> also
> >>> named "rest".  Doh.  I renamed the app to 'lotmap' to prove this to
> >>> myself,
> >>> and, well, I get the same errors, regardless of my URL permutations:
> >>>
> >>>    http://localhost:8080/subdivision.xml
> >>>    http://localhost:8080/lotmap/subdivision.xml   <-- this should be
> the
> >>> correct URL, IMHO
> >>>    http://localhost:8080/lotmap/rest/subdivision.xml
> >>>
> >>> I did not mention this, but I am deploying into Jetty, and by default
> the
> >>> app deploys under a context named for the app.  Hence the 'lotmap'
> >>> required
> >>> in the URL.
> >>>
> >>> I am afraid I am doing something even more silly than that.  The
> >>> Convention
> >>> documentation mentions using the config-browser-plugin to see all
> >>> supported
> >>> actions, at URL
> >>>
> http://localhost:8080/YOUR_CONTEXT_HERE/config-browser/index.action
> >>>
> >>> but unfortunately I got an error when running that
> >>> (java.lang.NoSuchMethodException:
> >>> com.opensymphony.xwork2.ActionSupport.index()).
> >>>
> >>> I think I will back out the struts2-rest-plugin and just try to get
> >>> Convention working. Currently it is failing when I try to load
> >>>   WEB-INF/content/subdivision-success.jsp
> >>> via URL
> >>>    http://localhost:8080/lotmap/subdivision.jsp
> >>>
> >>> however my Controller is set up for the rest-plugin, so both the show()
> >>> and
> >>> index() methods return HttpHeaders, not a simple String response. I
> don't
> >>> recall the semantics there but that may be interfering with the normal
> >>> Convention result mapping.
> >>>
> >>> Thanks again -
> >>> Kent
> >>>
> >>>
> >>>
> >>> Musachy Barroso wrote:
> >>>>
> >>>> Ah the little things that drive us crazy :). Your class is
> >>>> "com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
> >>>> which means the the action won't have a namespace, so the url will be
> >>>> /subdivision instead of /rest/subdivision, because the namespace is
> >>>> what follows the locator, for example:
> >>>>
> >>>> com.example.rest.orders.ViewController
> >>>>
> >>>> will map to:
> >>>>
> >>>> /orders/view
> >>>>
> >>>> see the troubleshooting section in the convention plugin.
> >>>>
> >>>> musachy
> >>>>
> >>>> On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com>
> wrote:
> >>>>>
> >>>>> Hi -
> >>>>> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
> >>>>> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine
> for
> >>>>> me,
> >>>>> and I have modeled my struts.xml, web.xml, and pom.xml after its
> >>>>> example.
> >>>>>
> >>>>> Still, my app always returns a 404 error for any RESTful URL request.
> >>>>>  Here
> >>>>> are my 2 example URLs that I would expect to work at this point:
> >>>>>
> >>>>> http://localhost:8080/rest/subdivision.xml
> >>>>> http://localhost:8080/rest/subdivision/F11.xml
> >>>>>
> >>>>> I have cranked up debug, and even though the Restful Mapper &
> >>>>> Interceptor
> >>>>> appear to be properly registered at startup:
> >>>>>
> >>>>> [code]
> >>>>> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
> >>>>> {PackageConfig Name:convention-default namespace:
> >>>>> parents:[{PackageConfig
> >>>>> Name:struts-default namespace: parents:[]}]}
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting
> action
> >>>>> default parent package to [rest-default]
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading
> action
> >>>>> configurations
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions
> being
> >>>>> loaded using package locators [rest]
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding
> >>>>> actions
> >>>>> from packages [org.apache.struts.*, org.apache.struts2.*,
> >>>>> org.springframework.web.struts.*, org.springframework.web.struts2.*,
> >>>>> org.hibernate.*]
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing
> >>>>> class
> >>>>> [com.tousa.ws.rest.SubdivisionController] in package
> >>>>> [com.tousa.ws.rest]
> >>>>>
> >>>>> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name
> from
> >>>>> [SubdivisionController] to [subdivision]
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got
> actionName
> >>>>> for
> >>>>> class [class com.tousa.ws.rest.SubdivisionController] of
> [subdivision]
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created
> >>>>> package
> >>>>> config named [com.tousa.ws.rest#rest-default#] with a namespace []
> >>>>>
> >>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating
> >>>>> action
> >>>>> config for class [class com.tousa.ws.rest.SubdivisionController],
> name
> >>>>> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
> >>>>> namespace []
> >>>>>
> >>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final
> calculated
> >>>>> namespace []
> >>>>>
> >>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for
> results
> >>>>> in
> >>>>> the Servlet container at [/WEB-INF/content/] with result prefix of
> >>>>> [/WEB-INF/content/subdivision]
> >>>>>
> >>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for
> results
> >>>>> in
> >>>>> the class path at [WEB-INF/content/] with a result prefix of
> >>>>> [/WEB-INF/content/subdivision] and action name [subdivision]
> >>>>> [/code]
> >>>>>
> >>>>> on any of the above requests, this is the only logged output (to go
> >>>>> along
> >>>>> with the 404 response):
> >>>>> [code]
> >>>>> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
> >>>>> ConfigurationProviders for reload.
> >>>>>
> >>>>> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
> >>>>> nullPropertyValue
> >>>>> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
> >>>>> property=struts]
> >>>>>
> >>>>> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
> >>>>> [struts.actionMapping]
> >>>>> [/code]
> >>>>>
> >>>>> which seems totally irrelevant.
> >>>>>
> >>>>> I am spinning my wheels now and have tried numerous things, but I
> >>>>> cannot
> >>>>> understand why the supposed action configured at startup does not
> pick
> >>>>> up
> >>>>> my
> >>>>> URLs.
> >>>>>
> >>>>> Here are my general configs - I have pared down the configuration to
> a
> >>>>> bare
> >>>>> minimum, to match the Showcase app, to no avail (yet):
> >>>>>
> >>>>> struts.xml
> >>>>> [code]
> >>>>>    <constant name="struts.convention.action.suffix"
> >>>>> value="Controller"/>
> >>>>>    <constant name="struts.convention.action.mapAllMatches"
> >>>>> value="true"/>
> >>>>>    <constant name="struts.convention.default.parent.package"
> >>>>> value="rest-default"/>
> >>>>>    <constant name="struts.convention.package.locators" value="rest"/>
> >>>>> [/code]
> >>>>>
> >>>>> web.xml
> >>>>> [code]
> >>>>>        <context-param>
> >>>>>        <param-name>contextConfigLocation</param-name>
> >>>>>        <param-value>classpath*:applicationContext*.xml</param-value>
> >>>>>    </context-param>
> >>>>>
> >>>>>        <!-- Filters -->
> >>>>>    <filter>
> >>>>>        <filter-name>struts2</filter-name>
> >>>>>
> >>>>>
> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
> >>>>>    </filter>
> >>>>>    <filter-mapping>
> >>>>>        <filter-name>struts2</filter-name>
> >>>>>        <url-pattern>/*</url-pattern>
> >>>>>    </filter-mapping>
> >>>>>
> >>>>>    <!-- Listeners -->
> >>>>>    <listener>
> >>>>>
> >>>>>
> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
> >>>>>    </listener>
> >>>>>
> >>>>> [/code]
> >>>>>
> >>>>> pom.xml
> >>>>> [code]
> >>>>>      <dependencies>
> >>>>>
> >>>>>        <!--  Struts 2 -->
> >>>>>        <dependency>
> >>>>>            <groupId>org.apache.struts</groupId>
> >>>>>            <artifactId>struts2-core</artifactId>
> >>>>>            <version>2.1.6</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>                <groupId>org.apache.struts</groupId>
> >>>>>                <artifactId>struts2-convention-plugin</artifactId>
> >>>>>                <version>2.1.6</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>            <groupId>org.apache.struts</groupId>
> >>>>>            <artifactId>struts2-spring-plugin</artifactId>
> >>>>>            <version>2.1.6</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>        <groupId>org.apache.struts</groupId>
> >>>>>        <artifactId>struts2-rest-plugin</artifactId>
> >>>>>        <version>2.1.6</version>
> >>>>>      </dependency>
> >>>>>
> >>>>>        <dependency>
> >>>>>            <groupId>org.hibernate</groupId>
> >>>>>            <artifactId>hibernate</artifactId>
> >>>>>            <version>3.2.1.ga</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>            <groupId>org.hibernate</groupId>
> >>>>>            <artifactId>hibernate-annotations</artifactId>
> >>>>>            <version>3.2.1.ga</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>            <groupId>org.hibernate</groupId>
> >>>>>            <artifactId>hibernate-entitymanager</artifactId>
> >>>>>            <version>3.2.1.ga</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>            <groupId>javax.persistence</groupId>
> >>>>>            <artifactId>persistence-api</artifactId>
> >>>>>            <version>1.0</version>
> >>>>>        </dependency>
> >>>>>        <dependency>
> >>>>>        <groupId>log4j</groupId>
> >>>>>        <artifactId>log4j</artifactId>
> >>>>>        <version>1.2.13</version>
> >>>>>      </dependency>
> >>>>>
> >>>>>  </dependencies>
> >>>>>
> >>>>> [/code]
> >>>>>
> >>>>>
> >>>>> Any suggestions?  I guess I will be going through source code now -
> the
> >>>>> showcase example makes it seem so simple, and I cannot see what
> little
> >>>>> switch I have missing or need to remove.  Thanks for ideas.
> >>>>> --
> >>>>> View this message in context:
> >>>>>
> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
> >>>>> Sent from the Struts - User mailing list archive at Nabble.com.
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>>>> For additional commands, e-mail: user-help@struts.apache.org
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> "Hey you! Would you help me to carry the stone?" Pink Floyd
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>>> For additional commands, e-mail: user-help@struts.apache.org
> >>>>
> >>>>
> >>>>
> >>>
> >>> --
> >>> View this message in context:
> >>>
> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22380845.html
> >>> Sent from the Struts - User mailing list archive at Nabble.com.
> >>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>> For additional commands, e-mail: user-help@struts.apache.org
> >>>
> >>>
> >>
> >>
> >>
> >> --
> >> "Hey you! Would you help me to carry the stone?" Pink Floyd
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >> For additional commands, e-mail: user-help@struts.apache.org
> >>
> >>
> >>
> >
> > --
> > View this message in context:
> http://old.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p30743100.html
> > Sent from the Struts - User mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> > For additional commands, e-mail: user-help@struts.apache.org
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Struts mapping failing when using struts2-convention-plugin

Posted by Paweł Wielgus <po...@gmail.com>.
Hi Scott,
i use them side by side,
normal action by conention and freaks in xml.

Best greetings,
Paweł Wielgus.


2011/1/23 stanlick <st...@gmail.com>:
>
> Do you guys know if using the convention plugin is mutually exclusive of
> having an action mapping xml file?  IOW, is the convention plugin an all or
> nothing proposition?  I know it alters the request handling machinery but
> cannot find anywhere in the docs if it is "expected" to play alongside
> conventional hand coded mappings.
>
> Peace,
> Scott
>
>
>
> Musachy Barroso wrote:
>>
>> Yes, try convention first and then get on REST. You need to include
>> the config browser plugin, for that url to be available. I don't know
>> much of REST myself, but with your config settings, Convention should
>> be mapping
>>
>> http://localhost:8080/lotmap/subdivision
>>
>> to the mentioned class. Look at the logs in debug mode, Convention
>> will say to what namespace and action name is mapped to every class.
>>
>> musachy
>>
>> On Fri, Mar 6, 2009 at 4:32 PM, wkbutler <ke...@gmail.com> wrote:
>>>
>>> Thanks Musachy, that page
>>> (http://struts.apache.org/2.1.6/docs/convention-plugin.html) was very
>>> useful
>>> and now I think I understand the "locators" property much better.
>>>
>>> So here's my class:  com.tousa.ws.rest.SubdivisionController
>>>
>>> and I think I told Convention to use suffix "Controller" via the
>>> property:
>>>
>>>    <constant name="struts.convention.action.suffix" value="Controller"/>
>>>
>>> so according my locators:
>>>
>>>    <constant name="struts.convention.package.locators" value="rest"/>
>>>
>>> you are correct, the namespace should be[].  Unfortunately, that is what
>>> those URLs already represented. It's a bit confusing because the app is
>>> also
>>> named "rest".  Doh.  I renamed the app to 'lotmap' to prove this to
>>> myself,
>>> and, well, I get the same errors, regardless of my URL permutations:
>>>
>>>    http://localhost:8080/subdivision.xml
>>>    http://localhost:8080/lotmap/subdivision.xml   <-- this should be the
>>> correct URL, IMHO
>>>    http://localhost:8080/lotmap/rest/subdivision.xml
>>>
>>> I did not mention this, but I am deploying into Jetty, and by default the
>>> app deploys under a context named for the app.  Hence the 'lotmap'
>>> required
>>> in the URL.
>>>
>>> I am afraid I am doing something even more silly than that.  The
>>> Convention
>>> documentation mentions using the config-browser-plugin to see all
>>> supported
>>> actions, at URL
>>>     http://localhost:8080/YOUR_CONTEXT_HERE/config-browser/index.action
>>>
>>> but unfortunately I got an error when running that
>>> (java.lang.NoSuchMethodException:
>>> com.opensymphony.xwork2.ActionSupport.index()).
>>>
>>> I think I will back out the struts2-rest-plugin and just try to get
>>> Convention working. Currently it is failing when I try to load
>>>   WEB-INF/content/subdivision-success.jsp
>>> via URL
>>>    http://localhost:8080/lotmap/subdivision.jsp
>>>
>>> however my Controller is set up for the rest-plugin, so both the show()
>>> and
>>> index() methods return HttpHeaders, not a simple String response. I don't
>>> recall the semantics there but that may be interfering with the normal
>>> Convention result mapping.
>>>
>>> Thanks again -
>>> Kent
>>>
>>>
>>>
>>> Musachy Barroso wrote:
>>>>
>>>> Ah the little things that drive us crazy :). Your class is
>>>> "com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
>>>> which means the the action won't have a namespace, so the url will be
>>>> /subdivision instead of /rest/subdivision, because the namespace is
>>>> what follows the locator, for example:
>>>>
>>>> com.example.rest.orders.ViewController
>>>>
>>>> will map to:
>>>>
>>>> /orders/view
>>>>
>>>> see the troubleshooting section in the convention plugin.
>>>>
>>>> musachy
>>>>
>>>> On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com> wrote:
>>>>>
>>>>> Hi -
>>>>> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
>>>>> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for
>>>>> me,
>>>>> and I have modeled my struts.xml, web.xml, and pom.xml after its
>>>>> example.
>>>>>
>>>>> Still, my app always returns a 404 error for any RESTful URL request.
>>>>>  Here
>>>>> are my 2 example URLs that I would expect to work at this point:
>>>>>
>>>>> http://localhost:8080/rest/subdivision.xml
>>>>> http://localhost:8080/rest/subdivision/F11.xml
>>>>>
>>>>> I have cranked up debug, and even though the Restful Mapper &
>>>>> Interceptor
>>>>> appear to be properly registered at startup:
>>>>>
>>>>> [code]
>>>>> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
>>>>> {PackageConfig Name:convention-default namespace:
>>>>> parents:[{PackageConfig
>>>>> Name:struts-default namespace: parents:[]}]}
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
>>>>> default parent package to [rest-default]
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
>>>>> configurations
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
>>>>> loaded using package locators [rest]
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding
>>>>> actions
>>>>> from packages [org.apache.struts.*, org.apache.struts2.*,
>>>>> org.springframework.web.struts.*, org.springframework.web.struts2.*,
>>>>> org.hibernate.*]
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing
>>>>> class
>>>>> [com.tousa.ws.rest.SubdivisionController] in package
>>>>> [com.tousa.ws.rest]
>>>>>
>>>>> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
>>>>> [SubdivisionController] to [subdivision]
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName
>>>>> for
>>>>> class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created
>>>>> package
>>>>> config named [com.tousa.ws.rest#rest-default#] with a namespace []
>>>>>
>>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating
>>>>> action
>>>>> config for class [class com.tousa.ws.rest.SubdivisionController], name
>>>>> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
>>>>> namespace []
>>>>>
>>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
>>>>> namespace []
>>>>>
>>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results
>>>>> in
>>>>> the Servlet container at [/WEB-INF/content/] with result prefix of
>>>>> [/WEB-INF/content/subdivision]
>>>>>
>>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results
>>>>> in
>>>>> the class path at [WEB-INF/content/] with a result prefix of
>>>>> [/WEB-INF/content/subdivision] and action name [subdivision]
>>>>> [/code]
>>>>>
>>>>> on any of the above requests, this is the only logged output (to go
>>>>> along
>>>>> with the 404 response):
>>>>> [code]
>>>>> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
>>>>> ConfigurationProviders for reload.
>>>>>
>>>>> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
>>>>> nullPropertyValue
>>>>> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
>>>>> property=struts]
>>>>>
>>>>> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
>>>>> [struts.actionMapping]
>>>>> [/code]
>>>>>
>>>>> which seems totally irrelevant.
>>>>>
>>>>> I am spinning my wheels now and have tried numerous things, but I
>>>>> cannot
>>>>> understand why the supposed action configured at startup does not pick
>>>>> up
>>>>> my
>>>>> URLs.
>>>>>
>>>>> Here are my general configs - I have pared down the configuration to a
>>>>> bare
>>>>> minimum, to match the Showcase app, to no avail (yet):
>>>>>
>>>>> struts.xml
>>>>> [code]
>>>>>    <constant name="struts.convention.action.suffix"
>>>>> value="Controller"/>
>>>>>    <constant name="struts.convention.action.mapAllMatches"
>>>>> value="true"/>
>>>>>    <constant name="struts.convention.default.parent.package"
>>>>> value="rest-default"/>
>>>>>    <constant name="struts.convention.package.locators" value="rest"/>
>>>>> [/code]
>>>>>
>>>>> web.xml
>>>>> [code]
>>>>>        <context-param>
>>>>>        <param-name>contextConfigLocation</param-name>
>>>>>        <param-value>classpath*:applicationContext*.xml</param-value>
>>>>>    </context-param>
>>>>>
>>>>>        <!-- Filters -->
>>>>>    <filter>
>>>>>        <filter-name>struts2</filter-name>
>>>>>
>>>>> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>>>>>    </filter>
>>>>>    <filter-mapping>
>>>>>        <filter-name>struts2</filter-name>
>>>>>        <url-pattern>/*</url-pattern>
>>>>>    </filter-mapping>
>>>>>
>>>>>    <!-- Listeners -->
>>>>>    <listener>
>>>>>
>>>>> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>>>>>    </listener>
>>>>>
>>>>> [/code]
>>>>>
>>>>> pom.xml
>>>>> [code]
>>>>>      <dependencies>
>>>>>
>>>>>        <!--  Struts 2 -->
>>>>>        <dependency>
>>>>>            <groupId>org.apache.struts</groupId>
>>>>>            <artifactId>struts2-core</artifactId>
>>>>>            <version>2.1.6</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>                <groupId>org.apache.struts</groupId>
>>>>>                <artifactId>struts2-convention-plugin</artifactId>
>>>>>                <version>2.1.6</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>            <groupId>org.apache.struts</groupId>
>>>>>            <artifactId>struts2-spring-plugin</artifactId>
>>>>>            <version>2.1.6</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>        <groupId>org.apache.struts</groupId>
>>>>>        <artifactId>struts2-rest-plugin</artifactId>
>>>>>        <version>2.1.6</version>
>>>>>      </dependency>
>>>>>
>>>>>        <dependency>
>>>>>            <groupId>org.hibernate</groupId>
>>>>>            <artifactId>hibernate</artifactId>
>>>>>            <version>3.2.1.ga</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>            <groupId>org.hibernate</groupId>
>>>>>            <artifactId>hibernate-annotations</artifactId>
>>>>>            <version>3.2.1.ga</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>            <groupId>org.hibernate</groupId>
>>>>>            <artifactId>hibernate-entitymanager</artifactId>
>>>>>            <version>3.2.1.ga</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>            <groupId>javax.persistence</groupId>
>>>>>            <artifactId>persistence-api</artifactId>
>>>>>            <version>1.0</version>
>>>>>        </dependency>
>>>>>        <dependency>
>>>>>        <groupId>log4j</groupId>
>>>>>        <artifactId>log4j</artifactId>
>>>>>        <version>1.2.13</version>
>>>>>      </dependency>
>>>>>
>>>>>  </dependencies>
>>>>>
>>>>> [/code]
>>>>>
>>>>>
>>>>> Any suggestions?  I guess I will be going through source code now - the
>>>>> showcase example makes it seem so simple, and I cannot see what little
>>>>> switch I have missing or need to remove.  Thanks for ideas.
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
>>>>> Sent from the Struts - User mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22380845.html
>>> Sent from the Struts - User mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>
>>
>>
>> --
>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p30743100.html
> Sent from the Struts - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts mapping failing when using struts2-convention-plugin

Posted by stanlick <st...@gmail.com>.
Do you guys know if using the convention plugin is mutually exclusive of
having an action mapping xml file?  IOW, is the convention plugin an all or
nothing proposition?  I know it alters the request handling machinery but
cannot find anywhere in the docs if it is "expected" to play alongside
conventional hand coded mappings.

Peace,
Scott



Musachy Barroso wrote:
> 
> Yes, try convention first and then get on REST. You need to include
> the config browser plugin, for that url to be available. I don't know
> much of REST myself, but with your config settings, Convention should
> be mapping
> 
> http://localhost:8080/lotmap/subdivision
> 
> to the mentioned class. Look at the logs in debug mode, Convention
> will say to what namespace and action name is mapped to every class.
> 
> musachy
> 
> On Fri, Mar 6, 2009 at 4:32 PM, wkbutler <ke...@gmail.com> wrote:
>>
>> Thanks Musachy, that page
>> (http://struts.apache.org/2.1.6/docs/convention-plugin.html) was very
>> useful
>> and now I think I understand the "locators" property much better.
>>
>> So here's my class:  com.tousa.ws.rest.SubdivisionController
>>
>> and I think I told Convention to use suffix "Controller" via the
>> property:
>>
>>    <constant name="struts.convention.action.suffix" value="Controller"/>
>>
>> so according my locators:
>>
>>    <constant name="struts.convention.package.locators" value="rest"/>
>>
>> you are correct, the namespace should be[].  Unfortunately, that is what
>> those URLs already represented. It's a bit confusing because the app is
>> also
>> named "rest".  Doh.  I renamed the app to 'lotmap' to prove this to
>> myself,
>> and, well, I get the same errors, regardless of my URL permutations:
>>
>>    http://localhost:8080/subdivision.xml
>>    http://localhost:8080/lotmap/subdivision.xml   <-- this should be the
>> correct URL, IMHO
>>    http://localhost:8080/lotmap/rest/subdivision.xml
>>
>> I did not mention this, but I am deploying into Jetty, and by default the
>> app deploys under a context named for the app.  Hence the 'lotmap'
>> required
>> in the URL.
>>
>> I am afraid I am doing something even more silly than that.  The
>> Convention
>> documentation mentions using the config-browser-plugin to see all
>> supported
>> actions, at URL
>>     http://localhost:8080/YOUR_CONTEXT_HERE/config-browser/index.action
>>
>> but unfortunately I got an error when running that
>> (java.lang.NoSuchMethodException:
>> com.opensymphony.xwork2.ActionSupport.index()).
>>
>> I think I will back out the struts2-rest-plugin and just try to get
>> Convention working. Currently it is failing when I try to load
>>   WEB-INF/content/subdivision-success.jsp
>> via URL
>>    http://localhost:8080/lotmap/subdivision.jsp
>>
>> however my Controller is set up for the rest-plugin, so both the show()
>> and
>> index() methods return HttpHeaders, not a simple String response. I don't
>> recall the semantics there but that may be interfering with the normal
>> Convention result mapping.
>>
>> Thanks again -
>> Kent
>>
>>
>>
>> Musachy Barroso wrote:
>>>
>>> Ah the little things that drive us crazy :). Your class is
>>> "com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
>>> which means the the action won't have a namespace, so the url will be
>>> /subdivision instead of /rest/subdivision, because the namespace is
>>> what follows the locator, for example:
>>>
>>> com.example.rest.orders.ViewController
>>>
>>> will map to:
>>>
>>> /orders/view
>>>
>>> see the troubleshooting section in the convention plugin.
>>>
>>> musachy
>>>
>>> On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com> wrote:
>>>>
>>>> Hi -
>>>> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
>>>> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for
>>>> me,
>>>> and I have modeled my struts.xml, web.xml, and pom.xml after its
>>>> example.
>>>>
>>>> Still, my app always returns a 404 error for any RESTful URL request.
>>>>  Here
>>>> are my 2 example URLs that I would expect to work at this point:
>>>>
>>>> http://localhost:8080/rest/subdivision.xml
>>>> http://localhost:8080/rest/subdivision/F11.xml
>>>>
>>>> I have cranked up debug, and even though the Restful Mapper &
>>>> Interceptor
>>>> appear to be properly registered at startup:
>>>>
>>>> [code]
>>>> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
>>>> {PackageConfig Name:convention-default namespace:
>>>> parents:[{PackageConfig
>>>> Name:struts-default namespace: parents:[]}]}
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
>>>> default parent package to [rest-default]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
>>>> configurations
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
>>>> loaded using package locators [rest]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding
>>>> actions
>>>> from packages [org.apache.struts.*, org.apache.struts2.*,
>>>> org.springframework.web.struts.*, org.springframework.web.struts2.*,
>>>> org.hibernate.*]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing
>>>> class
>>>> [com.tousa.ws.rest.SubdivisionController] in package
>>>> [com.tousa.ws.rest]
>>>>
>>>> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
>>>> [SubdivisionController] to [subdivision]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName
>>>> for
>>>> class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created
>>>> package
>>>> config named [com.tousa.ws.rest#rest-default#] with a namespace []
>>>>
>>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating
>>>> action
>>>> config for class [class com.tousa.ws.rest.SubdivisionController], name
>>>> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
>>>> namespace []
>>>>
>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
>>>> namespace []
>>>>
>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results
>>>> in
>>>> the Servlet container at [/WEB-INF/content/] with result prefix of
>>>> [/WEB-INF/content/subdivision]
>>>>
>>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results
>>>> in
>>>> the class path at [WEB-INF/content/] with a result prefix of
>>>> [/WEB-INF/content/subdivision] and action name [subdivision]
>>>> [/code]
>>>>
>>>> on any of the above requests, this is the only logged output (to go
>>>> along
>>>> with the 404 response):
>>>> [code]
>>>> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
>>>> ConfigurationProviders for reload.
>>>>
>>>> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
>>>> nullPropertyValue
>>>> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
>>>> property=struts]
>>>>
>>>> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
>>>> [struts.actionMapping]
>>>> [/code]
>>>>
>>>> which seems totally irrelevant.
>>>>
>>>> I am spinning my wheels now and have tried numerous things, but I
>>>> cannot
>>>> understand why the supposed action configured at startup does not pick
>>>> up
>>>> my
>>>> URLs.
>>>>
>>>> Here are my general configs - I have pared down the configuration to a
>>>> bare
>>>> minimum, to match the Showcase app, to no avail (yet):
>>>>
>>>> struts.xml
>>>> [code]
>>>>    <constant name="struts.convention.action.suffix"
>>>> value="Controller"/>
>>>>    <constant name="struts.convention.action.mapAllMatches"
>>>> value="true"/>
>>>>    <constant name="struts.convention.default.parent.package"
>>>> value="rest-default"/>
>>>>    <constant name="struts.convention.package.locators" value="rest"/>
>>>> [/code]
>>>>
>>>> web.xml
>>>> [code]
>>>>        <context-param>
>>>>        <param-name>contextConfigLocation</param-name>
>>>>        <param-value>classpath*:applicationContext*.xml</param-value>
>>>>    </context-param>
>>>>
>>>>        <!-- Filters -->
>>>>    <filter>
>>>>        <filter-name>struts2</filter-name>
>>>>
>>>> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>>>>    </filter>
>>>>    <filter-mapping>
>>>>        <filter-name>struts2</filter-name>
>>>>        <url-pattern>/*</url-pattern>
>>>>    </filter-mapping>
>>>>
>>>>    <!-- Listeners -->
>>>>    <listener>
>>>>
>>>> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>>>>    </listener>
>>>>
>>>> [/code]
>>>>
>>>> pom.xml
>>>> [code]
>>>>      <dependencies>
>>>>
>>>>        <!--  Struts 2 -->
>>>>        <dependency>
>>>>            <groupId>org.apache.struts</groupId>
>>>>            <artifactId>struts2-core</artifactId>
>>>>            <version>2.1.6</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>                <groupId>org.apache.struts</groupId>
>>>>                <artifactId>struts2-convention-plugin</artifactId>
>>>>                <version>2.1.6</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>org.apache.struts</groupId>
>>>>            <artifactId>struts2-spring-plugin</artifactId>
>>>>            <version>2.1.6</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>        <groupId>org.apache.struts</groupId>
>>>>        <artifactId>struts2-rest-plugin</artifactId>
>>>>        <version>2.1.6</version>
>>>>      </dependency>
>>>>
>>>>        <dependency>
>>>>            <groupId>org.hibernate</groupId>
>>>>            <artifactId>hibernate</artifactId>
>>>>            <version>3.2.1.ga</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>org.hibernate</groupId>
>>>>            <artifactId>hibernate-annotations</artifactId>
>>>>            <version>3.2.1.ga</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>org.hibernate</groupId>
>>>>            <artifactId>hibernate-entitymanager</artifactId>
>>>>            <version>3.2.1.ga</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>            <groupId>javax.persistence</groupId>
>>>>            <artifactId>persistence-api</artifactId>
>>>>            <version>1.0</version>
>>>>        </dependency>
>>>>        <dependency>
>>>>        <groupId>log4j</groupId>
>>>>        <artifactId>log4j</artifactId>
>>>>        <version>1.2.13</version>
>>>>      </dependency>
>>>>
>>>>  </dependencies>
>>>>
>>>> [/code]
>>>>
>>>>
>>>> Any suggestions?  I guess I will be going through source code now - the
>>>> showcase example makes it seem so simple, and I cannot see what little
>>>> switch I have missing or need to remove.  Thanks for ideas.
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
>>>> Sent from the Struts - User mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>> For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22380845.html
>> Sent from the Struts - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 
> 
> -- 
> "Hey you! Would you help me to carry the stone?" Pink Floyd
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p30743100.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts mapping failing when using struts2-convention-plugin

Posted by Musachy Barroso <mu...@gmail.com>.
Yes, try convention first and then get on REST. You need to include
the config browser plugin, for that url to be available. I don't know
much of REST myself, but with your config settings, Convention should
be mapping

http://localhost:8080/lotmap/subdivision

to the mentioned class. Look at the logs in debug mode, Convention
will say to what namespace and action name is mapped to every class.

musachy

On Fri, Mar 6, 2009 at 4:32 PM, wkbutler <ke...@gmail.com> wrote:
>
> Thanks Musachy, that page
> (http://struts.apache.org/2.1.6/docs/convention-plugin.html) was very useful
> and now I think I understand the "locators" property much better.
>
> So here's my class:  com.tousa.ws.rest.SubdivisionController
>
> and I think I told Convention to use suffix "Controller" via the property:
>
>    <constant name="struts.convention.action.suffix" value="Controller"/>
>
> so according my locators:
>
>    <constant name="struts.convention.package.locators" value="rest"/>
>
> you are correct, the namespace should be[].  Unfortunately, that is what
> those URLs already represented. It's a bit confusing because the app is also
> named "rest".  Doh.  I renamed the app to 'lotmap' to prove this to myself,
> and, well, I get the same errors, regardless of my URL permutations:
>
>    http://localhost:8080/subdivision.xml
>    http://localhost:8080/lotmap/subdivision.xml   <-- this should be the
> correct URL, IMHO
>    http://localhost:8080/lotmap/rest/subdivision.xml
>
> I did not mention this, but I am deploying into Jetty, and by default the
> app deploys under a context named for the app.  Hence the 'lotmap' required
> in the URL.
>
> I am afraid I am doing something even more silly than that.  The Convention
> documentation mentions using the config-browser-plugin to see all supported
> actions, at URL
>     http://localhost:8080/YOUR_CONTEXT_HERE/config-browser/index.action
>
> but unfortunately I got an error when running that
> (java.lang.NoSuchMethodException:
> com.opensymphony.xwork2.ActionSupport.index()).
>
> I think I will back out the struts2-rest-plugin and just try to get
> Convention working. Currently it is failing when I try to load
>   WEB-INF/content/subdivision-success.jsp
> via URL
>    http://localhost:8080/lotmap/subdivision.jsp
>
> however my Controller is set up for the rest-plugin, so both the show() and
> index() methods return HttpHeaders, not a simple String response. I don't
> recall the semantics there but that may be interfering with the normal
> Convention result mapping.
>
> Thanks again -
> Kent
>
>
>
> Musachy Barroso wrote:
>>
>> Ah the little things that drive us crazy :). Your class is
>> "com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
>> which means the the action won't have a namespace, so the url will be
>> /subdivision instead of /rest/subdivision, because the namespace is
>> what follows the locator, for example:
>>
>> com.example.rest.orders.ViewController
>>
>> will map to:
>>
>> /orders/view
>>
>> see the troubleshooting section in the convention plugin.
>>
>> musachy
>>
>> On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com> wrote:
>>>
>>> Hi -
>>> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
>>> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for
>>> me,
>>> and I have modeled my struts.xml, web.xml, and pom.xml after its example.
>>>
>>> Still, my app always returns a 404 error for any RESTful URL request.
>>>  Here
>>> are my 2 example URLs that I would expect to work at this point:
>>>
>>> http://localhost:8080/rest/subdivision.xml
>>> http://localhost:8080/rest/subdivision/F11.xml
>>>
>>> I have cranked up debug, and even though the Restful Mapper & Interceptor
>>> appear to be properly registered at startup:
>>>
>>> [code]
>>> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
>>> {PackageConfig Name:convention-default namespace: parents:[{PackageConfig
>>> Name:struts-default namespace: parents:[]}]}
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
>>> default parent package to [rest-default]
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
>>> configurations
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
>>> loaded using package locators [rest]
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding
>>> actions
>>> from packages [org.apache.struts.*, org.apache.struts2.*,
>>> org.springframework.web.struts.*, org.springframework.web.struts2.*,
>>> org.hibernate.*]
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing class
>>> [com.tousa.ws.rest.SubdivisionController] in package [com.tousa.ws.rest]
>>>
>>> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
>>> [SubdivisionController] to [subdivision]
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName
>>> for
>>> class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created package
>>> config named [com.tousa.ws.rest#rest-default#] with a namespace []
>>>
>>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating action
>>> config for class [class com.tousa.ws.rest.SubdivisionController], name
>>> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
>>> namespace []
>>>
>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
>>> namespace []
>>>
>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
>>> the Servlet container at [/WEB-INF/content/] with result prefix of
>>> [/WEB-INF/content/subdivision]
>>>
>>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
>>> the class path at [WEB-INF/content/] with a result prefix of
>>> [/WEB-INF/content/subdivision] and action name [subdivision]
>>> [/code]
>>>
>>> on any of the above requests, this is the only logged output (to go along
>>> with the 404 response):
>>> [code]
>>> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
>>> ConfigurationProviders for reload.
>>>
>>> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
>>> nullPropertyValue
>>> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
>>> property=struts]
>>>
>>> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
>>> [struts.actionMapping]
>>> [/code]
>>>
>>> which seems totally irrelevant.
>>>
>>> I am spinning my wheels now and have tried numerous things, but I cannot
>>> understand why the supposed action configured at startup does not pick up
>>> my
>>> URLs.
>>>
>>> Here are my general configs - I have pared down the configuration to a
>>> bare
>>> minimum, to match the Showcase app, to no avail (yet):
>>>
>>> struts.xml
>>> [code]
>>>    <constant name="struts.convention.action.suffix" value="Controller"/>
>>>    <constant name="struts.convention.action.mapAllMatches" value="true"/>
>>>    <constant name="struts.convention.default.parent.package"
>>> value="rest-default"/>
>>>    <constant name="struts.convention.package.locators" value="rest"/>
>>> [/code]
>>>
>>> web.xml
>>> [code]
>>>        <context-param>
>>>        <param-name>contextConfigLocation</param-name>
>>>        <param-value>classpath*:applicationContext*.xml</param-value>
>>>    </context-param>
>>>
>>>        <!-- Filters -->
>>>    <filter>
>>>        <filter-name>struts2</filter-name>
>>>
>>> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>>>    </filter>
>>>    <filter-mapping>
>>>        <filter-name>struts2</filter-name>
>>>        <url-pattern>/*</url-pattern>
>>>    </filter-mapping>
>>>
>>>    <!-- Listeners -->
>>>    <listener>
>>>
>>> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>>>    </listener>
>>>
>>> [/code]
>>>
>>> pom.xml
>>> [code]
>>>      <dependencies>
>>>
>>>        <!--  Struts 2 -->
>>>        <dependency>
>>>            <groupId>org.apache.struts</groupId>
>>>            <artifactId>struts2-core</artifactId>
>>>            <version>2.1.6</version>
>>>        </dependency>
>>>        <dependency>
>>>                <groupId>org.apache.struts</groupId>
>>>                <artifactId>struts2-convention-plugin</artifactId>
>>>                <version>2.1.6</version>
>>>        </dependency>
>>>        <dependency>
>>>            <groupId>org.apache.struts</groupId>
>>>            <artifactId>struts2-spring-plugin</artifactId>
>>>            <version>2.1.6</version>
>>>        </dependency>
>>>        <dependency>
>>>        <groupId>org.apache.struts</groupId>
>>>        <artifactId>struts2-rest-plugin</artifactId>
>>>        <version>2.1.6</version>
>>>      </dependency>
>>>
>>>        <dependency>
>>>            <groupId>org.hibernate</groupId>
>>>            <artifactId>hibernate</artifactId>
>>>            <version>3.2.1.ga</version>
>>>        </dependency>
>>>        <dependency>
>>>            <groupId>org.hibernate</groupId>
>>>            <artifactId>hibernate-annotations</artifactId>
>>>            <version>3.2.1.ga</version>
>>>        </dependency>
>>>        <dependency>
>>>            <groupId>org.hibernate</groupId>
>>>            <artifactId>hibernate-entitymanager</artifactId>
>>>            <version>3.2.1.ga</version>
>>>        </dependency>
>>>        <dependency>
>>>            <groupId>javax.persistence</groupId>
>>>            <artifactId>persistence-api</artifactId>
>>>            <version>1.0</version>
>>>        </dependency>
>>>        <dependency>
>>>        <groupId>log4j</groupId>
>>>        <artifactId>log4j</artifactId>
>>>        <version>1.2.13</version>
>>>      </dependency>
>>>
>>>  </dependencies>
>>>
>>> [/code]
>>>
>>>
>>> Any suggestions?  I guess I will be going through source code now - the
>>> showcase example makes it seem so simple, and I cannot see what little
>>> switch I have missing or need to remove.  Thanks for ideas.
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
>>> Sent from the Struts - User mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>> For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>
>>
>>
>> --
>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22380845.html
> Sent from the Struts - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>



-- 
"Hey you! Would you help me to carry the stone?" Pink Floyd

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts mapping failing when using struts2-convention-plugin

Posted by wkbutler <ke...@gmail.com>.
Thanks Musachy, that page
(http://struts.apache.org/2.1.6/docs/convention-plugin.html) was very useful
and now I think I understand the "locators" property much better.

So here's my class:  com.tousa.ws.rest.SubdivisionController

and I think I told Convention to use suffix "Controller" via the property:  

    <constant name="struts.convention.action.suffix" value="Controller"/>

so according my locators:

    <constant name="struts.convention.package.locators" value="rest"/>

you are correct, the namespace should be[].  Unfortunately, that is what
those URLs already represented. It's a bit confusing because the app is also
named "rest".  Doh.  I renamed the app to 'lotmap' to prove this to myself,
and, well, I get the same errors, regardless of my URL permutations:

    http://localhost:8080/subdivision.xml
    http://localhost:8080/lotmap/subdivision.xml   <-- this should be the
correct URL, IMHO
    http://localhost:8080/lotmap/rest/subdivision.xml

I did not mention this, but I am deploying into Jetty, and by default the
app deploys under a context named for the app.  Hence the 'lotmap' required
in the URL.

I am afraid I am doing something even more silly than that.  The Convention
documentation mentions using the config-browser-plugin to see all supported
actions, at URL
     http://localhost:8080/YOUR_CONTEXT_HERE/config-browser/index.action

but unfortunately I got an error when running that 
(java.lang.NoSuchMethodException:
com.opensymphony.xwork2.ActionSupport.index()).

I think I will back out the struts2-rest-plugin and just try to get
Convention working. Currently it is failing when I try to load 
   WEB-INF/content/subdivision-success.jsp  
via URL
    http://localhost:8080/lotmap/subdivision.jsp

however my Controller is set up for the rest-plugin, so both the show() and
index() methods return HttpHeaders, not a simple String response. I don't
recall the semantics there but that may be interfering with the normal
Convention result mapping.

Thanks again -
Kent



Musachy Barroso wrote:
> 
> Ah the little things that drive us crazy :). Your class is
> "com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
> which means the the action won't have a namespace, so the url will be
> /subdivision instead of /rest/subdivision, because the namespace is
> what follows the locator, for example:
> 
> com.example.rest.orders.ViewController
> 
> will map to:
> 
> /orders/view
> 
> see the troubleshooting section in the convention plugin.
> 
> musachy
> 
> On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com> wrote:
>>
>> Hi -
>> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
>> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for
>> me,
>> and I have modeled my struts.xml, web.xml, and pom.xml after its example.
>>
>> Still, my app always returns a 404 error for any RESTful URL request.
>>  Here
>> are my 2 example URLs that I would expect to work at this point:
>>
>> http://localhost:8080/rest/subdivision.xml
>> http://localhost:8080/rest/subdivision/F11.xml
>>
>> I have cranked up debug, and even though the Restful Mapper & Interceptor
>> appear to be properly registered at startup:
>>
>> [code]
>> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
>> {PackageConfig Name:convention-default namespace: parents:[{PackageConfig
>> Name:struts-default namespace: parents:[]}]}
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
>> default parent package to [rest-default]
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
>> configurations
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
>> loaded using package locators [rest]
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding
>> actions
>> from packages [org.apache.struts.*, org.apache.struts2.*,
>> org.springframework.web.struts.*, org.springframework.web.struts2.*,
>> org.hibernate.*]
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing class
>> [com.tousa.ws.rest.SubdivisionController] in package [com.tousa.ws.rest]
>>
>> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
>> [SubdivisionController] to [subdivision]
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName
>> for
>> class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created package
>> config named [com.tousa.ws.rest#rest-default#] with a namespace []
>>
>> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating action
>> config for class [class com.tousa.ws.rest.SubdivisionController], name
>> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
>> namespace []
>>
>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
>> namespace []
>>
>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
>> the Servlet container at [/WEB-INF/content/] with result prefix of
>> [/WEB-INF/content/subdivision]
>>
>> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
>> the class path at [WEB-INF/content/] with a result prefix of
>> [/WEB-INF/content/subdivision] and action name [subdivision]
>> [/code]
>>
>> on any of the above requests, this is the only logged output (to go along
>> with the 404 response):
>> [code]
>> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
>> ConfigurationProviders for reload.
>>
>> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
>> nullPropertyValue
>> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
>> property=struts]
>>
>> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
>> [struts.actionMapping]
>> [/code]
>>
>> which seems totally irrelevant.
>>
>> I am spinning my wheels now and have tried numerous things, but I cannot
>> understand why the supposed action configured at startup does not pick up
>> my
>> URLs.
>>
>> Here are my general configs - I have pared down the configuration to a
>> bare
>> minimum, to match the Showcase app, to no avail (yet):
>>
>> struts.xml
>> [code]
>>    <constant name="struts.convention.action.suffix" value="Controller"/>
>>    <constant name="struts.convention.action.mapAllMatches" value="true"/>
>>    <constant name="struts.convention.default.parent.package"
>> value="rest-default"/>
>>    <constant name="struts.convention.package.locators" value="rest"/>
>> [/code]
>>
>> web.xml
>> [code]
>>        <context-param>
>>        <param-name>contextConfigLocation</param-name>
>>        <param-value>classpath*:applicationContext*.xml</param-value>
>>    </context-param>
>>
>>        <!-- Filters -->
>>    <filter>
>>        <filter-name>struts2</filter-name>
>>
>> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>>    </filter>
>>    <filter-mapping>
>>        <filter-name>struts2</filter-name>
>>        <url-pattern>/*</url-pattern>
>>    </filter-mapping>
>>
>>    <!-- Listeners -->
>>    <listener>
>>
>> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>>    </listener>
>>
>> [/code]
>>
>> pom.xml
>> [code]
>>      <dependencies>
>>
>>        <!--  Struts 2 -->
>>        <dependency>
>>            <groupId>org.apache.struts</groupId>
>>            <artifactId>struts2-core</artifactId>
>>            <version>2.1.6</version>
>>        </dependency>
>>        <dependency>
>>                <groupId>org.apache.struts</groupId>
>>                <artifactId>struts2-convention-plugin</artifactId>
>>                <version>2.1.6</version>
>>        </dependency>
>>        <dependency>
>>            <groupId>org.apache.struts</groupId>
>>            <artifactId>struts2-spring-plugin</artifactId>
>>            <version>2.1.6</version>
>>        </dependency>
>>        <dependency>
>>        <groupId>org.apache.struts</groupId>
>>        <artifactId>struts2-rest-plugin</artifactId>
>>        <version>2.1.6</version>
>>      </dependency>
>>
>>        <dependency>
>>            <groupId>org.hibernate</groupId>
>>            <artifactId>hibernate</artifactId>
>>            <version>3.2.1.ga</version>
>>        </dependency>
>>        <dependency>
>>            <groupId>org.hibernate</groupId>
>>            <artifactId>hibernate-annotations</artifactId>
>>            <version>3.2.1.ga</version>
>>        </dependency>
>>        <dependency>
>>            <groupId>org.hibernate</groupId>
>>            <artifactId>hibernate-entitymanager</artifactId>
>>            <version>3.2.1.ga</version>
>>        </dependency>
>>        <dependency>
>>            <groupId>javax.persistence</groupId>
>>            <artifactId>persistence-api</artifactId>
>>            <version>1.0</version>
>>        </dependency>
>>        <dependency>
>>        <groupId>log4j</groupId>
>>        <artifactId>log4j</artifactId>
>>        <version>1.2.13</version>
>>      </dependency>
>>
>>  </dependencies>
>>
>> [/code]
>>
>>
>> Any suggestions?  I guess I will be going through source code now - the
>> showcase example makes it seem so simple, and I cannot see what little
>> switch I have missing or need to remove.  Thanks for ideas.
>> --
>> View this message in context:
>> http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
>> Sent from the Struts - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 
> 
> -- 
> "Hey you! Would you help me to carry the stone?" Pink Floyd
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22380845.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts mapping failing when using struts2-convention-plugin

Posted by Musachy Barroso <mu...@gmail.com>.
Ah the little things that drive us crazy :). Your class is
"com.tousa.ws.rest.SubdivisionController" and the locator is "rest"
which means the the action won't have a namespace, so the url will be
/subdivision instead of /rest/subdivision, because the namespace is
what follows the locator, for example:

com.example.rest.orders.ViewController

will map to:

/orders/view

see the troubleshooting section in the convention plugin.

musachy

On Fri, Mar 6, 2009 at 3:20 PM, wkbutler <ke...@gmail.com> wrote:
>
> Hi -
> I am attempting to use the struts-rest-plugin, v2.1.6.  I am using
> struts2-rest-showcase-2.1.6 as a guide. The showcase app works fine for me,
> and I have modeled my struts.xml, web.xml, and pom.xml after its example.
>
> Still, my app always returns a 404 error for any RESTful URL request.  Here
> are my 2 example URLs that I would expect to work at this point:
>
> http://localhost:8080/rest/subdivision.xml
> http://localhost:8080/rest/subdivision/F11.xml
>
> I have cranked up debug, and even though the Restful Mapper & Interceptor
> appear to be properly registered at startup:
>
> [code]
> DEBUG [main] XmlConfigurationProvider.debug(57) | Loaded [BUILDER]
> {PackageConfig Name:convention-default namespace: parents:[{PackageConfig
> Name:struts-default namespace: parents:[]}]}
>
> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Setting action
> default parent package to [rest-default]
>
> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Loading action
> configurations
>
> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Actions being
> loaded using package locators [rest]
>
> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Excluding actions
> from packages [org.apache.struts.*, org.apache.struts2.*,
> org.springframework.web.struts.*, org.springframework.web.struts2.*,
> org.hibernate.*]
>
> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Processing class
> [com.tousa.ws.rest.SubdivisionController] in package [com.tousa.ws.rest]
>
> DEBUG [main] SEOActionNameBuilder.trace(69) | Changed action name from
> [SubdivisionController] to [subdivision]
>
> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Got actionName for
> class [class com.tousa.ws.rest.SubdivisionController] of [subdivision]
>
> DEBUG [main] PackageBasedActionConfigBuilder.trace(69) | Created package
> config named [com.tousa.ws.rest#rest-default#] with a namespace []
>
> DEBUG [main] PackageBasedActionConfigBuilder.debug(57) | Creating action
> config for class [class com.tousa.ws.rest.SubdivisionController], name
> [subdivision] and package name [com.tousa.ws.rest#rest-default#] in
> namespace []
>
> DEBUG [main] DefaultResultMapBuilder.trace(69) | Using final calculated
> namespace []
>
> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
> the Servlet container at [/WEB-INF/content/] with result prefix of
> [/WEB-INF/content/subdivision]
>
> DEBUG [main] DefaultResultMapBuilder.trace(69) | Searching for results in
> the class path at [WEB-INF/content/] with a result prefix of
> [/WEB-INF/content/subdivision] and action name [subdivision]
> [/code]
>
> on any of the above requests, this is the only logged output (to go along
> with the 404 response):
> [code]
> DEBUG [btpool0-2] ConfigurationManager.debug(57) | Checking
> ConfigurationProviders for reload.
>
> DEBUG [btpool0-2] InstantiatingNullHandler.debug(57) | Entering
> nullPropertyValue
> [target=[com.opensymphony.xwork2.DefaultTextProvider@3e48f2],
> property=struts]
>
> WARN [btpool0-2] OgnlValueStack.warn(45) | Could not find property
> [struts.actionMapping]
> [/code]
>
> which seems totally irrelevant.
>
> I am spinning my wheels now and have tried numerous things, but I cannot
> understand why the supposed action configured at startup does not pick up my
> URLs.
>
> Here are my general configs - I have pared down the configuration to a bare
> minimum, to match the Showcase app, to no avail (yet):
>
> struts.xml
> [code]
>    <constant name="struts.convention.action.suffix" value="Controller"/>
>    <constant name="struts.convention.action.mapAllMatches" value="true"/>
>    <constant name="struts.convention.default.parent.package"
> value="rest-default"/>
>    <constant name="struts.convention.package.locators" value="rest"/>
> [/code]
>
> web.xml
> [code]
>        <context-param>
>        <param-name>contextConfigLocation</param-name>
>        <param-value>classpath*:applicationContext*.xml</param-value>
>    </context-param>
>
>        <!-- Filters -->
>    <filter>
>        <filter-name>struts2</filter-name>
>
> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
>    </filter>
>    <filter-mapping>
>        <filter-name>struts2</filter-name>
>        <url-pattern>/*</url-pattern>
>    </filter-mapping>
>
>    <!-- Listeners -->
>    <listener>
>
> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
>    </listener>
>
> [/code]
>
> pom.xml
> [code]
>      <dependencies>
>
>        <!--  Struts 2 -->
>        <dependency>
>            <groupId>org.apache.struts</groupId>
>            <artifactId>struts2-core</artifactId>
>            <version>2.1.6</version>
>        </dependency>
>        <dependency>
>                <groupId>org.apache.struts</groupId>
>                <artifactId>struts2-convention-plugin</artifactId>
>                <version>2.1.6</version>
>        </dependency>
>        <dependency>
>            <groupId>org.apache.struts</groupId>
>            <artifactId>struts2-spring-plugin</artifactId>
>            <version>2.1.6</version>
>        </dependency>
>        <dependency>
>        <groupId>org.apache.struts</groupId>
>        <artifactId>struts2-rest-plugin</artifactId>
>        <version>2.1.6</version>
>      </dependency>
>
>        <dependency>
>            <groupId>org.hibernate</groupId>
>            <artifactId>hibernate</artifactId>
>            <version>3.2.1.ga</version>
>        </dependency>
>        <dependency>
>            <groupId>org.hibernate</groupId>
>            <artifactId>hibernate-annotations</artifactId>
>            <version>3.2.1.ga</version>
>        </dependency>
>        <dependency>
>            <groupId>org.hibernate</groupId>
>            <artifactId>hibernate-entitymanager</artifactId>
>            <version>3.2.1.ga</version>
>        </dependency>
>        <dependency>
>            <groupId>javax.persistence</groupId>
>            <artifactId>persistence-api</artifactId>
>            <version>1.0</version>
>        </dependency>
>        <dependency>
>        <groupId>log4j</groupId>
>        <artifactId>log4j</artifactId>
>        <version>1.2.13</version>
>      </dependency>
>
>  </dependencies>
>
> [/code]
>
>
> Any suggestions?  I guess I will be going through source code now - the
> showcase example makes it seem so simple, and I cannot see what little
> switch I have missing or need to remove.  Thanks for ideas.
> --
> View this message in context: http://www.nabble.com/Struts-mapping-failing-when-using-struts2-convention-plugin-tp22379807p22379807.html
> Sent from the Struts - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>



-- 
"Hey you! Would you help me to carry the stone?" Pink Floyd

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org