The Exception handling if it is thrown from a RequestHandler is not correct i 
guess.
------------------------------------------------------------------------------------

                 Key: CXF-1730
                 URL: https://issues.apache.org/jira/browse/CXF-1730
             Project: CXF
          Issue Type: Bug
          Components: REST
    Affects Versions: 2.1.2
         Environment: Windows XP,  jdk1.6, Apache Tomcat 6.0.16
            Reporter: Frank Ittermann


Hello again

i' ve used an implementation of RequestHandler to perform authentication stuff. 
So
if the Authentication failed a RuntimeException is thrown.  I've also wrote a 
ExceptionMapper implementation to transform occurred Exception into Http Status 
codes. If the RuntimeException from the Authentication was thrown than this is 
translated to an HTTP 403 status code.

But this Http status code is not send as response. This sends a 200 status 
code. After a time of debugging i found the code that is responsible for that. 
The processResponse method of the 
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor work not correct is guess. 
Because code with the following code block this methods ends.

OperationResourceInfo operation = 
(OperationResourceInfo)exchange.get(OperationResourceInfo.class
            .getName());

        if (operation == null) {
            return;
        }

because the operation variable is null. The code after this is responsible to 
but the Response from the ExceptionMapper class into the message object so that 
i received a 403 http status code.

I've searched the code again and i found the code block how put the 
OperationResourceInfo into the Exchange object. That is done by the 
processRequest method of the 
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor class. But before the 
OperationResourceInfo object is putted in the registered ResourceHandler are 
called see the code block below.

 for (ProviderInfo<RequestHandler> sh : shs) {
            Response response = sh.getProvider().handleRequest(message, 
resource);
            if (response != null) {
                message.getExchange().put(Response.class, response);
                return;
            }
        }

I guess the code how put in the OperationresourceInfo object could be performed 
before the RequestHandlers are called maybe? 

Or it's forbidden to throw a Runtimeexception inside the RequestHandler ?

The CXF framework is great and very flexible good work. The opportunities to 
register own code is very great.

Good work.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to