在Apache CXF从SOAP反序列化对象后,是否可以调用后反序列化方法?

时间:2013-04-17 18:26:42

标签: java soap cxf

我正在使用Apache CXF来提供SOAP Web服务。有没有办法可以配置CXF反序列化来调用新反序列化对象上的方法来更新某些内部状态?

具体来说,对象需要在从SOAP请求反序列化后构建一些列表。

2 个答案:

答案 0 :(得分:2)

您可以创建Interceptor并获取对新反序列化对象的访问权限。

就像那样:

import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;

public class PreInvokeInterceptor extends AbstractPhaseInterceptor<Message> {
    public PreInvokeInterceptor() {
        super(Phase.PRE_INVOKE);
    }

    public void handleMessage(Message message) throws Fault {
            MessageContentsList mcl = message.getContent(MessageContentsList.class);
            YourObject obj = (YourObject) mcl.get(0);
            obj.updateInternalState();
        }
    }
}

答案 1 :(得分:1)

如果您使用的是JAXB,则可以使用Unmarshaller.Listener.afterUnmarshal在从XML解组后获取对象。您需要编写一个实现Unmarshaller.Listener接口的类,然后使用CXF的JAXBDataBinding.setUnmarshallerListener将该类注册为监听器。

此Listener接口并非特定于CXF,并且有相应的Marshaller.Listener接口。