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 <kent.but...@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.defaulttextprovi...@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-unsubscr...@struts.apache.org
>> For additional commands, e-mail: user-h...@struts.apache.org
>>
>>
> 
> 
> 
> -- 
> "Hey you! Would you help me to carry the stone?" Pink Floyd
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@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-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to