文档章节

CXF JaxWsDynamicClientFactory 错误:编码GBK的不可映射字符

SmileTower
 SmileTower
发布于 2017/03/15 14:36
字数 368
阅读 216
收藏 0
CXF
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
String wsUrl = "http://www.xxx.com/order.service?wsdl";
Client client = dcf.createClient(wsUrl);

    在 Windows 系统的使用 CXF 动态客户端时可能会遇到 tomcat 启动后调用 wsdl 遇到 很多 错误GBK编码,这个错误的原因是 由于项目 maven 配置使用 UTF-8 的,CXF 生成java 文件是使用的UTF-8 的编码,而使用javac 编译的时候 取的是系统默认的编码 由于中文 window 系统采用GBK 编码,所有就相当于使用  javac -encoding gbk *.java,所有就出 出现 如上错误,正确的 方法是 javac -encoding UTF-8 *.java就可以解决。

    查询 org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory,有误编码相关设置,可选没提供,继续寻找它的父类 org.apache.cxf.endpoint.dynamic.DynamicClientFactory,很可惜也没有。继续研读源码看他们的编译过程,在 DynamicClientFactory 的 发现 compileJavaSrc 方法 如下:

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.setTarget("1.6");
    
    return javaCompiler.compileFiles(srcList); 
}

   继续 org.apache.cxf.common.util.Comilper :

重要找到解决办法了重新实现类 DynamicClientFactory 的 compileJavaSrc 方法

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.setEncoding("UTF-8");

    javaCompiler.setClassPath(classPath);
    javaCompiler.setOutputDir(dest);
    javaCompiler.setTarget("1.6");

    return javaCompiler.compileFiles(srcList);
}

这样就大功告成。

当然还有一种解决思路,既然是 file.encoding 的 问题,我们可以在tomcat 中设置

-Dfile.encoding=UTF-8,这样编译器的控制台同样需要设置为 -Dfile.encoding=UTF-8,也可以解决。

详情见: IntelliJ IDEA 控制台中文乱码解决方案 

© 著作权归作者所有

共有 人打赏支持
SmileTower
粉丝 2
博文 2
码字总数 1110
作品 0
泰州
私信 提问
SpringBoot | 第三十四章:CXF构建WebService服务

前言 上一章节,讲解了如何使用构建服务。其实,创建的方式有很多的,今天来看看如何使用来构建及调用服务。 一点知识 何为Apache-CXF 是一个开源的框架,帮助您利用编程 API 来构建和开发S...

oKong
2018/11/12
0
0
cmd窗口输入wsdl2java命令,出现Unable to find cxf-manifest.jar in cxf_home\lib 的错误,但是在lib中的的确确是有cxf-manifest.jar文件的。

在cmd窗口输入wsdl2java命令,出现Unable to find cxf-manifest.jar in cxf_home\lib 的错误,但是在lib中的的确确是有cxf-manifest.jar文件的。 cxf_home的环境变量配置也是正确,用dir /a ...

bug恐惧症患者
2015/11/22
391
0
Apache CXF 3.0.16 发布,开源的 Service 框架

Apache CXF 3.0.16 发布了。Apache CXF一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面 向服务架构(SOA)业务组件与技术的灵活复用。 主要更新内容...

达尔文
2017/11/30
803
0
使用CXF开发RestFul WebService问题解决方案

最近在项目中,因为几个系统自己需要数据交换,所以采用进来都比较流行的RestFul风格WebService,实现框架采用apache的cxf,apache的东西一直以来都是比较的好用,回话少说,进入正题。 首先...

xdev
2013/05/18
0
3
Apache CXF 3.1.15 发布,开源的 Service 框架

Apache CXF 3.1.15 发布了。Apache CXF一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。 更新内容: Bu...

淡漠悠然
2018/03/14
705
1

没有更多内容

加载失败,请刷新页面

加载更多

基于 DataLakeAnalytics 的数据湖实践

随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析...

迷你芊宝宝
29分钟前
1
0
ubuntu查看防火墙状态

1.查看防火墙当前状态 sudo ufw status 2.开启防火墙 sudo ufw enable 3.关闭防火墙 sudo ufw disable 4.查看防火墙版本 sudo ufw version 5.默认允许外部访问本机 sudo ufw default all...

Frost729
30分钟前
1
0
Gradle插件使用过程记录

Android中基于Gradle进行编译打包的过程,下面记录一下如何进行Gradle插件开发的过程: 首先在项目中新建的一个名为buildSrc的module,为什么叫这个名字请看官方文档。然后将Java文件夹以及r...

JerryLin123
37分钟前
1
0
RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占优势

美国时间3月4-8日,国际知名信息安全峰会RSA Conference在美国旧金山开幕,云安全及云可以为企业提供更可靠的资产管理方式成为大会热点。 此次峰会共吸引全球700多家机构参展,其中近42%为云...

阿里云云栖社区
38分钟前
2
0
重磅推出TabLayout高级窗口组件

TabLayout是在APICloud现有窗口系统基础上升级而来的高级窗口组件,符合Material Design规范,可通过简单的配置为窗口实现原生的导航栏和TabBar,它将帮助您节省30%以上的重复编码工作量,同...

API_Cloud
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部