0 0

cxf过滤器在拦截的时候XML太长了烂机器就会读取不到数据.5

问题是这样的,我在用CXF写服务端,然后要把交互的XML报文截取保存下来。然后就使用了拦截器,详见代码。但是只要返回的报文超过了某个长度拦截器就拦截获取不到数据。
package XXX.web.webservice.interceptor;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.io.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.log4j.Logger;

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

public ArtifactOutInterceptor() {
//这儿使用pre_stream,意思为在流关闭之前
super(Phase.PRE_STREAM);
}

public void handleMessage(Message message) {

try {

OutputStream os = message.getContent(OutputStream.class);

CachedStream cs = new CachedStream();

message.setContent(OutputStream.class, cs);

message.getInterceptorChain().doIntercept(message);

CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class);
InputStream in = csnew.getInputStream();

String xml = IOUtils.toString(in);

//这里对xml做处理,处理完后同理,写回流中
IOUtils.copy(new ByteArrayInputStream(xml.getBytes()), os);

cs.close();
os.flush();

message.setContent(OutputStream.class, os);


} catch (Exception e) {
log.error("Error when split original inputStream. CausedBy : " + "\n" + e);
}
}

private class CachedStream extends CachedOutputStream {

public CachedStream() {

super();

}

protected void doFlush() throws IOException {

currentStream.flush();

}

protected void doClose() throws IOException {

}

protected void onWrite() throws IOException {

}

}

}

问题补充:烂机器写错了  拦截器

问题补充:不知道是不是 CXF有什么属性可以配置 交互报文的长度限制
cxf 
2014年7月04日 09:40

1个答案 按时间排序 按投票排序

0 0

兄弟,请问你解决了吗,我也遇到这个问题了,好蛋疼啊。。。。报文太长了就打印不出来。。。。

2016年8月03日 17:12

