0

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

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

4

2 回答 2

2

您可以创建一个拦截器并获得对新反序列化对象的访问权限。

像那样:

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();
        }
    }
}
于 2013-04-18T00:30:20.883 回答
1

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

这个Listener接口不是CXF特有的,有对应的Marshaller.Listener接口。

于 2013-04-21T01:31:02.890 回答