CXF之五(错误处理)

CXF之五(异常处理)

     在CXF中默认的异常处理是无法满足开发需求,经常需要把异常信息转换为JSON或者XML格式,返回给客户的,这样就只能自定义异常处理了。

    在对外提供接口的时候,如果出现异常,一般会通过JSON或XML将异常码及异常信息反回给客户,这在CXF中也很容易实现。

 

第一步:编写自己的异常处理类 InvokeFaultExceptionMapper 

 

 

@Provider
public class InvokeFaultExceptionMapper implements ExceptionMapper {

	public Response toResponse(Throwable ex) {
		 StackTraceElement[] trace = new StackTraceElement[1];
	        trace[0] = ex.getStackTrace()[0];
	        ex.setStackTrace(trace);
	        ResponseBuilder rb = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
	        rb.type("application/json;charset=UTF-8");
	        rb.entity(ex);
	        rb.language(Locale.SIMPLIFIED_CHINESE);
	        Response r = rb.build();
	        return r;
	}

}

 

第二部:加载InvokeFaultExceptionMapper

 

<jaxrs:server id="expGateway" address="/expGateway">
		<jaxrs:inInterceptors>
		   <ref bean="inMessageInterceptor"/>
		</jaxrs:inInterceptors>
		<jaxrs:outInterceptors>
		    <ref bean="outMessageInterceptor"/>
		</jaxrs:outInterceptors>
		<jaxrs:serviceBeans>
			<ref bean="expGatewayImpl" />
		</jaxrs:serviceBeans>
		<jaxrs:extensionMappings>
			<entry key="json" value="application/json" />
			<entry key="xml" value="application/xml" />
		</jaxrs:extensionMappings>
		<jaxrs:languageMappings>
			<entry key="en" value="en-gb" />
		</jaxrs:languageMappings>
		<jaxrs:providers>
            <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
            <bean class="com.pml.service.outer.InvokeFaultExceptionMapper"/>
        </jaxrs:providers>
	</jaxrs:server>

 

第三步:测试

   在你的接口中跑出异常试一试,结果如下

 

{"operate":null,"errCode":0,"errSubCode":"err.001","cause":null,"message":"ID值异常!","localizedMessage":"ID值异常!","stackTrace":[{"className":"com.pml.service.outer.ExpGatewayImpl","fileName":"ExpGatewayImpl.java","lineNumber":59,"methodName":"getUser","nativeMethod":false}]}
 

CXF之五(错误处理)