相关推荐

    cxf.xml,cxf-servlet.xml,cxf-extension-soap.xml

    &lt;import resource="classpath:META-INF/cxf/cxf.xml"/&gt; &lt;import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/&gt; &lt;import resource="classpath:META-INF/cxf/cxf-servlet.xml"/&gt;

    CXF3.0+Spring3.2 自定义拦截器

    自定义拦截器在CXF中扮演着重要角色,它们允许我们在服务调用前后执行额外的逻辑,如日志记录、安全检查、性能监控等。这通过实现CXF提供的接口或继承特定的类来实现。以下是一些关键知识点: 1. **CXF拦截器基础**...

    CXF WebService带有拦截器

    在服务端,我们可以创建一个自定义拦截器,这个拦截器将在Web Service接收到请求时执行。拦截器可以检查请求头中的认证信息,如令牌或用户名/密码,然后与预设的用户数据库进行比对。如果认证信息有效,请求会被允许...

    11.为CXF客户端添加自定义拦截器完成权限控制

    4. **处理异常**:当拦截器检测到无权限访问时,应该抛出合适的异常,如`org.apache.cxf.interceptor.Fault`。客户端可以捕获这些异常,提供相应的错误信息反馈给用户。 5. **测试与调试**:添加完拦截器后,进行...

    CXF发布WebService加入拦截器

    - 在服务配置文件中(如cxf.xml或服务的JAX-WS端点配置)定义拦截器并指定其作用范围。 2. **客户端拦截器**: - 创建`ClientProxyFactoryBean`实例,然后使用`setInInterceptors()`和`setOutInterceptors()`方法...

    08.CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器

    - 配置文件方式:在`cxf-servlet.xml`或`cxf-service.xml`中配置拦截器。 ```xml &lt;bean class="com.example.MyServerInInterceptor"/&gt; &lt;bean class="com.example.MyServerOutInterceptor"/&gt; ``` - ...

    CXF2.6 spring 提供rest服务输出xml或json等格式数据

    在Maven的pom.xml文件中,可以添加如下依赖: ```xml &lt;groupId&gt;org.apache.cxf &lt;artifactId&gt;cxf-rt-frontend-jaxrs &lt;version&gt;2.6.x &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context &lt;version&gt;...

    10.为CXF服务器端添加自定义拦截器进行权限检查

    如果权限检查失败,拦截器应该抛出一个适当的异常,例如`org.apache.cxf.interceptor.Fault`,并附带错误信息。这样,CXF会捕获这个异常,并根据配置的策略返回相应的错误响应给客户端。 5. **测试与调试**: ...

    CXF拦截器(Interceptor)的使用

    在深入探讨CXF拦截器的使用之前,我们首先需要理解其在CXF框架中的核心作用与价值。Apache CXF是一个开源框架,用于构建和消费基于SOAP和REST标准的Web服务。其设计的核心目标之一便是灵活性和可扩展性,这在很大...

    CXF使用EndpointImpl发布WebService加入拦截器

    拦截器在CXF中的工作原理基于JAX-WS规范,可以分为两种类型:`InInterceptors`(入站拦截器)和`OutInterceptors`(出站拦截器)。入站拦截器处理从客户端到服务器的消息,而出站拦截器则处理从服务器返回到客户端的...

    cxf-rt-bindings-xml-3.0.1-API文档-中文版.zip

    赠送jar包:cxf-rt-bindings-xml-3.0.1.jar; 赠送原API文档:cxf-rt-bindings-xml-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-bindings-xml-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-bindings-xml-3.0.1....

    webservice的cxf框架拦截器demo

    在CXF中,我们可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.Phase`接口,然后将这些拦截器添加到服务端的拦截器链中。 接着,客户端拦截器(inter_client)同样重要。它们允许我们在...

    13.为CXF与Spring整合发布WebService添加拦截器进行权限控制

    当我们需要在CXF和Spring整合的基础上发布Web服务,并对权限进行控制时,可以利用拦截器来实现这一目标。本文将详细介绍如何为CXF与Spring整合发布WebService添加拦截器进行权限控制。 首先,我们需要理解CXF拦截器...

    webservice的cxf框架拦截器demo.rar

    在CXF服务端,你可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.PhaseInterceptorChain`接口的类来创建自定义拦截器,并将它们添加到服务的拦截器链中。 4. **“inter_client”**: 这...

    cxfSecurity.rar cxf加密 加拦截器

    【标题】"cxfSecurity.rar" 是一个与Apache CXF框架相关的压缩文件,它涉及到在Web服务(Webservice)环境中实现安全加密以及使用拦截器(Interceptors)的技术。Apache CXF是一个开源的服务框架,用于构建和开发...

    Cxf拦截器实例

    入站拦截器在接收到消息后执行,而出站拦截器在发送消息之前执行。 客户端拦截器主要应用于以下场景: 1. **身份验证**:可以在请求发送前添加认证信息,例如添加OAuth令牌或基本HTTP认证。 2. **日志记录**:可以...

    spring集成cxf客户端和服务器端demo(含自定义拦截器)

    6. **配置文件**:项目中的XML配置文件(如`cxf-servlet.xml`,`applicationContext.xml`)是关键部分,它们定义了CXF的端点、服务实现、拦截器的配置等。开发者需要理解这些配置的含义,以便调整和扩展服务行为。 ...

    CXF3.1.16 +Spring4 +MyBatis + Maven自定义拦截器 WebService实例源码下载

    在CXF中,自定义拦截器可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.Phase`接口来创建。 6. **安全性考虑**:通过客户端添加header并由服务端验证的方式,可以实现基于header的安全机制...

    CXF和Spring整合,并且添加拦截器

    **标题:“CXF和Spring整合,...这可以通过在Spring配置文件中声明拦截器并将其绑定到Bus或Endpoint来实现。 ```xml &lt;bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" /&gt; ...

    Cxf转换器示例

    转换器在CXF中扮演着关键角色,尤其是在处理不同类型数据之间的转换时,如XML到Java对象,反之亦然。这些转换过程对于确保不同系统间的数据一致性至关重要。 首先,我们需要了解CXF的转换器体系结构。CXF框架中的...

Global site tag (gtag.js) - Google Analytics