cxf Interceptor 转化 multipart/form-data类型数据
2016-04-07 15:56
405 查看
因为某个需求,需要在添加一个Interceptor,然后在Interceptor里面得到request里的parameter。但是发现数据的类型是multipart/form-data的。
google了好久没找到好的办法,最后发现FormUtils中有一个方法。
如上,它所传的是
MediaType.APPLICATION_FORM_URLENCODED_TYPE
发现MediaType中有一个MULTIPART_FORM_DATA_TYPE,所以想自己实现一个readForm。
但是这样不行,会报一个NullPointException。
@Context private MessageContext mc;
FormEncodingProvider实例里的mc为null,估计是某个地方自动装配的,但是因为对cxf并不是很熟悉,不知道怎么去得到FormEncodingProvider,只是new了一个,所以mc为null,而FormEncodingProvider又没有对mc进行设置的方法。
又发现一个得到MessageContext的方式
MessageContext mc = new MessageContextImpl(message);
所以最后写了一个类,通过反射机制把mc传到FormEncodingProvider的实例中。
最后得到了一个form,完成了转换。
google了好久没找到好的办法,最后发现FormUtils中有一个方法。
public static Form readForm(FormEncodingProvider<Form> provider, Message message) throws Exception { return provider.readFrom(Form.class, Form.class, new Annotation[]{}, MediaType.APPLICATION_FORM_URLENCODED_TYPE, new MetadataMap<String, String>(), message.getContent(InputStream.class)); }
如上,它所传的是
MediaType.APPLICATION_FORM_URLENCODED_TYPE
发现MediaType中有一个MULTIPART_FORM_DATA_TYPE,所以想自己实现一个readForm。
public static Form readForm(FormEncodingProvider<Form> provider, Message message) throws Exception { return provider.readFrom(Form.class, Form.class, new Annotation[]{}, MediaType.MULTIPART_FORM_DATA_TYPE, new MetadataMap<String, String>(), message.getContent(InputStream.class)); }
但是这样不行,会报一个NullPointException。
@Context private MessageContext mc;
FormEncodingProvider实例里的mc为null,估计是某个地方自动装配的,但是因为对cxf并不是很熟悉,不知道怎么去得到FormEncodingProvider,只是new了一个,所以mc为null,而FormEncodingProvider又没有对mc进行设置的方法。
又发现一个得到MessageContext的方式
MessageContext mc = new MessageContextImpl(message);
所以最后写了一个类,通过反射机制把mc传到FormEncodingProvider的实例中。
provider=FormEncodingProvider.class.newInstance(); Class<FormEncodingProvider> clazz=FormEncodingProvider.class; Field field=clazz.getDeclaredField("mc"); field.setAccessible(true); field.set(provider,mc);
最后得到了一个form,完成了转换。
相关文章推荐
- android调用web service(cxf)实例应用详解
- CXF+Spring+Maven+JBOSS7简单例子
- CXF 生成客户端报错 Two classes have the same XML type ...
- cxf spring mybiats
- SpringMVC容器
- EJB3 Interceptors
- OkHttp的Interceptor原理分析
- flume自定义Interceptor
- Web Service的CXF实现(Spring整合方式)
- XSS攻击解决方案
- 新手初识webservice-理论篇
- 新手初识webservice-实践篇
- Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务
- Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务
- Apache CXF REST example
- struts-default.xml解读
- cxf 拦截器
- xfire客户端连接cxf服务端完全解决!
- webservice cxf学习
- Tomcat 7下SSL配置出现异常: '/root/.keystore' did not find a matching property