解决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 |
EOT |
End of Transmission (传输结束) |
|
^E |
05 |
0x05 |
ENQ |
Enquiry (查询) |
|
^F |
06 |
0x06 |
ACK |
Acknowledge (确认) |
|
^G |
07 |
0x07 |
BEL |
Bell (振铃) |
|
^H |
08 |
0x08 |
BS |
Backspace (退格) |
|
^I |
09 |
0x09 |
HT |
Horizontal Tab (水平制表) |
|
^J |
10 |
0x0A |
LF |
Line Feed (馈行) |
|
^K |
11 |
0x0B |
VT |
Vertical Tab (垂直制表) |
|
^L |
12 |
0x0C |
FF |
Form Feed (馈页) |
|
^M |
13 |
0x0D |
CR |
Carriage Return (回车) |
|
^N |
14 |
0x0E |
SO |
Shift Out (移出) |
|
^O |
15 |
0x0F |
SI |
Shift In (移入) |
|
^P |
16 |
0x10 |
DLE |
Data Link Escape (数据链路转义) |
|
^Q |
17 |
0x11 |
DC1 |
Device Control 1 (设备控制1) |
|
^R |
18 |
0x12 |
DC2 |
Device Control 2 (设备控制2) |
|
^S |
19 |
0x13 |
DC3 |
Device Control 3 (设备控制3) |
|
^T |
20 |
0x14 |
DC4 |
Device Control 4 (设备控制4) |
|
^U |
21 |
0x15 |
NAK |
Negative Acknowledge (否认) |
|
^V |
22 |
0x16 |
SYN |
Synchronous Idle (同步空闲) |
|
^W |
23 |
0x17 |
ETB |
End of Transmission Block (传输块结束) |
|
^X |
24 |
0x18 |
CAN |
Cancel (取消) |
|
^Y |
25 |
0x19 |
EM |
End of Medium (介质结束) |
|
^Z |
26 |
0x1A |
SUB |
Substitute (替换) |
|
^[ |
27 |
0x1B |
ESC |
Escape (转义) |
|
^\ |
28 |
0x1C |
FS |
File Separator (文件分隔符) |
|
^] |
29 |
0x1D |
GS |
Group Separator (分组符) |
|
^^ |
30 |
0x1E |
RS |
Record Separator (记录分隔符) |
|
^_ |
31 |
0x1F |
US |
Unit Separator (单元分隔符) |
|
127 |
0x7F |
DEL |
Delete (删除) |
[1] 兼容的八位ISO/IEC 8859-1加上了从ISO/IEC 6429定义的从128到159的32个代码,位于0x80-0x9F。
|
ISO-8859-n 的控制字符十进 |
十六进 |
缩写 |
字符名 |
|
128 |
0x80 |
PAD |
Padding Character(填充字符) |
|
129 |
0x81 |
HOP |
High Octet Preset(高字节前置) |
|
130 |
0x82 |
BPH |
Break Permitted Here(此处允许中断) |
|
131 |
0x83 |
NBH |
No Break Here(此处禁止中断) |
|
132 |
0x84 |
IND |
Index(索引) |
|
133 |
0x85 |
NEL |
Next Line(下一行) |
|
134 |
0x86 |
SSA |
Start of Selected Area(选择区域开始) |
|
135 |
0x87 |
ESA |
End of Selected Area(选择区域结束) |
|
136 |
0x88 |
HTS |
Horizontal Tab Set(水平制表设置) |
|
137 |
0x89 |
HTJ |
Horizontal Tab Justified(水平制表调整) |
|
138 |
0x8A |
VTS |
Vertical Tab Set(垂直制表设置) |
|
139 |
0x8B |
PLD |
Partial Line Forward(部分行前移) |
|
140 |
0x8C |
PLU |
Partial Line Backward(部分行后移) |
|
141 |
0x8D |
RI |
Reverse Line Feed(逆向馈行) |
|
142 |
0x8E |
SS2 |
Single-Shift 2 (单个移动 2) |
|
143 |
0x8F |
SS3 |
Single-Shift 3(单个移动 3) |
|
144 |
0x90 |
DCS |
Device Control String(设备控制串) |
|
145 |
0x91 |
PU1 |
Private Use 1(私用1) |
|
146 |
0x92 |
PU2 |
Private Use 2(私用2) |
|
147 |
0x93 |
STS |
Set Transmit State(发送规则设置) |
|
148 |
0x94 |
CCH |
Cancel Character(取消字符) |
|
149 |
0x95 |
MW |
Message Waiting(消息等待) |
|
150 |
0x96 |
SPA |
Start of Protected Area(保护区域开始) |
|
151 |
0x97 |
EPA |
End of Protected Area(保护区域结束) |
|
152 |
0x98 |
SOS |
Start of String(串开始) |
|
153 |
0x99 |
SGCI |
Single Graphic Char Intro(单个图形字符描述) |
|
154 |
0x9A |
SCI |
Single Char Intro(单个字符描述) |
|
155 |
0x9B |
CSI |
Control Sequence Intro(控制顺序描述) |
|
156 |
0x9C |
ST |
String Terminator(串终止) |
|
157 |
0x9D |
OSC |
OS Command(操作系统指令) |
|
158 |
0x9E |
PM |
Private Message(私讯) |
|
159 |
0x9F |
APC |
App Program Command(应用程序命令) [2] |
以上这个方法也没解决我的问题,后来直接用java.net发送http请求,绕过axis2的处理模式,请求中携带soap字符串就可以通过了。见http://www.cnblogs.com/toSeeMyDream/p/6814437.html
解决Axis2在webservice中遇到特殊字符的无法传输的缺陷(<CDATA>数据类型)的更多相关文章
- 解决pdf打印预览中遇到特殊字符,导出失败问题
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 由于近日由于pdf中存在特殊字符导致导出失败,主要原因是"&"字符与freema ...
- Oracle更新表字段时内容中含有特殊字符&的解决方法
今天在做 Oracle表字段更新时出现了特殊字符&,导致无法更新. 这个问题是第二次碰到了,所以在此记录下,以备后用. 举例: update t set col1='A&B' wher ...
- WebService中使用自定义类的解决方法(5种)
转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...
- 使用Axis2编写webservice客户端,服务端
1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...
- 使用axis2进行WebService的开发
使用axis2进行WebService的开发 Apache Axis2 是 Apache Axis SOAP 项目的后继项目.此项目是 Web 服务核心引擎的重要改进,目标是成为 Web 服务和面向服 ...
- axis2开发webservice程序
一.环境 eclipse + jdk 6.0 + win7 64位 +tomcat7.0 二.创建服务端程序 1.新建web项目,webserviceTest 2.下载axis2,将lib目录下的ja ...
- Java借助axis2发布WebService
Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...
- axis2开发webservice入门到精通
1,准备工作: 首先我们要下载:axis2-1.4.1-war(发布webservice),axis2-1.4.1-bin.zip(webservice调用使用的各种包). 下载好了,把axis2-1 ...
- 使用Axis2实现WebService的发布和调用
一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: 可以下载如下三个zip包: axis2-1.7.3-bin.zip(用 ...
随机推荐
- 【dlbook】深度网络
前向网络:无反馈 feedback 连接 [输出单元] 线性 -- 高斯分布 . sigmoid单元 -- bernoulli输出. softmax单元 -- multinoulli [隐藏单元] 整 ...
- ViewPager实现图片轮翻效果
很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的.今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的 ...
- VSCode打开文件总是会覆盖上次打开的标签
在使用VSCode的时候,打开一个文件之后,如果没有修改的话,那么再打开下一个文件的时候,他总会替换上次打开的标签,那么怎么样才能每次都在新的标签打开文件呢? 实际上,这种情况的出现是因为我们点击文件 ...
- linux 段错误常见处理方法
1.如果没有产生core文件,可以查询系统log 通过 sudo cat /var/log/messages |grep segfault 或者 sudo dmesg|grep segfault 获得 ...
- HDU - 6430:TeaTree (线段树合并)
Recently, TeaTree acquire new knoledge gcd (Greatest Common Divisor), now she want to test you. As w ...
- HihoCoder 1044 01-string 贪心
1144 : 01串 时间限制:7000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001& ...
- bzoj 4472 salesman
Written with StackEdit. Description 某售货员小\(T\) 要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. ...
- Quartz 2D编程指南(1) - 概览
Quartz 2D编程指南是论坛会员德鲁伊翻译的国外的Quartz 2D一系列学习资料,供大家参考 Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quar ...
- Hibernate中 一 二级缓存及查询缓存(2)
缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更 ...
- CSS书写格式
转自: https://segmentfault.com/a/1190000005046830 CSS书写格式 1.格式化代码 1.1文件 [建议]:CSS文件使用无BOM的UTF-8编码 1.2缩进 ...