CXF拦截器未按正确顺序调用

时间:2016-04-27 13:49:14

标签: java cxf

我有4个cxf拦截器,每个拦截器都扩展了AbstractPhaseInterceptor。我按以下方式订购它们:

A类:

public class AInterceptor extends AbstractPhaseInterceptor<Message> {


    public AuthenticationInterceptor() {
        super(Phase.PRE_INVOKE);
        super.addAfter(OInInterceptor.class.getName());
        super.addAfter(HInterceptor.class.getName());

    }

    public void handleMessage(Message message) throws Fault {

        System.out.println("Into AInterceptor");
        System.out.println(super.getAfter()); //This is what prints the last line.
    }
}

H级:

 public class HInterceptor extends AbstractPhaseInterceptor<Message> {


    public HInterceptor() {
        super(Phase.PRE_INVOKE);
        super.addBefore(PInterceptor.class.getName());
    }


    public void handleMessage(Message message) throws Fault {

        System.out.println("Into HInterceptor ...");
    }
}

O类:

 public class OInterceptor extends AbstractPhaseInterceptor<Message> {

    private ServerPolicyEvaluator serverPolicyEvaluator;

    public OrderZeroPolicyInInterceptor() {
        super(Phase.PRE_INVOKE);
        super.addBefore(PInterceptor.class.getName());
        super.addAfter(HInterceptor.class.getName());
    }


    @Override
    public void handleMessage(Message message) throws Fault {

        System.out.println("Into OInterceptor ...");
    }
}

P级:

public class PInterceptor extends AbstractPhaseInterceptor<Message> {


    public PInterceptor() {
        super(Phase.PRE_INVOKE);
        super.addAfter(HInterceptor.class.getName());
    }


    public void handleMessage(Message message) throws Fault {

        System.out.println("Into PInterceptor ...");
    }
}

然而,当我运行应用程序时,我得到以下输出: 进入HInterceptor ...... 进入AInterceptor [com.xyz.interceptors.H,com.xyz.interceptors.O]

OInterceptor应该在AInterceptor之前执行。为什么拦截器的执行顺序不正确?

0 个答案:

没有答案