转载

Cxf拦截器中获取当前请求的参数

Cxf 拦截器中获取当前请求的参数

有的时候我们的工程里面会有很多的 Webservice 服务,我们可能出于某种原因可能需要对每个请求实现特定的逻辑,比如说对参数的有效性进行校验,这种逻辑往往是通过 Cxf 的拦截器来实现的,这个时候就需要获取 Webservice 服务的当前请求参数。 Cxf 中用 MessageContentsList 来封装一次请求的所有参数,它是继承自 java.util.ArrayList 的。 MessageContentsList 提供了一个静态方法 getContentsList(Message message) 用于从 Message 中获取对应请求的参数。其核心实现代码如下。

public  static MessageContentsList getContentsList(Message msg ) {

List<Object> o = CastUtils. cast ( msg .getContent(List. class ));

if ( o == null ) {

return null ;

}

if (!( o instanceof MessageContentsList)) {

MessageContentsList l2 = new MessageContentsList( o );

msg .setContent(List. class , l2 );

return l2 ;

}

return ( MessageContentsList ) o ;

}

所以通常我们需要对 Webservice 服务的请求参数进行统一处理时,我们会定义一个对应的拦截器,然后在拦截器的 handleMessage 方法中进行如下处理。

@Override

public  void handleMessage(SoapMessage message ) throws Fault {

//...

// 请求参数中包含的参数

MessageContentsList list = MessageContentsList. getContentsList ( message );

// 对请求参数进行处理

//...

}

(注:本文是基于 Cxf2.7.6 所写)

正文到此结束
Loading...