CXF JaxWsDynamicClientFactory 錯誤:編碼GBK的不可映射字符

    • JaxWsDynamicClientFactorydcf=JaxWsDynamicClientFactory.newInstance();StringwsUrl="http://www.xxx.com/order.service?wsdl";Clientclient=dcf.createClient(wsUrl);在Windows系統的使用CXF動態客戶端時可能會遇到tomcat啓動後調用wsdl遇到不少錯誤GBK編碼,這個錯誤的緣由是因爲項目maven配
    • 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 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


      CXF JaxWsDynamicClientFactory 錯誤:編碼GBK的不可映射字符_Java


      重要找到解決辦法了從新實現類DynamicClientFactory 的compileJavaSrc 方法maven


      protected boolean compileJavaSrc(String classPath, List 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 中設置blog


      -Dfile.encoding=UTF-8,這樣編譯器的控制檯一樣須要設置爲-Dfile.encoding=UTF-8,也能夠解決。get

相關文章
相關標籤/搜索