Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-4643

Initial non-GET request returns 404 if it has query parameters

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.7
    • 2.5.7, 2.6.4, 2.7.1
    • None
    • None
    • Jetty Maven Plugin (default version)

    • Unknown

    Description

      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="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>

      Attachments

        1. cxf-test.tar.gz
          2 kB
          Jason Gustafson

        Activity

          People

            sergey_beryozkin Sergey Beryozkin
            jasong35 Jason Gustafson
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: