messageHide contentsslist cxf怎么遍历

  cxf把整个通信过程分为很多个时期不同时期做的处理不同。所以在使用拦截器的时候没有选对时期,就拦截不到对象

  在做拦截器的时候,首先你要了解到cxf拦截器自身莋了什么事情然后你可以在该拦截器之前或之后做某事。

  拦截分为2个段请求和相应

上面是cxf自带的拦截请求阶段的拦截器。

假如我要获取SOAP的body内容我就要知道,body内容在哪里

body内容一定会转换成输入参数的,因为你服务方法使用的就是转换好了的参数所以继续找拦截器,什么时候转换成了你想要的参数这时,你可以找到DocLiteralInInterceptor拦截器你可以看它的源码。它把body里面的内容都放到了MessageHide contentssList所以你在这个拦截器后面去攔截,然后获取body内容

因为方法调用时候,已经转换成我们要的参数而pre-invoke是在调用方法前做处理,所以你可以在这里做拦截器拦截body内容。因为参数存在Hide contents里面是代理对象所以你只能遍历Hide contents去获取内容。



  

我这里密码和账户是放在对象里面然后对象作为服务的参数,也就是放茬body里面因为我的webservice服务不止一个方法,并且各个方法的参数不一样(参数是一个对象但对象不同)。所以values.get(i)就不能直接转换成你的对象若只一个方法,就可以直接转换成对象反正值都是存在MessageHide contentssList里面,具体怎么就看你自己的实现了

invoke时期做拦截器,此时你的方法已经调用完畢也就是先执行方法,然后执行拦截器若你想获得返回值,则需要用到



  

exchange类的价值就体现出来了若想在response阶段的拦截器获取请求参数,應该也是这样去获得吧

一般super(Phase.PRE_INVOKE);是把你的拦截器放在该时期的最前面,你可以再后面加addAfter或addBefore。就可以选择你的拦截器在该时段哪个拦截后,或前如果你配置了日志,可以看到控制台输出了cxf拦截器出现流程

我要回帖

更多关于 Hide contents 的文章

 

随机推荐