代码改变世界

WebService中控制字符的处理

2013-07-09 22:09  Paddle Zhou  阅读(681)  评论(0编辑  收藏  举报

情景

    最近项目中很多WebService都发不出去,报的错误如下:
 
 Invalid white space character in text to output (in xml 1.1, could output as a character entity)
 
代码如下
    private String excuteRealTimeExchange(PadisPackageType reqPackage) {
        String result;
        try {
            result = rte.execute(JaxbUtils.convertPadisObjectToXml(reqPackage));
        } catch (Exception e) {
            throw new PadisException(".....");
        }
        return result;
    }
 
之前一直以为是网络原因,导致webserivce发不出去。今天调试,才发现是因为报文中有控制字符,所以才抛出错误。
 

原因

XML支持的字符是有限的,详细请看:
 
特殊字符如控制字符是不被支持的
 

解决

在发送XML的时候,把不合法的控制字符都去掉。
方法如下:
 
    public static String trimAllISOControl(String str) {
        if (!hasLength(str)) {
            return str;
        }
        StringBuilder sb = new StringBuilder(str);
        int index = 0;
        while (sb.length() > index) {
            if (Character.isISOControl(sb.charAt(index))) {
                sb.deleteCharAt(index);
            } else {
                index++;
            }
        }
        return sb.toString();
    }