CXF出現編碼 GBK 的不可映射字符問題解決

 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章