如何使用JaxWsProxyFactoryBean创建的代理记录服务调用

时间:2011-12-06 16:02:38

标签: jax-ws cxf

我想提供一个用于创建Web服务客户端的组件。到目前为止,我的方法是扩展JaxWsProxyFactoryBean并覆盖create方法,并为timeout等参数提供setter和getter。

@Override
public synchronized Object create() {

    //do some stuff here
    Object result = super.create();
    //here too

    return result;
}

记录调用代理的适当方法是什么?我尝试使用Interceptor设置getInInterceptors().add(new MyInterceptor());,但JaxWsProxyFactoryBean只想要PhaseInterceptor。但我不知道如何设置拦截器的所有属性,如果这是正确的方法..

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,但它不是100%完美。

我实现了LogicalHandler接口。将其设置为FactoryBean并检查处理程序中的消息是出站还是入站。

public class LoggingHandler implements LogicalHandler<LogicalMessageContext>

方法:

public boolean handleMessage(LogicalMessageContext context) {
    Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

    if (outboundProperty.booleanValue()) {
        //log here
    } else {
        //or here
    }
    return true;
}

这种方法很好,除了我称之为没有响应的方法的情况。然后,如果有响应,它只调用一次而不是两次。