CXF之五(异常处理)
? ? ?在CXF中默认的异常处理是无法满足开发需求,经常需要把异常信息转换为JSON或者XML格式,返回给客户的,这样就只能自定义异常处理了。
? ? 在对外提供接口的时候,如果出现异常,一般会通过JSON或XML将异常码及异常信息反回给客户,这在CXF中也很容易实现。
?
第一步:编写自己的异常处理类?InvokeFaultExceptionMapper?
?
?
@Providerpublic 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 name="code">{"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}]}?
?