1

我有一个操作有这样的输入消息:

输入消息类型

  • 消息类型:字符串
  • 其他属性...

我想在它到达目标 WS 方法之前修改这个 messageType,我为 Phase.USER_LOGICAL 编写了一个拦截器。但是,如果我尝试在 handleMessage 中执行以下操作:

message.getContent(InputMessageType.class) 它返回 null。

如何获得对 InputMessageType 的引用,更改它的 messageType 属性,然后让 CXF 使用修改后的输入参数调用 WS?

4

1 回答 1

2

我遇到了和你一样的问题:message.getContent(xxx.class) 返回 null。我不知道为什么,稍后我会检查这种行为。

因此,我改为使用这样的拦截器(我检索 MessageContentsList):

public class ApiSoapActionInInterceptorService extends AbstractPhaseInterceptor<Message> {

public ApiSoapActionInInterceptorService(){
    super(Phase.PRE_INVOKE);
}

@Override
public void handleMessage(Message message) throws Fault {
    MessageContentsList inObjects = MessageContentsList.getContentsList(message);
    if (inObjects != null && !inObjects.isEmpty()){
        for (Iterator<Object> it = inObjects.iterator(); it.hasNext() ;){
            Object ob = it.next();
            if (ob instanceof InputMessageType){
                //TODO
            }
        }
    } else {
        //TODO 
    }
}

}

于 2013-02-11T09:17:26.553 回答