我有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之前执行。为什么拦截器的执行顺序不正确?