cxf out interceptor - 对响应pojo对象的引用

时间:2013-12-04 11:33:17

标签: spring cxf interceptor

我需要获取从我的服务返回的响应Java对象,以便对数据进行一些处理。我不想编写代码来处理ServiceImpl类本身的数据,因为我想保持它的配置。我写过了拦截器。 根据这个question的答案,POJO对象应该在out拦截器中可用,但是我看到该对象实际上是一个响应的中间类。我得到一个ClassCastException与上面链接中提到的代码。

我错过了什么吗?可以在Out拦截器中使用Service类返回的相同POJO对象吗?

欢迎任何其他方法来实现这一目标。

MyOutInterceptor.java:

public class MyOutInterceptor extends AbstractPhaseInterceptor<Message> {

public MyOutInterceptor() {
    super(Phase.MARSHAL); // Tried Phase.PRE_LOGICAL as well
}

public void handleMessage(Message message) throws Fault {
MessageContentsList objs = MessageContentsList.getContentsList(message); 
if (objs != null && objs.size() == 1) { 
    Object responseObj = objs.get(0); 
    MyData data = (MyData) responseObj; // fails here with ClassCastException
    ...
}

的applicationContext.xml

<bean class="com.xyz.interceptor.MyOutInterceptor" id="outInterceptor" />

<jaxws:endpoint id="dataService" implementor="#masterDataService" address="/MasterDataService">
...
    <jaxws:outInterceptors>
        <ref bean="outInterceptor" />
    </jaxws:outInterceptors>
</jaxws:endpoint>

1 个答案:

答案 0 :(得分:1)

预逻辑阶段将起作用,但您需要执行:

addBefore(WrapperClassOutInterceptor.class.getName());

确保它在拦截器之前运行。