【问题标题】:CXF JAVA message TruncatedCXF JAVA 消息被截断
【发布时间】:2015-01-19 16:35:20
【问题描述】:

下午好,

我在 GNU/Linux CentOS 6.6 Final 和这个 JAVA_OPTS 下运行 Apache Tomcat 7.0.57:

-server\
-Xms512m\
-Xmx512m\
-XX:MaxPermSize=256m\
-XX:MaxNewSize=160m\
-XX:NewSize=160m\
-XX:SurvivorRatio=128\
-XX:MaxTenuringThreshold=0\
-XX:+UseConcMarkSweepGC\
-XX:+CMSIncrementalMode\
-XX:+CMSIncrementalPacing\
-XX:+CMSClassUnloadingEnabled\
-XX:+DisableExplicitGC\
-XX:+UseParNewGC\
-XX:+UseTLAB\
-Djava.net.preferIPv4Stack=true\
-Djava.net.preferIPv4Addresses\
-Dgrails.env=prod\
-Dspring.profiles.active=prod\
-Dport-offset=0\
-Dajp.port=8009\
-Dhttp.port=8080\
-Dhttp.maxthreads=457\
-Dshutdown.port=8005\
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true

并且日志文件有以下内容:

Inbound Message
----------------------------
ID: 66210
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: text/xml
Headers: {Content-Length=[6693], content-type=[text/xml]}
Messages:
Message (saved to tmp file):
Filename: /usr/local/services/tomcat_02/temp/cxf-tmp-720465/cos4330744862698212100tmp
(message truncated to 65536 bytes)

Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

如何增加消息的字节数?

谢谢!

【问题讨论】:

    标签: java tomcat7 cxf truncated


    【解决方案1】:

    尝试将 LoggingOutInterceptor 的限制设置为更大的大小。 在某些版本的 cxf-api 中,此限制设置为默认大小 100 * 1024

    private int limit = 100 * 1024;
    

    如果您想获得整个消息,您应该将其设置为-1 在春天它会是这样的:

    <property name="limit" value="-1"/>
    

    【讨论】:

    • 但是属性应该放在什么文件里呢?在什么标签下?谢谢
    • 可以直接在构造函数中设置——LoggingOutInterceptor(int lim) 或者使用setLimit方法——public void setLimit(int lim)
    • 有没有办法把它放在配置文件中,而不改变代码?
    • 可以,但我不知道您使用的是什么框架:Spring、Apache Aries、Guice 等?你的配置文件是什么样子的?
    • 嗨@panagdu 我的拦截器也面临同样的问题,它扩展了LoggingOutInterceptor。该消息在 49149 个空格后被截断。我应该在子类构造函数中使用 super(-1) 吗?
    【解决方案2】:

    CXF 选项loggingSizeLimit="-1" 将防止消息被截断。

    【讨论】:

    • 应该在哪里添加该选项?谢谢
    • 这取决于,如果您使用注解来定义您的服务,使用注解:@Logging(limit=-1, inLocation="") 使用 Spring:
    【解决方案3】:

    对于在 Spring 中使用 CXF 的人,解决方案是使用 contrucotr-arg 参数为 loggingInInterceptor 或 loggingOutInterceptor 声明 bean,方式如下:

    <bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" parent="abstractLoggingInterceptor">
        <constructor-arg name="lim" value="-1"/>
    </bean>
    

    这样,拦截器是使用构造函数创建的,该构造函数为日志的限制设置自定义值。 消息不会被任何负值截断。

    【讨论】:

      【解决方案4】:

      如果你只是想检查里面的内容 - 在 CXF 的 LoggingOutInterceptor / LogginInInterceptor 类中放置一个断点,靠近

      (message truncated to " + limit + " bytes)

      并复制输出/输入流的内容

      【讨论】:

        猜你喜欢
        • 2019-08-23
        • 2017-02-24
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 2019-04-25
        相关资源
        最近更新 更多