com.ctc.wstx.exc.WstxIOException: Invalid white space character (0x13) 异常跟踪处理

   服务器上service要不要报类似的错:com.ctc.wstx.exc.WstxIOException: Invalid white space character (0x13) in text to output

    Caused by: java.io.IOException: Invalid white space character (0x13) in text to output
    at com.ctc.wstx.sw.XmlWriter.throwInvalidChar(XmlWriter.java:545)
    at com.ctc.wstx.sw.BufferingXmlWriter.writeCharacters(BufferingXmlWriter.java:531)
    at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:509)

    为了查出为查出出错原因,还下了一番功夫终于找出问题根源,说一下排查经过。

   1、日志里没有记录具体的原因,我很想知道啥字符引起,为了拦截出错字符,更改代码

    BaseStreamWriter.writeCharacters中的代码,抛出出错字符来定位问题

    throw new WstxIOException("******ERROR  TRACK!*********\n"+text);

    来显示出错字符,根据出错字符再去服务器查找相应的来源定位具体的内容

    编译后替换原来的jar包,等待异常输出,

    经过一段时间的等待,查到日志情况如下:

com.ctc.wstx.exc.WstxIOException: ******************ERROR  TRACK!********************Error writing document.. Nested exception is com.ctc.wstx.exc.WstxIOException: ******************ERROR  TRACK!********************<p>输入: 16 路 HDMI <br />
输出: 1 HDMI <br />
带宽: 支持 1.65Gbps <br />
和 HDMI 标准兼容: 支持 HDMI 1.2 and HDCP <br />
分辨率: Up to UXGA; 1080p <br />
电源: 90 240VAC; 50/60Hz, 22VA <br />
控制: 前面板按键, 远红外, RS-232, Ethernet <br />
尺寸: 19-inch (W), 7-inch (D), 1U (H) <br />
重量: 2.5 kg. (5.5 lbs.) approx. <br />
附件: 电源 <br />
选择: Kramer HDMI 电缆</p>

通过上面有用信息查找出是有个不可显示字符引起报错90 240VA 中间的这个方框,

 弄java 字符串里如下:"90\u0003240VAC; "

 找到原因后我们可以对不可见字符串进行处理,以后再也不会有问题了。

    /**
     * 清理xml不支持的特殊字符
     * @param data
     * @return 
     */
    public static String handleXMLSpecialChar(String data) {
        StringBuffer appender = new StringBuffer("");
        if (StringUtils.isNotBlank(data)) {
            appender = new StringBuffer(data.length());
            for (int i = 0; i < data.length(); i++) {
                char ch = data.charAt(i);
                if ((ch == 0x9) || (ch == 0xA) || (ch == 0xD) || ((ch >= 0x20) && (ch <= 0xD7FF)) || ((ch >= 0xE000) && (ch <= 0xFFFD))
                        || ((ch >= 0x10000) && (ch <= 0x10FFFF)))
                appender.append(ch);
            }
        }
        return appender.toString();        
    }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值