可恶的编码方式,可恶的weblogic

    到新公司快一个半月了。一直在熟悉业务,唯一作的一个程序就是一个web service的接口,这个接口的工作很简单,就是取数,保存成xml文件,然后返回。结果还被编码问题搞得稀里糊涂,折腾了一个星期才搞好,丢人啊。

    开发环境:windows XP
                       jdk1.4.2
                      eclipse3.2.1 + myeclipse5.0
                      weblogic 8.16sp6
                     oracle9i

    服务器环境:linux
                            jdk1.4.2
                           weblogic 8.16sp6
                           oracle9i

 web service采用weblogic自带web service方式,服务发布通过web-services.xml配置发布,程序代码写完后在本地测试没有问题,java文件的编码格式是gbk。
 发布到服务器上后,问题来了,怎么中文都变成了乱码?第一想法是简单,转码,以前遇到乱码都是通过手工转码来解决的,但是这次不行了,可以想到的转码的方式都试了,还是不行,都要气炸了。最后发现一个怪异的问题:通过jsp页面直接调用java程序,java程序直接打印中文在jsp页面上,显示出来的还是乱码,java文件是gbk编码的,所以java文件本身绝对没有问题,jsp也是gbk的,并且ie浏览器察看jsp页面也是gbk的,看来问题不一定处在程序本身,最后终于发现英文系统,他的默认的java的运行环境是iso8859-1的。但是为什么之前转码一个转不过来呢,估计就是weblogic自己的那个web service 实现对soap消息做了什么处理,所以转码失败,又或者是本人太笨,转码少转了几种情况。
知道了这些就好办了,在网上查了一下文档。有两种处理方式,都可以解决问题:

    1. 在service的服务端,在输出string的时候进行转码:return new String(var.getBytes("gbk"),"iso-8859-1");在client端调用服务的时候也进行转码:String str = new String(myServicePort.sayHello().getBytes("iso-8859-1"),"gbk");
    2. 修改weblogic的启动参数:在startWebLogic.cmd中加入-Dweblogic.webservice.i18n.charset=gbk

终于搞定了,但是为了在不同的环境下都可以保证程序正确运行,推荐用第2种方式。

weblogic虽然是8错,能集成的东西都通吃,但是用起来问题还真多,现在还有好多东西都搞不懂。比如:
1、在weblogic下发布xfire作的web service,xfire通过***?WSDL方式访问服务的描述,这个同weblogic的冲突,疯狂报错。
2、用xmlbeans自带的工具生成xml的java类,在weblogic下调用会报错,用weblogic提供的工具生成就不会报错,太霸道了。
3、xfire和axis的webservice的client端可以通过多种方式相互访问xfire和axis的webservice,但是xfire和axis的webservice的client端只能通过特定的方式访问weblogic提供的webservice。

参考文档:http://coffey321.spaces.live.com/blog/cns!BC193786F4A1BDD1!454.entry(怪异的路径) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值