SOAP Web サービスを提供するために Apache CXF を使用しています。CXF デシリアライゼーションを構成して、新たにデシリアライズされたオブジェクトのメソッドを呼び出して内部状態を更新する方法はありますか?
具体的には、オブジェクトは、SOAP 要求からデシリアライズされた後、いくつかのリストを作成する必要があります。
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();
}
}
}
JAXB を使用している場合は、Unmarshaller.Listener.afterUnmarshalを使用して、XML から非整列化されたオブジェクトを取得できます。Unmarshaller.Listener インターフェースを実装するクラスを作成し、CXF のJAXBDataBinding.setUnmarshallerListenerを使用してそのクラスをリスナーとして登録する必要があります。
この Listener インターフェイスは CXF に固有のものではなく、対応するMarshaller.Listenerインターフェイスがあります。