Jason Gustafson created CXF-4643:
------------------------------------

             Summary: Initial non-GET request returns 404 if it has query 
parameters
                 Key: CXF-4643
                 URL: https://issues.apache.org/jira/browse/CXF-4643
             Project: CXF
          Issue Type: Bug
    Affects Versions: 2.7.0
         Environment: Jetty Maven Plugin (default version) 
            Reporter: Jason Gustafson


Hello, I ran into a weird case where an initial HTTP non-GET request returns 
404 if there happens to be query parameters in it. Basically, you can take the 
code below, start up a servlet container, and do the following curl commands:

> curl -v -X PUT http://localhost:8080/cxf-test/woot?foo=bar -d "Name"
404
> curl -v http://localhost:8080/cxf-test/woot
200
> curl -v -X PUT http://localhost:8080/cxf-test/woot?foo=bar -d "Name"
204

I tracked the problem down to ServletController:184 (in the 2.7.0 sources). I 
don't know why "updateDestination" is invoked only for GET, but this case works 
fine if it is invoked regardless of the method. Is there perhaps a problem in 
my configuration?



RestService
-----------
@Service("theRestService")
@Path("/")
public class TheRestService {
    
    @PUT
    public void putHello(@QueryParam("foo") String foo, String name) {
        System.out.println("Hello " + name);
    }
    
    @GET 
    public String getHello() {
        return "foo";
    }

}


web.xml
-------
<web-app>
        <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                        classpath:/META-INF/spring/spring.xml
                </param-value>
        </context-param>
        <listener>
                <listener-class>
                        org.springframework.web.context.ContextLoaderListener
                </listener-class>
        </listener>
    <servlet>
        <servlet-name>TheServlet</servlet-name>
        <display-name>The Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>  
    <servlet-mapping>
        <servlet-name>TheServlet</servlet-name>
        <url-pattern>/woot/*</url-pattern>
    </servlet-mapping>  

</web-app>


spring.xml
----------
<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:aop="http://www.springframework.org/schema/aop";
        xmlns:jee="http://www.springframework.org/schema/jee"; 
xmlns:lang="http://www.springframework.org/schema/lang";
        xmlns:tx="http://www.springframework.org/schema/tx"; 
xmlns:util="http://www.springframework.org/schema/util";
        xmlns:p="http://www.springframework.org/schema/p"; 
xmlns:jaxrs="http://cxf.apache.org/jaxrs";
        xmlns:context="http://www.springframework.org/schema/context";
        xmlns:cxf="http://cxf.apache.org/core";
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd          
       http://www.springframework.org/schema/jee 
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
       http://www.springframework.org/schema/lang 
http://www.springframework.org/schema/lang/spring-lang-3.0.xsd       
       http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util-3.0.xsd
       http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
       http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd        
         
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd";>

    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

        <!-- Spring Bean Setup -->
        <context:annotation-config />
        <context:component-scan base-package="test.cxf" />
    
    <jaxrs:server id="theServer" address="/">
        <jaxrs:serviceBeans>
            <ref bean="theRestService" />              
        </jaxrs:serviceBeans>
    </jaxrs:server>
        
</beans>


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to