これで少し作業していて、運がなかった。CXFフェーズ宣言がないためにインターセプターフェーズがスキップされる
私はSpring 3.2.9から4.2.6へのアップグレード中です。私の最初のステップはcxf-core 3.1.6にアップグレードすることでした。これはアプリには何の問題もありませんでした。
私は春の依存関係をすべてアップグレードすると、インターセプターの設定に問題が発生しています。ここでは基本だ:
インターセプタ
public class MyInterceptor extends AbstractPhaseInterceptor<Message>{
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
public MyInterceptor() {
super(Phase.PRE_INVOKE);
addAfter(HolderInInterceptor.class.getName());
}
@PostConstruct
public void display() {
logger.warn(this.getPhase());
}
@Override
public void handleMessage(Message message) throws Fault {
....
cxfContext.xml
<bean id="contentInInterceptor" class="com.MyInterceptor">
</bean>
<cxf:bus>
<cxf:inInterceptors>
<ref bean="contentInInterceptor"/>
</cxf:inInterceptors>
</cxf:bus>
だけでなく、それはweb.xmlに追加されています。走っているときは、インターセプターがpre-invokeのフェーズで作成されたことを示すログに記録された情報が表示されます(私は狂っていないことを確認するためにこれを追加しました)。サービスを呼び出すときしかし、PhaseInterceptorチェーンは位相を宣言していないためインターセプターをスキップします
ログ:
2016年5月31日16:08:28208 [localhostの-startStop-1] [] c.MyInterceptorをWARN - プレ起動
2016年5月31日16:10:14552 [HTTPバイオ-8080-EXEC-1] [] oacpPhaseInterceptorChain WARN - はインターセプタcom.MyInterceptorをスキップ$$ EnhancerBySpringCGLIB $$ 1afa70e1:フェーズ宣言 がありません。
これは、jaxwsサーバー呼び出しをインターセプトしています。繰り返しますが、私が変更したのは、Springの最新バージョンに更新されている問題です。まるでcxfがBeanから決して生成されなかった別のインターセプタを使用しているかのように見えます。
EDIT
私は問題を発見したと考えているが、やはり私はこの問題を修正する修正プログラムをだろうどこか分かりません。 Spring 4プロキシは、プロキシの作成時にコンストラクタを2回コールしません(つまり、コンストラクタを使用して生のBeanを作成しますが、CGLIBによって作成されたBeanのプロキシはコンストラクタを呼び出しません)。これにより、インターセプタのフェーズがNULLになります。
は、私はこれを確認するために、クラスに私の@PostContsruct周りの変更:
2016年6月1日10:36:52829 [
@PostConstruct public void display() { logger.warn(this.getPhase()); MyInterceptor myInterceptor = (MyInterceptor) appContext.getBean("contentInInterceptor"); logger.warn("Bean phase is: " + myInterceptor.getPhase()); }
ログは、プロキシの相対豆の作成の段階を示し、ローカルホスト-startStop-1] []はc.MyInterceptorをWARN - プレ起動
2016年6月1日10:36:52839 [ローカルホスト-startStop-1] [] c.MyInterceptorがWARN - 豆相である:ヌル
ご迷惑をおかけして申し訳ございません。私のアプリはjaxwsサーバーを持っています。私はSoapUIを通してサーバーを呼び出すので、メッセージはインバウンドです。 – slk42089