解决Axis2在webservice中遇到特殊字符的无法传输的缺陷(<CDATA>数据类型)

在使用Axis2进行soa webservice开发时,遇到类似以下的错误信息: 
com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:509) 
Invalid white space character (0x1) in text to output 
Invalid white space character (0x2) in text to output 
…… 
Invalid white space character (0x7) in text to output 
Invalid white space character (0x8) in text to output 
…… 

Invalid white space character (0x11) in text to output 
Invalid white space character (0x14) in text to output 

问题: 

在XML规范中,不支持ASCII前31个字符中的相当多控制符号,所以在组装XML时需过滤这些特殊字符,以免引起解析问题。同时,'&'(实体引用的开始)和'<'(控制符的开始)作为XML的标准控制字符必须不能出现在正常内容中,如果出现的话,需要转义。XML提供CDATA结构段用来指示XML解析器不要对CDATA段中的数据做处理。但如果在CDATA段中包含CDATA段的关闭符']]>'的话,还是会出现解析问题。 

解决方案: 

?public static String wrapXmlContent(String content) 

StringBuffer appender = new StringBuffer(""); 

if ((content != null) && (!content.trim().isEmpty())) { 
appender = new StringBuffer(content.length()); 

for (int i = 0; i < content.length(); i++) { 
char ch = content.charAt(i); 
if ((ch == '\t') || (ch == '\n') || (ch == '\r') || 
((ch >= ' ') && (ch <= 55295)) || 
((ch >= 57344) && (ch <= 65533)) || ( 
(ch >= 65536) && (ch <= 1114111))) { 
appender.append(ch); 



String result = appender.toString(); 

return "<![CDATA[" + result.replaceAll("]]>", "]]<") + "]]>"; 

控制符号:

控制字符

控制字符(Control Character),出现于特定的信息文本中,表示某一控制功能的字符。   在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。

 

US-ASCII控制字符Seq

十进

十六进

缩写

字符名

 

00

0x00

NUL

Null (空)

^A

01

0x01

SOH

Start of Heading (报头开始)

^B

02

0x02

STX

Start of Text (正文开始)

^C

03

0x03

ETX

End of Text (正文结束)

^D

04

0x04

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值