CXF 拦截器 拦截请求和发送时的报文

本文介绍了如何使用Apache CXF的拦截器对HTTP请求和响应的报文进行拦截,以自定义格式。针对数据量过大导致XML传输问题,提出了将CachedStream替换为ByteArrayOutputStream的解决方案,并提供了CDATAOutInterceptor的示例代码,用于在PRE_STREAM阶段添加CDATA包裹。
摘要由CSDN通过智能技术生成

参考:https://blog.csdn.net/yczz/article/details/16809859#commentBox

http://cxf.apache.org/docs/interceptors.html

https://elim.iteye.com/blog/2248620#_Toc431737707

cxf 可以对请求和发送时的报文进行拦截,然后对其进行加工成我们想要的格式,然后再放到回去!!!!!

我实现的是自定义拦截器

1.在需要拦截的方法上面加上这个注解,注解里面是我们的自定义拦截器

@OutInterceptors(interceptors = { "com.deloitte.tms.vat.webservice.result1.CDATAOutInterceptor" })
@InInterceptors(interceptors="com.deloitte.tms.vat.webservice.result1.ArtifactOutInterceptor")

2.对返回时的格式进行拦截实例,如果

public CDATAOutInterceptor() {
  
     //这里代表流关闭之前的阶段,这很重要!可以到官网去看,拦截的阶段分为很多种 super(Phase.PRE_STREAM); }
Phase.PRE_STREAM写的阶段不对可能会对想要的结果有影响,我开始写的Send和Write都是不生效的,网上也有好多博文写的是这种!!!踩到坑了!
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class CDATAOutInterceptor extends AbstractPhaseInterceptor<Message> {
    private static final Logger log = LogManager.getLogger(ArtifactOutInterceptor.class);

    public CDATAOutInterceptor() {
    
     //这里代表流关闭之前的阶段,这很重要!可以到官网去看,拦截的阶段分为很多种
super(Phase.PRE_STREAM); } @Override public void handleMessage(Message message) { /*这里是通过注解的方式来加<!CDATA[[]]>的格式 * message.put("disable.outputstream.optimization", Boolean.TRUE); * XMLStreamWriter writer = * StaxUtils.createXMLStreamWriter(message.getContent(OutputStream.class * )); message.setContent(XMLStreamWriter.class, new * CDATAXMLStreamWriter(writer)); */       try { OutputStream os = message.getContent(OutputStream.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值