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

来源:互联网 发布:剑侠情缘手游mac版 编辑:程序博客网 时间:2024/06/05 10:09
 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

阅读全文
0 0
原创粉丝点击