You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Sergey Beryozkin <sb...@gmail.com> on 2014/09/01 17:19:42 UTC

Re: Avoid stacktrace in response when error occurs

Hi
On 30/08/14 23:54, las wrote:
> I am using ExceptionMapper to handle all the exceptions. I am not sure how to
> handle if any java.lang.Error occurs and how to send a meaningful response
> to the client?
>
I think that Error exceptions are wrapped into RuntimeException as far 
as I can see, try registering ExceptionMapper<RuntimeException>, can you 
try it please

Cheers, Sergey
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>


Re: Avoid stacktrace in response when error occurs

Posted by las <la...@gmail.com>.
I understand ExceptionMapper<ServerErrorException> gets invoked when there
are 500 errors. I am a server and am not sure when does it get called? Is
there anyway i can simulate?



--
View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748352.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Avoid stacktrace in response when error occurs

Posted by Sergey Beryozkin <sb...@gmail.com>.
On 01/09/14 18:24, las wrote:
> Yes, that worked, didn't think of that, my bad.
>
> I found another issue, where only for ClientErrorException, i need to set
> header whereas for other types, i dont have to.
>
> return Response.status(Response.Status.NOT_FOUND).header("Content-Type",
> "application/json")
Can you clarify please ? Why do you need to set this header at all ?

Regarding your question about ServerErrorException, JAX-RS 2.0 
introduces few specific exception classes representing individual well 
known errors like 500 (InternalServerErrorException) and exceptions like 
ServerErrorException which can represent all of 500+ errors.
For ex, you can use WebApplicationException(500) (the 'legacy' style), 
InternalServerErrorException, and ServerErrorException to represent 500

HTH, Sergey

>
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748351.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>


Re: Avoid stacktrace in response when error occurs

Posted by las <la...@gmail.com>.
Yes, that worked, didn't think of that, my bad.

I found another issue, where only for ClientErrorException, i need to set
header whereas for other types, i dont have to.

return Response.status(Response.Status.NOT_FOUND).header("Content-Type",
"application/json")



--
View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748351.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Avoid stacktrace in response when error occurs

Posted by Sergey Beryozkin <sb...@gmail.com>.
Have you tried ExceptionMapper<Throwable> ?

Cheers, Sergey
On 01/09/14 18:04, las wrote:
> HTTP Status 500 - org.apache.cxf.interceptor.Fault: Requested array size
> exceeds VM limit
>
> type Exception report
>
> message org.apache.cxf.interceptor.Fault: Requested array size exceeds VM
> limit
>
> description The server encountered an internal error that prevented it from
> fulfilling this request.
>
> exception
>
> java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Requested
> array size exceeds VM limit
>
> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:371)
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> 	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
> root cause
>
> org.apache.cxf.interceptor.Fault: Requested array size exceeds VM limit
>
> org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:163)
>
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:129)
> 	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:211)
> 	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)
>
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
>
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> 	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
> root cause
>
> java.lang.OutOfMemoryError: Requested array size exceeds VM limit
> 	ExampleServiceImpl.getServerError(ExampleServiceImpl.java:16)
> 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	java.lang.reflect.Method.invoke(Method.java:606)
>
> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:181)
>
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:97)
> 	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:211)
> 	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)
>
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
>
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> 	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>
>
>
>
> <jaxrs:providers>
>              <bean
> class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
>              <bean class="RuntimeExceptionMapper" />
>              <bean class="ClientExceptionMapper" />
>              <bean class="ServerExceptionMapper" />
> </jaxrs:providers>
>
>
> Thanks.
>
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748348.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>

Re: Avoid stacktrace in response when error occurs

Posted by las <la...@gmail.com>.
HTTP Status 500 - org.apache.cxf.interceptor.Fault: Requested array size
exceeds VM limit

type Exception report

message org.apache.cxf.interceptor.Fault: Requested array size exceeds VM
limit

description The server encountered an internal error that prevented it from
fulfilling this request.

exception

java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Requested
array size exceeds VM limit

org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:371)

org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)

org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)

org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

org.apache.cxf.interceptor.Fault: Requested array size exceeds VM limit

org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:163)

org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:129)
	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:211)
	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)

org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)

org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)

org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)

org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)

org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
	ExampleServiceImpl.getServerError(ExampleServiceImpl.java:16)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:606)

org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:181)

org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:97)
	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:211)
	org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99)

org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)

org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96)

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)

org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)

org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)

org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)

org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)




<jaxrs:providers>
            <bean
class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
            <bean class="RuntimeExceptionMapper" />
            <bean class="ClientExceptionMapper" />
            <bean class="ServerExceptionMapper" />
</jaxrs:providers>


Thanks.



--
View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748348.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Avoid stacktrace in response when error occurs

Posted by Sergey Beryozkin <sb...@gmail.com>.
Can you post a relevant fragment of the stack trace, would like to see 
where it escapes from.

Sergey

On 01/09/14 16:51, las wrote:
> I have ExceptionMapper<RuntimeException>,  I simulated OutOfMemoryError and
> it didnt work.
>
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748346.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>


Re: Avoid stacktrace in response when error occurs

Posted by las <la...@gmail.com>.
I have ExceptionMapper<RuntimeException>,  I simulated OutOfMemoryError and
it didnt work.



--
View this message in context: http://cxf.547215.n5.nabble.com/Avoid-stacktrace-in-response-when-error-occurs-tp5748315p5748346.html
Sent from the cxf-user mailing list archive at Nabble.com.