调用代码如下

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(PropertiesUtil.getValue("sms.requrl"));
Object[] objects = client.invoke("SendNote", phoneNo, content,
PropertiesUtil.getValue("sms.username"), PropertiesUtil.getValue("sms.userpwd"),
PropertiesUtil.getValue("sms.comid"), "", PropertiesUtil.getValue("sms.smsnumber"));
// 获取响应码
String respCode = objects[0].toString();
log.info("发送短信响应结果:" + SmsConstants.RESPONSE_CODE.get(respCode));

测试时出现如下错误(中文乱码)

D:\JavaProgram\Tomcat\apache-tomcat-8.5.12\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@3c01e324-1552027517229-src\org\tempuri\AddNewUser.java:12: 错误: 编码GBK的不可映射字符
* <p>anonymous complex type鐨? Java 绫汇??
^
D:\JavaProgram\Tomcat\apache-tomcat-8.5.12\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@3c01e324-1552027517229-src\org\tempuri\AddNewUser.java:12: 错误: 编码GBK的不可映射字符
* <p>anonymous complex type鐨? Java 绫汇??
^
D:\JavaProgram\Tomcat\apache-tomcat-8.5.12\temp\org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory@3c01e324-1552027517229-src\org\tempuri\AddNewUser.java:12: 错误: 编码GBK的不可映射字符
* <p>anonymous complex type鐨? Java 绫汇??
^
...... 此处省略

注:开发环境和Tomcat都统一设置编码方式为UTF-8。

报错原因:

DynamicClientFactory动态编译时对中文不兼容,导致乱码的发生,需要修改源码才能解决。

解决方法:

在项目中新增一类继承DynamicClientFactory,然后覆写compileJavaSrc。
/**
* 覆写父类的compileJavaSrc方法,解决动态编译乱码问题
*
* @author yueli.liao
* @date 2019-03-08 14:10
*/
public class JaxWsDynamicClientFactory extends DynamicClientFactory { protected JaxWsDynamicClientFactory(Bus bus) {
super(bus);
} @Override
protected EndpointImplFactory getEndpointImplFactory() {
return JaxWsEndpointImplFactory.getSingleton();
} protected boolean allowWrapperOps() {
return true;
} /**
* Create a new instance using a specific <tt>Bus</tt>.
*
* @param b the <tt>Bus</tt> to use in subsequent operations with the
* instance
* @return the new instance
*/
public static JaxWsDynamicClientFactory newInstance(Bus b) {
return new JaxWsDynamicClientFactory(b);
} /**
* Create a new instance using a default <tt>Bus</tt>.
*
* @return the new instance
* @see CXFBusFactory#getDefaultBus()
*/
public static JaxWsDynamicClientFactory newInstance() {
Bus bus = CXFBusFactory.getThreadDefaultBus();
return new JaxWsDynamicClientFactory(bus);
} /**
* 覆写父类的该方法<br/>
* 注:解决此(错误:编码GBK的不可映射字符)问题
*
* @return
*/
@Override
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);
} }

引用如上实现类JaxWsDynamicClientFactory进行操作。

文章转载至:https://www.jianshu.com/p/3e8dfe71475a

