Thanks very much for taking the time to reply.. Ok so I am running on a weblogic 10.3 container and it does seem that the problem occurs when deploying to this environment but not when running on Tomcat 7. On Tomcat I do get a 400 status code returned.
The 2 dodgy chars I am using in my url are \" Even reading the link below I still don't really understand quite what might be happening, would you mind explaining in a bit more detail so I can search for a possible fix in the weblogic forums? Also, assuming weblogic has an issue, please could you explain how I write a filter to trap the exception and convert the response code manually? I have tried writing an Interceptor but the handleMessage method is never called (perhaps I specified the phase incorrectly - I used PRE_LOGICAL?). Many thanks Mandy On 23 Jun 2013, at 18:33, Sergey Beryozkin <[email protected]> wrote: > Hi > On 23/06/13 10:38, Andrei Shakirin wrote: >> Hi, >> >> Looks as defect for me. I will expect 400 Bad Request from CXF servlet in >> this case. >> Sergei, WDYT? >> > I think the reason for this particular exception is that the underlying > container decodes request URI unexpectedly, there was a Windows specific > issue to do with decoding %20, see > http://cxf.apache.org/docs/jaxrs-services-configuration.html#JAXRSServicesConfiguration-Tomcat, > > but it could be caused by some other container specific issue. > > One can always add a filter can catch exceptions from there, but that would > probably hide the container issue > > Cheers, Sergey > > > >> Regards, >> Andrei. >> >>> -----Original Message----- >>> From: Mandy Warren [mailto:[email protected]] >>> Sent: Samstag, 22. Juni 2013 17:01 >>> To: [email protected] >>> Subject: How to intercept exceptions thrown by CXF servlet >>> >>> >>> I have developed a REST service using Apache CXF and notice that if I send >>> invalid characters in the URL, the CXF servlet throws back the following >>> exception before it gets to my code: >>> >>> Servlet failed with Exception java.lang.IllegalArgumentException at >>> java.net.URI.create(URI.java:841) at >>> org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.j >>> ava:49) at >>> org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletContr >>> oller.java:73) at >>> org.apache.cxf.transport.servlet.ServletController.updateDestination(Servle >>> tController.java:82) at >>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.j >>> ava:162) at >>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.j >>> ava:137) at >>> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpring >>> Servlet.java:158) at >>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(Abstra >>> ctHTTPServlet.java:239) at >>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPS >>> ervlet.java:164) at >>> javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at >>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPS >>> ervlet.java:215) >>> This results in a 500 status code being returned to the client. >>> >>> I would ideally like to intercept this exception and return a 400 Bad >>> Request >>> status code to the client but I am unable to work out how to do this. >>> >>> Any help much appreciated! >>> >>> Many thanks >>> >> >
