1

Spring CXF JAX-RS サーブレットの現在のインストールでは、例外が log4j DEBUG チャネルに記録されています。

DEBUG http-8134-2 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper - WebApplicationException has been caught, status: 500, message: Unrecognized field "links" (Class Result), not marked as ignorable
at [Source: {"links"}; line: 1, column: 11] (through reference chain: bbc.news.naf.elections.data.model.client.Result["links"])
javax.ws.rs.WebApplicationException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "links" (Class Result), not marked as ignorable
at [Source: {"links":[{}; line: 1, column: 11] (through reference chain: bbc.news.naf.elections.data.model.client.Result["links"])
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:243)
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:89)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:211)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213)

明らかに、これは理想的ではありません。CXF でこれらの例外スタック トレースを WARN や ERROR などのより関連性の高いログに記録するにはどうすればよいですか?

4

2 に答える 2

2

以下のように単純なプロバイダークラスを記述します

public class ExceptionResponseBuilder 
  extends WebApplicationExceptionMapper {
Logger _logger = LoggerFactory.getLogger(this.getClass().getName());

public Response toResponse(WebApplicationException ex) {

//Do something to get the object you want to return. 
// ex object will give you information you need
     Response r = Response
                .status(Response.Status.BAD_REQUEST)
                .entity(set any object your want to return)
                .build();


    return r;
}

スプリングファイルに以下を追加します

    <bean id="exceptionResponseBuilder" class="com.orgname.project.provider.ExceptionResponseBuilder">
   <property name="printStackTrace" value="true" />
</bean>
        <jaxrs:providers>
        <ref bean="exceptionResponseBuilder"/>
    </jaxrs:providers>
于 2013-02-19T03:19:21.053 に答える
0

WebApplicationExceptionMapper クラスで printStackTrack 機能を有効にする必要があります。これを行うには、Spring XML コンテキストに以下を追加します。

<jaxrs:providers>
  <bean class="org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper">
    <property name="printStackTrace" value="true" />
  </bean>
</jaxrs:providers>

例外が log4j WARN チャネルに記録されるようになりました。

于 2012-10-16T16:12:11.453 に答える