CXF出现编码 GBK 的不可映射字符问题解决

 CXF创建客户端 出现编码 GBK 的不可映射字符问题解决

1问题描述:

在用cxf创建client客户端的时候,在main方法启动,创建客户端是正常的,但是在tomcat中启动的时候,用action去访问,执行以下第三行代码会出现 警告:编码 GBK 的不可映射字符的 问题:

   1. String wsdlurl = "http://" + "192.168.0.199:8081" + "/services/hello?wsdl";
2.JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
3. Client client = clientFactory.createClient(wsdlurl);

2.控制台出现问题

D:\work\apache-tomcat-7.0.69\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@506d2be2-1509421150671-src\com\elgin\cxf\service\User.java:56: 错误: 编码GBK的不可映射字符
* 鑾峰彇name灞炴?鐨勫?銆?
^
D:\work\apache-tomcat-7.0.69\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@506d2be2-1509421150671-src\com\elgin\cxf\service\User.java:68: 错误: 编码GBK的不可映射字符
* 璁剧疆name灞炴?鐨勫?銆?
^
D:\work\apache-tomcat-7.0.69\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@506d2be2-1509421150671-src\com\elgin\cxf\service\User.java:68: 错误: 编码GBK的不可映射字符
* 璁剧疆name灞炴?鐨勫?銆?
^
D:\work\apache-tomcat-7.0.69\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@506d2be2-1509421150671-src\com\elgin\cxf\service\User.java:68: 错误: 编码GBK的不可映射字符
* 璁剧疆name灞炴?鐨勫?銆?

3.解决方案

在百度搜索解决方案,找来找去都没有解决方案,有个更改eclipse编码的问题的方法还是不能成功,还是自己动手跟踪源码发现,JaxWsDynamicClientFactory在编译的时候,是加载的jdk的默认的编码方式,是这里出现的问题,只要在源码中指定编码utf-8即可解决此问题。源码解决代码:

protected boolean compileJavaSrc(String classPath, List<File> srcList, String dest) {
        org.apache.cxf.common.util.Compiler javaCompiler
            = new org.apache.cxf.common.util.Compiler();

        javaCompiler.setClassPath(classPath);
        javaCompiler.setOutputDir(dest);
        javaCompiler.setEncoding("UTF-8");//增加的代码
       // System.out.println("your bianma  is  run 1.7---");
        if (System.getProperty("java.version").startsWith("9")) {

            javaCompiler.setTarget("9");
        } else {
            javaCompiler.setTarget("1.7");
        }
        return javaCompiler.compileFiles(srcList);
    }

这个方法在cxf-rt-frontend-simple-3.1.13.jar这个jar包中 org.apache.cxf.endpoint.dynamic.DynamicClientFactory.class中,需要用反编译工具jd-gui进行反编译或者直接下载jar的源码(cxf-rt-frontend-simple-3.1.13.jar的源码资源链接http://download.csdn.net/my),修改过后,再把这个修改的java编译成class文件,然后在cxf-rt-frontend-simple-3.1.13.jar这个jar包中,把org.apache.cxf.endpoint.dynamic.DynamicClientFactory.class覆盖就行。(为方便直接把修改过后的jar包直接分享:http://download.csdn.net/download/liupantao/10106989

4.说明

由于这个问题网上资源比较少,特共享出解决方案,请尊重个人成果
转载请标明来源:http://blog.csdn.net/liupantao/article/details/78465313

5.资源下载

http://download.csdn.net/download/liupantao/10106989

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值