axis发送webservice编码问题

问题描述,在使用axis调用webservice服务时,出现生僻字问题服务端接收不了。上传的汉字报文是&#xxxxx;这种格式,要解决问题就需要找到哪里进行了编码。自己是否可以自定义,那先来了解一些基本概念。

一.webservice简介

webservice是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互,交互中使用的协议是soap协议。

什么是soap协议

SOAP协议简单的理解 HTTP+XML:采用HTTP作为底层通讯协议;XML作为数据传送的格式,一个SOAP请求其实就是一个HTTP请求。

如何确定http请求中是否有SOAP的数据

如果请求头中有SOAPAction这一段,那么请求会被当作SOAP的内容来处理而不会当作HTML来解析。也可以指定 Content-Type: application/soap+xml 来表示内容是SOAP的内容

二.axis简介

Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范的开放源代码实现,它为java应用服务器提供了标准的webservice能力。

axis发送webservice需要做那些事情?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZQ2dJUsY-1628922770148)(C:\Users\86136\AppData\Roaming\Typora\typora-user-images\image-20210812221731043.png)]

通俗点讲就是把对象转换为指定格式的字符串发送到服务器,再把接收的消息解析就完事了。

三.生僻字的问题

知道了这些基本概念,可以大概分析出问题,就是axis在对象转换为soap协议的xml时候对对象进行了编码。接下来就是分析axis代码。通过分析发现org.apache.axis.components.encoding.UTF8Encoder这个类中对字符进行了转换把10进制转换为了16进制:

if (character > 127) {
 writer.write("&#x");
 writer.write(Integer.toHexString(character).toUpperCase());
 writer.write(";");
} else {
    writer.write(character);
}

接下来我们要做的是可不可以用我们自定义编码类,不进行16进制转换。通过代码可以看到org.apache.axis.components.encoding.XMLEncoderFactory这个类负责生成编码器。encoderMap会先放入axis自己的编码器UTF8Encoder,UTF16Encoder,loadPlu

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值