zoukankan      html  css  js  c++  java
  • 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,也可以解决。

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/toughzcf/p/9988072.html
Copyright © 2011-2022 走看看