[ 
https://issues.apache.org/jira/browse/CXF-4446?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13798040#comment-13798040
 ] 

Martin Goulet edited comment on CXF-4446 at 10/17/13 4:33 PM:
--------------------------------------------------------------

I stumbled onto the same issue today and I can confirm that I am NOT using 
mod_jk at all in my app. 

Here's my setup:


        @GET
        @Path( "/ { value } " )
        public Response findBy(@QueryParam( "by" ) @DefaultValue( "id" ) String 
by, @PathParam( "value" ) String value);
        
        
        <jaxrs:server id="departmentTypeServer" address="/1.0/departments">
                <jaxrs:serviceBeans>
                        <ref bean="DepartmentTypeREST" />
                </jaxrs:serviceBeans>
        ...
        
So a typical invocation would be:

http://.../departments/1?by=id (where "1" is a @PathParam)

I do confirm that if I make a call with a space (for example) in the resource 
name, I do get a "no service found" type of error (like previously mentioned in 
this thread). For example:

http://.../depart ments/
        
However, if there is a space in the value provided in the @PathParam, I do get 
an error saying that the URL is not valid. For example:

http://.../departments/1 2?by=id

This yields this error:

SEVERE: Servlet.service() for servlet [default] in context with path [/CSA] 
threw exception
java.lang.IllegalArgumentException: Illegal character in path at index 48: 
http://localhost:8080/CSA/rest/1.0/departments/2 1
        at java.net.URI.create(URI.java:859)
        at 
org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.java:49)
        at 
org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:73)
        at 
org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:82)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:181)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
        at 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at 
com.sungard.web.filters.JarResourceFilter.doFilter(JarResourceFilter.java:47)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at 
com.sungard.framework.web.filters.PublicResourcesFilter.doFilter(PublicResourcesFilter.java:23)
        at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at 
com.sungard.web.filters.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:108)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

So there seems to be something else at play here. Unless it is normal to get 
that kind of error on a @PathParam (which I doubt, though). Can someone help me 
out?




was (Author: martin.goulet):
I stumbled onto the same issue today and I can confirm that I am NOT using 
mod_jk at all in my app. 

Here's my setup:

        @GET
        @Path( "/{value}" )
        public Response findBy(@QueryParam( "by" ) @DefaultValue( "id" ) String 
by, @PathParam( "value" ) String value);
        
        
        <jaxrs:server id="departmentTypeServer" address="/1.0/departments">
                <jaxrs:serviceBeans>
                        <ref bean="DepartmentTypeREST" />
                </jaxrs:serviceBeans>
        ...
        
So a typical invocation would be:

http://.../departments/1?by=id (where "1" is a @PathParam)

I do confirm that if I make a call with a space (for example) in the resource 
name, I do get a "no service found" type of error (like previously mentioned in 
this thread). For example:

http://.../depart ments/
        
However, if there is a space in the value provided in the @PathParam, I do get 
an error saying that the URL is not valid. For example:

http://.../departments/1 2?by=id

This yields this error:

SEVERE: Servlet.service() for servlet [default] in context with path [/CSA] 
threw exception
java.lang.IllegalArgumentException: Illegal character in path at index 48: 
http://localhost:8080/CSA/rest/1.0/departments/2 1
        at java.net.URI.create(URI.java:859)
        at 
org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.java:49)
        at 
org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:73)
        at 
org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:82)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:181)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
        at 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:168)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at 
com.sungard.web.filters.JarResourceFilter.doFilter(JarResourceFilter.java:47)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at 
com.sungard.framework.web.filters.PublicResourcesFilter.doFilter(PublicResourcesFilter.java:23)
        at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
        at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at 
com.sungard.web.filters.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:108)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

So there seems to be something else at play here. Unless it is normal to get 
that kind of error on a @PathParam (which I doubt, though). Can someone help me 
out?



> CXF JAX-RS can't handle spaces in the URL when used with Apache Tomcat
> ----------------------------------------------------------------------
>
>                 Key: CXF-4446
>                 URL: https://issues.apache.org/jira/browse/CXF-4446
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.6.1
>         Environment: Scientific Linux 6.1, Apache Tomcat 7.0.22, Java 1.6.0_29
>            Reporter: Andrew Rowley
>            Assignee: Sergey Beryozkin
>
> Putting an encoded space (%20) in the url gets the following exception:
> java.lang.IllegalArgumentException
>       java.net.URI.create(URI.java:842)
>       
> org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.java:49)
>       
> org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:73)
>       
> org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:82)
>       
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
>       
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:129)
>       
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:187)
>       
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:115)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>       
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:166)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
>       
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
>       
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> uk.ac.nactem.kalliope.security.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:85)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
>       
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
>       
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
> root cause
> java.net.URISyntaxException: Illegal character in path at index 50: 
> http://www.nactem.ac.uk/ArgoDemoTest/services/test test
>       java.net.URI$Parser.fail(URI.java:2809)
>       java.net.URI$Parser.checkChars(URI.java:2982)
>       java.net.URI$Parser.parseHierarchical(URI.java:3066)
>       java.net.URI$Parser.parse(URI.java:3014)
>       java.net.URI.<init>(URI.java:578)
>       java.net.URI.create(URI.java:840)
>       
> org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.java:49)
>       
> org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:73)
>       
> org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:82)
>       
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
>       
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:129)
>       
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:187)
>       
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:115)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>       
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:166)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
>       
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
>       
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> uk.ac.nactem.kalliope.security.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:85)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
>       
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
>       
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
>       
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
>       
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to