我正在使用Apache CXF来提供SOAP Web服务。有没有办法可以配置CXF反序列化来调用新反序列化对象上的方法来更新某些内部状态?
具体来说,对象需要在从SOAP请求反序列化后构建一些列表。
答案 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接口。