XML:使用cxf调用WebService接口时报错:编码GBK的不可映射字符(设置UTF-8字符集)的更多相关文章

  1. idea运行javadoc生成文档以及 报错编码gbk的不可映射字符坑

    将项目类信息生成文档 idea整合了javadoc的操作,可以一键生成doc文档 方法: 选中你要生成文档的项目 点击上方tools->Generate JavaDoc 运行即可 注意这里有一个 ...

  2. 使用cmd打开java文件,报错:“错误,编码GBK的不可映射字符”

    今天使用EditPlus写了一个小程序,用cmd运行时报错--"错误,编码GBK的不可映射字符". 处理办法是用EditPlus另存为时,把编码格式由UTF-8改为ANSI. 然后 ...

  3. 使用javadoc 报错:编码GBK的不可映射字符

    运行命令:javadoc Test1.java 报错:编码GBK的不可映射字符 问题原因:类文件中带有非GBK字符 解决办法:javadoc -encoding utf-8 Test1.java

  4. 获取调用U9接口时报错的方法

  5. 【我的Android进阶之旅】解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符

    1.问题描述 最近在负责公司基础业务和移动基础设施的开发工作,正在负责Lint代码静态检查工作.因此编写了自定义的Lint规则,在调试过程中,编译的时候出现了如下所示的错误: 部分输出日志如下所示: ...

  6. 使用ant构建报错,编码GBK的不可映射字符解决方法

    使用ant的核心就是这个build.xml.然后再在cmd中使用ant命令就行了. build.xml构建文件包含一个工程(project). 工程包含若干个目标(target). 目标可以依赖于其他 ...

  7. java编译报错 错误: 编码GBK的不可映射字符

    解决方法: 1.  javac -encoding UTF-8 .\Test_Sql.java //加上参数指定utf-8 2.改变文件编码 使用 ANSI编码.

  8. javac导出参考文档报错 错误: 编码GBK的不可映射字符”

  9. 调用webservice接口,报错:(十六进制值0x01)是无效的字符

    #事故现场 调用webservice接口,报错:(十六进制值0x01)是无效的字符. 如图: 意思是webservice返回的信息中包含无效的字符,无法解析成xml: #分析 使用postman向we ...

随机推荐

  1. VS 中的 lib 和 dll 的区别和使用

    在 vs/c# 项目开发中,经常会遇到 lib 和 dll 文件,而且创建工程项目以及工程项目打包时也是必须要面对的,所以有必要掌握 lib 和 dll 的区别和使用. 静态库:在链接步骤中,连接器将 ...

  2. .NET Core HttpClient请求异常详细情况分析

    前言 最近项目上每天间断性捕获到HttpClient请求异常,感觉有点奇怪,于是乎观察了两三天,通过日志以及对接方沟通确认等等,查看对应版本源码,尝试添加部分配置发布后,观察十几小时暂无异常情况出现, ...

  3. NVIDIA DGX SUPERPOD 企业解决方案

    NVIDIA DGX SUPERPOD 企业解决方案 实现大规模 AI 创新的捷径 NVIDIA DGX SuperPOD 企业解决方案是业界首个支持任何组织大规模实施 AI 的基础架构解决方案.这一 ...

  4. 在OpenShift平台上验证NVIDIA DGX系统的分布式多节点自动驾驶AI训练

    在OpenShift平台上验证NVIDIA DGX系统的分布式多节点自动驾驶AI训练 自动驾驶汽车的深度神经网络(DNN)开发是一项艰巨的工作.本文验证了DGX多节点,多GPU,分布式训练在DXC机器 ...

  5. SQL Parameter参数的用法

    SqlParameter 类 表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射. 无法继承此类. 命名空间:  System.Data.SqlClient 程序集:  Sys ...

  6. zookeeper命令行练习,熟练节点权限, 数组越界异常解决方案

    https://www.cnblogs.com/qlqwjy/p/10517231.html zookeeper 创建持久有序节点时候报错,我的版本号是3.4.12, 亲测有效 https://blo ...

  7. 编译原理-非确定有穷自动机(nondeterministic finite automata,NFA)

    是一个五元组,M=(S,∑,f,S0,F) S:有穷状态集 ∑:输入字母表(有穷) f:f(S,α)=S' 表示从一个状态S出发,识别了一个字α后,可以到达S'这个状态集合之间的某一个状态(可能的后继 ...

  8. 重新整理 mysql 基础篇————— 事务隔离级别[四]

    前言 简单介绍一下事务隔离的基本 正文 Read Uncommitted(未提交读) 这个就是读未提交.就是说在事务未提交的时候,其他事务也可以读取到未提交的数据. 这里举一个例子,还是前一篇的例子. ...

  9. 快速上手pandas(上)

      pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation to ...

  10. 利用SPI机制实现责任链模式中的处理类热插拔

    最近看到责任链模式的时候每增加一个处理类,就必须在责任链的实现类中手动增加到责任链中,具体代码基本就是list.add(new FilterImpl()),可以看到每次增加一个处理类,就必须添加一行上 ...