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就能夠解決。java
查詢 org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory,有誤編碼相關設置,可選沒提供,繼續尋找它的父類 org.apache.cxf.endpoint.dynamic.DynamicClientFactory,很惋惜也沒有。繼續研讀源碼看他們的編譯過程,在 DynamicClientFactory 的 發現 compileJavaSrc 方法 以下:apache
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 :tomcat
重要找到解決辦法了從新實現類 DynamicClientFactory 的 compileJavaSrc 方法maven
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 中設置spa
-Dfile.encoding=UTF-8,這樣編譯器的控制檯一樣須要設置爲 -Dfile.encoding=UTF-8,也能夠解決。.net
詳情見: IntelliJ IDEA 控制檯中文亂碼解決方案 blog