2013-02-08 6 views
1

У меня есть работа, которая имеет входное сообщение вроде этого:CXF перехватчик для предобработки Incomming сообщения

InputMessageType

  • MessageType: String
  • других свойств ...

I Я хотел бы изменить этот тип сообщения до того, как он достигнет целевого метода WS, и я написал перехватчик для 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 
    } 
} 

}

Смежные вопросы