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就可以解決。


      查詢org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory,有誤編碼相關設置,可選沒提供,繼續尋找它的父類org.apache.cxf.endpoint.dynamic.DynamicClientFactory,很可惜也沒有。繼續研讀源碼看他們的編譯過程,在DynamicClientFactory 的 發現compileJavaSrc 方法 如下:


      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 :


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


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


      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 中設置


      -Dfile.encoding=UTF-8,這樣編譯器的控制台同樣需要設置為-Dfile.encoding=UTF-8,也可以解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM