You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Puneet Gupta <da...@gmail.com> on 2014/07/19 13:24:16 UTC

Not able to call interceptor when NoSuchMethodError exception is thrown in CXF rest service.

Hi All,

I am getting an exception when requested resource does not exists.
Exception is as below:

*09:43:25,123 ERROR
[org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/axis].[CxfRestServlet]]
(http--127.0.0.1-8080-1) Servlet.service() for servlet CxfRestServlet threw
exception: *
*java.lang.NoSuchMethodError:
javax.ws.rs.ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response;*
*        at
javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:127)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]*
*        at
org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecExceptions.java:110)
[cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(ExceptionUtils.java:149)
[cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:477)
[cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:196)
[cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
[cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
[cxf-api-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
[cxf-api-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
[jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]*
*        at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
[cxf-rt-transports-http-2.7.11.jar:2.7.11]*
*        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
[jboss-as-web-7.1.1.Final.jar:7.1.1.Final]*
*        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
[jbossweb-7.0.13.Final.jar:]*
*        at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
[jbossweb-7.0.13.Final.jar:]*
*        at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_15]*


Everything is right till now. *My problem is the interceptor which I have
when fault is occurs is not getting called when this exception is thrown. I
have to free some resources when exception is occurring*. I have following
configuration in cxf-servlet.xml for rest service.

*<bean id="restserviceclass" class="com.test.webservice.WSRestService" />*
* <bean id="jsonProvider"
class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />*
* <jaxrs:server address="/">*
* <jaxrs:serviceBeans>*
* <ref bean="restserviceclass" />*
* </jaxrs:serviceBeans>*
* <jaxrs:providers>*
* <ref bean='jsonProvider' />*
* <bean class="com.test.webservice.RestExceptionHandler" />*
* <bean*
* class="com.test.common.utils.JacksonJsonParamConverterProvider" />*
* </jaxrs:providers>*
* <jaxrs:inInterceptors>*
* <bean class="com.test.webservice.RestAuthHandler">*
* </bean>*
* </jaxrs:inInterceptors>*
* <jaxrs:inFaultInterceptors>*
* <bean class="com.test.webservice.RestLogHandler" />*
* </jaxrs:inFaultInterceptors>*
* <jaxrs:outInterceptors>*
* <bean class="com.test.webservice.RestLogHandler" />*
* </jaxrs:outInterceptors>*
* <jaxrs:outFaultInterceptors>*
* <bean class="com.test.webservice.RestLogHandler" />*
* </jaxrs:outFaultInterceptors>*
* <jaxrs:features>*
* <cxf:logging />*
* </jaxrs:features>*
* </jaxrs:server>*

My *RestLogHandler *is responsible for freeing resources. But it is not
getting called.

Can anyone help me understand how to intercept this error so that I can
free some resource?

Thanks, Puneet.

Re: Not able to call interceptor when NoSuchMethodError exception is thrown in CXF rest service.

Posted by Sergey Beryozkin <sb...@gmail.com>.
HI

You have a mix of jsr-311 and jsr-339 API, please check the dependencies

Thanks, Sergey
On 19/07/14 14:24, Puneet Gupta wrote:
> Hi All,
>
> I am getting an exception when requested resource does not exists.
> Exception is as below:
>
> *09:43:25,123 ERROR
> [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/axis].[CxfRestServlet]]
> (http--127.0.0.1-8080-1) Servlet.service() for servlet CxfRestServlet threw
> exception: *
> *java.lang.NoSuchMethodError:
> javax.ws.rs.ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response;*
> *        at
> javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:127)
> [javax.ws.rs-api-2.0-m10.jar:2.0-m10]*
> *        at
> org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecExceptions.java:110)
> [cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(ExceptionUtils.java:149)
> [cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:477)
> [cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:196)
> [cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
> [cxf-rt-frontend-jaxrs-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> [cxf-api-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> [cxf-api-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
> [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]*
> *        at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> [cxf-rt-transports-http-2.7.11.jar:2.7.11]*
> *        at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
> [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]*
> *        at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
> [jbossweb-7.0.13.Final.jar:]*
> *        at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
> [jbossweb-7.0.13.Final.jar:]*
> *        at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_15]*
>
>
> Everything is right till now. *My problem is the interceptor which I have
> when fault is occurs is not getting called when this exception is thrown. I
> have to free some resources when exception is occurring*. I have following
> configuration in cxf-servlet.xml for rest service.
>
> *<bean id="restserviceclass" class="com.test.webservice.WSRestService" />*
> * <bean id="jsonProvider"
> class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />*
> * <jaxrs:server address="/">*
> * <jaxrs:serviceBeans>*
> * <ref bean="restserviceclass" />*
> * </jaxrs:serviceBeans>*
> * <jaxrs:providers>*
> * <ref bean='jsonProvider' />*
> * <bean class="com.test.webservice.RestExceptionHandler" />*
> * <bean*
> * class="com.test.common.utils.JacksonJsonParamConverterProvider" />*
> * </jaxrs:providers>*
> * <jaxrs:inInterceptors>*
> * <bean class="com.test.webservice.RestAuthHandler">*
> * </bean>*
> * </jaxrs:inInterceptors>*
> * <jaxrs:inFaultInterceptors>*
> * <bean class="com.test.webservice.RestLogHandler" />*
> * </jaxrs:inFaultInterceptors>*
> * <jaxrs:outInterceptors>*
> * <bean class="com.test.webservice.RestLogHandler" />*
> * </jaxrs:outInterceptors>*
> * <jaxrs:outFaultInterceptors>*
> * <bean class="com.test.webservice.RestLogHandler" />*
> * </jaxrs:outFaultInterceptors>*
> * <jaxrs:features>*
> * <cxf:logging />*
> * </jaxrs:features>*
> * </jaxrs:server>*
>
> My *RestLogHandler *is responsible for freeing resources. But it is not
> getting called.
>
> Can anyone help me understand how to intercept this error so that I can
> free some resource?
>
> Thanks, Puneet.
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com