CXF拦截器预处理传入的消息

时间:2013-02-08 17:43:11

标签: cxf

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

InputMessageType

  • messageType:String
  • 其他属性......

我想在它遇到目标WS方法之前修改这个messageType,我为Phase.USER_LOGICAL写了一个拦截器。但是,在handleMessage中,如果我尝试这样做:

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

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

1 个答案:

答案 0 :(得分: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 
    }
}

}