Java 捕获cxf在camel上下文中引发的异常
如何在camel上下文中捕获cxf提供程序引发的异常。我正在尝试捕获camel上下文中ExceptionMapper引发的映射异常。 这是我的接球台Java 捕获cxf在camel上下文中引发的异常,java,exception,apache-camel,cxf,jbossfuse,Java,Exception,Apache Camel,Cxf,Jbossfuse,如何在camel上下文中捕获cxf提供程序引发的异常。我正在尝试捕获camel上下文中ExceptionMapper引发的映射异常。 这是我的接球台 java.lang.Exception 假的 但是catch块不会捕获异常,因为cxf提供程序(com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider)正在抛出异常,ExceptionMapper正在设置响应。我的要求是捕获camel上下文中的所有异常,并将它们记录到数据库中。有什么方法可以在c
java.lang.Exception
假的
但是catch块不会捕获异常,因为cxf提供程序(com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider)正在抛出异常,ExceptionMapper正在设置响应。我的要求是捕获camel上下文中的所有异常,并将它们记录到数据库中。有什么方法可以在camel中捕获cxf抛出的异常吗?您可以使用
onException
块捕获CamelContext
中抛出的所有异常
<camelContext ....>
<onException>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<bean ref="logAction" method="updateErrorStatus" />
<log message="Exception in camel route!!!" />
</onException>
<route ..>
..
</route>
</camelContext>
java.lang.Exception
真的
..
有关更多详细信息,请参见您可以使用
onException
块捕获CamelContext
中引发的所有异常
<camelContext ....>
<onException>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<bean ref="logAction" method="updateErrorStatus" />
<log message="Exception in camel route!!!" />
</onException>
<route ..>
..
</route>
</camelContext>
java.lang.Exception
真的
..
有关更多详细信息,请参见您遇到了问题,因为
异常apper
包含异常,并且不会抛出异常
它是您的异常外观
接口实现吗?
如果是这样,请尝试在响应
方法中将异常作为运行时异常重新抛出
如果没有,则通过扩展您使用的类来创建您自己的异常apper
,并执行相同的操作
UPD:我想没有其他选项了您遇到了问题,因为
ExceptionMapper
覆盖了一个异常,并且不会抛出它
它是您的异常外观
接口实现吗?
如果是这样,请尝试在响应
方法中将异常作为运行时异常重新抛出
如果没有,则通过扩展您使用的类来创建您自己的异常apper
,并执行相同的操作
UPD:我想没有其他选项了您可以使用异常变量,如下所示
<doCatch id="_doCatch1">
<exception>java.lang.Exception</exception>
<transform id="_transform2">
<simple>
${exception.message}
</simple>
</transform>
<log id="log_exit_exception" message="Error - Exception: ${exception.message}" />
</doCatch>
java.lang.Exception
${exception.message}
您可以使用异常变量,如下所示
<doCatch id="_doCatch1">
<exception>java.lang.Exception</exception>
<transform id="_transform2">
<simple>
${exception.message}
</simple>
</transform>
<log id="log_exit_exception" message="Error - Exception: ${exception.message}" />
</doCatch>
java.lang.Exception
${exception.message}
OneException子路由不处理CXF端点内JAX-RS json提供程序引发的异常。它似乎只有在交易所开始其沿途之旅后才会处理例外情况
要处理格式错误的json等,还需要提供一个JAX-RS ExceptionMapper,它将直接向用户返回响应:
@Component(JaxrsExceptionMapper.BEAN_NAME)
class JaxrsExceptionMapper implements ExceptionMapper<Throwable> {
static final String BEAN_NAME = "jaxrsExceptionMapper";
@Override
public Response toResponse(Throwable t) {
return Response
.status(Response.Status.BAD_REQUEST)
.entity(new MyResponseBody(t.getMessage()))
.type(MediaType.APPLICATION_JSON)
.build();
}
}
为了完整起见,Jackson json提供程序的spring配置可能是:
class JaxrsJsonProviderConfig {
static final String BEAN_NAME = "jaxrsJsonProvider";
@Bean(name = BEAN_NAME)
public JacksonJsonProvider jaxrsJsonProvider(ObjectMapper objectMapper) {
return new JacksonJsonProvider(objectMapper);
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
// optional stuff ...
mapper.registerModule(new ParameterNamesModule());
mapper.registerModule(new Jdk8Module());
mapper.registerModule(new JavaTimeModule());
mapper.setSerializationInclusion(Include.NON_ABSENT);
return mapper;
}
}
public interface MyJaxrsService{
@POST
@Path("/myservice")
MyResponseBody myService(MyPayload body);
}
您的服务类可能是:
class JaxrsJsonProviderConfig {
static final String BEAN_NAME = "jaxrsJsonProvider";
@Bean(name = BEAN_NAME)
public JacksonJsonProvider jaxrsJsonProvider(ObjectMapper objectMapper) {
return new JacksonJsonProvider(objectMapper);
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
// optional stuff ...
mapper.registerModule(new ParameterNamesModule());
mapper.registerModule(new Jdk8Module());
mapper.registerModule(new JavaTimeModule());
mapper.setSerializationInclusion(Include.NON_ABSENT);
return mapper;
}
}
public interface MyJaxrsService{
@POST
@Path("/myservice")
MyResponseBody myService(MyPayload body);
}
很抱歉重新打开一个旧主题,但这是来之不易的知识。OneException子路由不处理CXF端点内JAX-RS json提供程序引发的异常。它似乎只有在交易所开始其沿途之旅后才会处理例外情况 要处理格式错误的json等,还需要提供一个JAX-RS ExceptionMapper,它将直接向用户返回响应:
@Component(JaxrsExceptionMapper.BEAN_NAME)
class JaxrsExceptionMapper implements ExceptionMapper<Throwable> {
static final String BEAN_NAME = "jaxrsExceptionMapper";
@Override
public Response toResponse(Throwable t) {
return Response
.status(Response.Status.BAD_REQUEST)
.entity(new MyResponseBody(t.getMessage()))
.type(MediaType.APPLICATION_JSON)
.build();
}
}
为了完整起见,Jackson json提供程序的spring配置可能是:
class JaxrsJsonProviderConfig {
static final String BEAN_NAME = "jaxrsJsonProvider";
@Bean(name = BEAN_NAME)
public JacksonJsonProvider jaxrsJsonProvider(ObjectMapper objectMapper) {
return new JacksonJsonProvider(objectMapper);
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
// optional stuff ...
mapper.registerModule(new ParameterNamesModule());
mapper.registerModule(new Jdk8Module());
mapper.registerModule(new JavaTimeModule());
mapper.setSerializationInclusion(Include.NON_ABSENT);
return mapper;
}
}
public interface MyJaxrsService{
@POST
@Path("/myservice")
MyResponseBody myService(MyPayload body);
}
您的服务类可能是:
class JaxrsJsonProviderConfig {
static final String BEAN_NAME = "jaxrsJsonProvider";
@Bean(name = BEAN_NAME)
public JacksonJsonProvider jaxrsJsonProvider(ObjectMapper objectMapper) {
return new JacksonJsonProvider(objectMapper);
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
// optional stuff ...
mapper.registerModule(new ParameterNamesModule());
mapper.registerModule(new Jdk8Module());
mapper.registerModule(new JavaTimeModule());
mapper.setSerializationInclusion(Include.NON_ABSENT);
return mapper;
}
}
public interface MyJaxrsService{
@POST
@Path("/myservice")
MyResponseBody myService(MyPayload body);
}
很抱歉重新打开一个旧主题,但这是来之不易的知识。是的ExceptionMapper实现设置响应,而不是将其作为运行时异常抛出。因此。。。重新抛出并捕获。是的,ExceptionMapper实现设置响应,而不是将其作为运行时异常抛出。因此。。。重新抛出并捕获。我问,问题不是如何处理捕获的异常,而是如何捕获它,因为没有异常。我问,问题不是如何处理捕获的异常,而是如何捕获它,因为没有异常。