当前位置: 首页 > 知识库问答 >
问题:

Camel CxfEndpoint拦截器失败

丘向荣
2023-03-14

我有一个通过SOAP-Endpoint发送消息的Camel路由。

@Bean
public CxfEndpoint myEndpoint(){
    CxfEndpoint cxfEndpoint = new CxfEndpoint();
    cxfEndpoint.setAddress("myuri");
    cxfEndpoint.setServiceClass(SomeType.class);
    cxfEndpoint.setDataFormat(DataFormat.POJO);
    cxfEndpoint.setLoggingFeatureEnabled(true);

    //LoggingINInterceptor
    cxfEndpoint.getInInterceptors().add(new Interceptor<Message>() {
        @Override
        public void handleMessage(Message message) throws Fault {
            LOGGER.info("Request body: ${body}"); ;
        }

        @Override
        public void handleFault(Message message) {
            LOGGER.info("Request fault body: ${body}"); ;
        }
    });

    //LoggingOutInterceptor
    cxfEndpoint.getOutInterceptors().add(new Interceptor<Message>() {
        @Override
        public void handleMessage(Message message) throws Fault {
             LOGGER.info("Response body: ${body}");
        }

        @Override
        public void handleFault(Message message) {
            LOGGER.info("Response fault body: ${body}"); ;
        }
    });
    return cxfEndpoint;
}
from("direct:myroute").routeId("cxf_myroute")
        .streamCaching()
        .setHeader(CxfConstants.OPERATION_NAME, constant("MyOperationName"))
        .log(LoggingLevel.INFO, "Call to cxf")
        .to("cxf:bean:myEndpoint").id("call_ws")
        .log(LoggingLevel.INFO, "Response from cxf")
        .process(responseProcessor).id("response_transform").end();
{"timestamp":"2018-07-12T11:53:39.423+00:00","level":"ERROR","logger_name":"org.apache.camel.processor.DefaultErrorHandler","stack_trace":"java.lang.ClassCastException: myapp.RouteConfiguration$2 cannot be cast to org.apache.cxf.phase.PhaseInterceptor\r\n\tat org.apache.cxf.phase.PhaseInterceptorChain.add(PhaseInterceptorChain.java:232)\r\n\tat org.apache.cxf.phase.PhaseInterceptorChain.add(PhaseInterceptorChain.java:223)\r\n\tat org.apache.cxf.phase.PhaseInterceptorChain.add(PhaseInterceptorChain.java:214)\r\n\tat org.apache.cxf.phase.PhaseChainCache.getChain(PhaseChainCache.java:89)\r\n\tat org.apache.cxf.phase.PhaseChainCache.get(PhaseChainCache.java:71)\r\n\tat org.apache.cxf.endpoint.ClientImpl.setupInterceptorChain(ClientImpl.java:966)\r\n\tat org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:486)\r\n\tat org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:420)\r\n\tat org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:133)\r\n\tat org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)\r\n\tat org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)\r\n\tat org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)\r\n\tat org.apache.camel.processor.Pipeline.process(Pipeline.java:138)\r\n\tat org.apache.camel.processor.Pipeline.process(Pipeline.java:101)\r\n\tat org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)\r\n\tat org.apache.camel.component.direct.DirectBlockingProducer.process(DirectBlockingProducer.java:53)\r\n\tat org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)\r\n\tat org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)\r\n\tat org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)\r\n\tat org.apache.camel.processor.Pipeline.process(Pipeline.java:138)\r\n\tat org.apache.camel.processor.Pipeline.process(Pipeline.java:101)\r\n\tat org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)\r\n\tat org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)\r\n\tat org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:194)\r\n\tat org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:73)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\r\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)\r\n\tat 

共有1个答案

鲁景山
2023-03-14

要删除异常,请如下所示:

//LoggingINInterceptor
    cxfEndpoint.getInInterceptors().add(new LoggingInInterceptor() {
        @Override
        public void handleMessage(Message message) throws Fault {
            LOGGER.info("Request body: ${body}");
        }

        @Override
        public void handleFault(Message message) {
            LOGGER.info("Request fault body: ${body}");
        }
    });

    //LoggingOutInterceptor
    cxfEndpoint.getOutInterceptors().add(new LoggingOutInterceptor() {
        @Override
        public void handleMessage(Message message) throws Fault {
            LOGGER.info("Response body: ${body}");
        }

        @Override
        public void handleFault(Message message) {
            LOGGER.info("Response fault body: ${body}");
        }
    });

对于自定义日志记录,只需禁用日志记录功能,并在重写的方法中对消息执行您想要的操作。您可以在日志记录方法LoggingInInterceptor\LoggingOutInterceptor类中看到cxf是如何做到这一点的。

 类似资料:
  • easyopen在1.3.1版本开始支持拦截器。 easyopen拦截器实现原理跟springmvc拦截器类似,拦截器作用在api方法上,即有@Api注解的方法。 拦截器定义如下: /** * 拦截器,原理同springmvc拦截器 * @author tanghc * */ public interface ApiInterceptor { /** * 预处理回调方法,

  • 你可以配置处理器拦截器HandlerInterceptors或web请求拦截器WebRequestInterceptors等拦截器,并配置它们拦截所有进入容器的请求,或限定到符合特定模式的URL路径。 在MVC Java编程配置下注册拦截器的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure

  • Uragano里可以自定义拦截器,并且拦截器分服务器端拦截器和客户端拦截器 拦截器还分全局拦截器和局部拦截器,并且拦截器也是支持依赖注入的 创建拦截器 public class ClientGlobalInterceptor : InterceptorAbstract { private ILogger Logger { get; } public

  • 拦截驱动器 bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径

  • 主要内容:Struts2框架的拦截器:,如何使用拦截器?,创建自定义的拦截器,创建拦截器类:,创建动作类:,创建视图,创建页面:,配置文件,堆叠多个拦截器:拦截器的概念是Servlet过滤器或JDK代理类一样的。拦截器允许横切功能分开实现的动作,以及框架。使用拦截器,可以实现如下: 提供预处理行动之前被称为逻辑。 提供后处理逻辑动作后被调用 捕获异常,这样可以进行替代处理。 Struts2框架提供的许多功能都使用拦截实现的例子包括异常处理,文件上传,生命周期回调和验证等事实上作为Struts2的

  • 自定义主键生成策略 更新对象时自动更新时间戳 删除对象时自动清除缓存 其他自定义Pojo行为 默认实现类DefaultPojoInterceptor 拦截器类型是通过@Table(interceptor=XXX.class)配置的,默认是DefaultPojoInterceptor DefaultPojoInterceptor当前实现了3个注解, @PrevInsert/@PrevUpdate/@