在使用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>数据类型)的更多相关文章

  1. 解决pdf打印预览中遇到特殊字符,导出失败问题

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 由于近日由于pdf中存在特殊字符导致导出失败,主要原因是"&"字符与freema ...

  2. Oracle更新表字段时内容中含有特殊字符&的解决方法

    今天在做 Oracle表字段更新时出现了特殊字符&,导致无法更新. 这个问题是第二次碰到了,所以在此记录下,以备后用. 举例: update t set col1='A&B' wher ...

  3. WebService中使用自定义类的解决方法(5种)

    转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...

  4. 使用Axis2编写webservice客户端,服务端

    1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...

  5. 使用axis2进行WebService的开发

    使用axis2进行WebService的开发 Apache Axis2 是 Apache Axis SOAP 项目的后继项目.此项目是 Web 服务核心引擎的重要改进,目标是成为 Web 服务和面向服 ...

  6. axis2开发webservice程序

    一.环境 eclipse + jdk 6.0 + win7 64位 +tomcat7.0 二.创建服务端程序 1.新建web项目,webserviceTest 2.下载axis2,将lib目录下的ja ...

  7. Java借助axis2发布WebService

    Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...

  8. axis2开发webservice入门到精通

    1,准备工作: 首先我们要下载:axis2-1.4.1-war(发布webservice),axis2-1.4.1-bin.zip(webservice调用使用的各种包). 下载好了,把axis2-1 ...

  9. 使用Axis2实现WebService的发布和调用

    一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:      可以下载如下三个zip包: axis2-1.7.3-bin.zip(用 ...

随机推荐

  1. Android数据读取之Sqlite数据库操作

    咱们书接上文,继续来说说Android数据读取,这回,我们要讲的是Sqlite数据库的相关操作.以一个实例开始吧: 首先,上图,看看做成后的效果: 大概描述:类似于浏览器的收藏夹,网站名称,网站地址, ...

  2. Leetcode 986. Interval List Intersections

    暴搜.. class Solution(object): def intervalIntersection(self, A: List[Interval], B: List[Interval]) -& ...

  3. [转]页游开发中的 Python 组件与模式Presentation Transcript

    转: 页游开发中的 Python 组件与模式Presentation Transcript 1. 页游开发中的 Python 组件与模式 赖勇浩( http://laiyonghao.com ) 20 ...

  4. git clone all branch and create a empty branch

    /******************************************************************** * git clone all branch and cre ...

  5. linux下 /boot 分区空间不足及其衍生问题

    linux的/boot引导分区有时会提示空间不足的问题,虽不影响系统的正常运行,但是人类天生对于未知的恐惧感总是影响心情的.而且在按安装其他软件的过程在中可能会出现以下问题: gzip: stdout ...

  6. 【英语】Bingo口语笔记(83) - hell系列

  7. 使用Oracle 11g新特性 Active Database Duplication 搭建Dataguard环境

    Duplication Database 介绍 Duplicate database可以按照用途分为2种: duplicate database(复制出一个数据库) duplicate standby ...

  8. 使用JspSmart文件上传

    index.html [html] view plaincopy     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transition ...

  9. 为什么 I2C(IIC)需要上拉电阻

    源鑫问: I2C时钟线和数据线为什么要接上拉电阻? 因为 I2C 的 IO 是开漏的,所以需要上拉电阻. 延伸: 之前 hippo曾经说过有人将 IO 设置为 PP,可能会烧 IO. 之前以为 I2C ...

  10. Oracle记录(四) 简单查询、限定查询、数据的排序

    一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会) ...