WebService中控制字符的處理

情景

    最近項目中不少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();
    }
 
 


相關文章
相關標籤/搜索