2013-02-08 50 views
1

我有了這樣一個輸入消息的操作:CXF攔截預處理進來的消息

InputMessageType

  • 爲messageType:字符串
  • 其他屬性...

我想在它擊中目標WS方法之前修改這個messageType,並且我爲Phase.USER_LOGICAL寫了一個攔截器。然而,在handleMessage中,如果我嘗試去做:

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

如何獲取對InputMessageType的引用,更改它的messageType屬性,然後讓CXF使用修改的輸入參數調用WS?

謝謝!

回答

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 
    } 
} 

}