数据仓库数据抽取服务在不久前增加了 OrientDB 的支持,当时使用了 Orient 官方提供的 JDBC 接口,后来发现 Orient JDBC 真是垃圾到无法言语了,不能满足我们自动化的 ETL 需求。

后来和 Neo4j 一样,改用 Http REST API 来请求数据,使用 Jsoup + FastJson 配合来操作数据。

当使用 http://192.190.10.170:2480/listDatabases 来获取数据库列表的时候,FastJson 直接报错了。

后来定位到代码,JSONObject.parseObject 方法在解析 JSON 字符串的时候抛出异常:

com.alibaba.fastjson.JSONException: autoType is not support. d

at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:889)

at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:325)

at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1335)

at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1301)

at com.alibaba.fastjson.JSON.parse(JSON.java:152)

at com.alibaba.fastjson.JSON.parse(JSON.java:143)

at com.alibaba.fastjson.JSON.parseObject(JSON.java:216)

at com.spinfosec.core.service.nosql.OrientInfoServiceImpl.schemas(OrientInfoServiceImpl.java:112)

at com.spinfosec.service.database.impl.DatabaseServiceImpl.schemas(DatabaseServiceImpl.java:594)

at com.spinfosec.service.database.thrift.DatabaseService$Processor$schemas.getResult(DatabaseService.java:877)

at com.spinfosec.service.database.thrift.DatabaseService$Processor$schemas.getResult(DatabaseService.java:862)

at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)

at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)

at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

获取数据库列表的代码:

try

{

String url = this.driver.getUrl() + "/listDatabases";

Document document = Jsoup.connect(url)

.header("Authorization", this.driver.getAuthorization())

.header("Accept", "application/json; charset=UTF-8")

.ignoreContentType(true)

.get();

JSONObject response = JSONObject.parseObject(document.body().text());

JSONArray databases = response.getJSONArray("databases");

databases.toJavaList(String.class)

.stream()

.filter(Objects::nonNull)

.forEach(userDefList::add);

}

catch (Exception e)

{

logger.error("orient list databases error: ", e);

}

从异常日志可以看出,错误出在下面的代码处。

JSONObject response = JSONObject.parseObject(document.body().text());

断点查看 document.body().text() 返回的 JSON 字符串为:

{

"@type": "d",

"@version": 0,

"databases": [

"ank",

"demo",

"demo1",

"GratefulDeadConcerts",

"LIU"

]

}

“autoType is not support” 错误放生在 ParserConfig.checkAutoType 方法中。

根据错误堆栈回溯,核心错误发生在 DefaultJSONParser.java 323行,跟进源码:

在方法 DefaultJSONParser.parseObject 中,判断如果 json 的 key 的内容等于 @type,并且并没有禁用 DisableSpecialKeyDetect 这个关键字检测,则会进行特殊类型反序列化处理,也就是 325 行,在这里 fastjson 自己定义了一个特殊的关键字 @type 用于保留反序列化时类型信息,而我们返回的 json 内容中恰好就含有这样的关键字,fastjson 当成了自己的预定义解析类型进行解析,故会报出刚才的错误。

根据以上代码的提示,可以在进行 JSON 解析的时候,将 Feature.DisableSpecialKeyDetect 传入解析器中,设置禁用关键字解析。

JSONObject response = JSONObject.parseObject(document.body().text(), Feature.DisableSpecialKeyDetect);

java的autotype,关于 fastjson 异常 autoType is not support 问题分析解决相关推荐

  1. java中415是什么异常_@RequestBody 错误415问题如何解决

    @RequestBody 错误415问题如何解决 js代码: function register(){ var user=$('#r_user').val(); var psw=$('#r_psw') ...

  2. 解决com.alibaba.fastjson.JSONException: autoType is not support

    转载自 https://blog.csdn.net/cdyjy_litao/article/details/72458538 最近发现进程运行日志中出现很多下面的日志: com.alibaba.fas ...

  3. 初探fastJson的AutoType

    文章目录 1. AutoType 何方神圣? 1.1 type字段 1.2 setAutoTypeSupport 2.反序列化攻击 3.AutoType 安全模式 4.参考 1. AutoType 何 ...

  4. java抛出数组格式异常,Java中异常

    一.异常的概述 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 二.异常的继承体系和错误的区别 1.异常的继承体系 Thr ...

  5. 造成java.io.IOException: Stream Closed异常的代码

    造成java.io.IOException: Stream Closed异常的代码 参考文章: (1)造成java.io.IOException: Stream Closed异常的代码 (2)http ...

  6. IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常

    IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常 参考文章: (1)IntelliJ IDEA的Maven项目 ...

  7. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。

    关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...

  8. Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程

    Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程 参考文章: (1)Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动 ...

  9. Java执行main方法,异常为:could not find the main class.program will exit

    Java执行main方法,异常为:could not find the main class.program will exit 参考文章: (1)Java执行main方法,异常为:could not ...

最新文章

  1. 推荐10个能带来快感的实用windows软件,好评如潮!
  2. 多面体体积 matlab,matlab计算多面体体积实现代码
  3. oracle数据库的性能测试工具有哪些,使用Oracle性能测试工具swingbench测试instance caging...
  4. cython linux so,更改Cython的.so文件命名规则
  5. (常用API)正则表达式练习和相关的String类方法
  6. python实时连接oracle_Python连接Oracle
  7. 第一季1:HI3518EV200的体验
  8. IP地址开启https
  9. CCF受理“大数据专家委员会”2019年委员与通讯委员申请
  10. 笔记本电脑5年没清灰了_返利网5年估值腰斩,没了P2P六亿对赌难完成
  11. spring配置日志
  12. 爆赞!java生成文件
  13. LoadRunner11 压力测试
  14. 黑马java idea (据说是完整的)网盘
  15. python3高级编程学习笔记(linux环境)
  16. 《Steve Jobs》
  17. 异或鉴相器 matlab 数字鉴相器,采用VHDL设计的全数字锁相环电路设计
  18. 如何把两个表格合并到一起
  19. 使用gitee+gitbook搭建个人在线电子书
  20. python遍历多层字典_Python遍历嵌套字典的几种方法

热门文章

  1. Dynamic Web Module 3.0 requires Java 1.6 or newer
  2. 云计算之路-阿里云上:一场暴风雨的袭击
  3. 【NGN学习笔记】4 软交换中的协议2—Megaco/H.248
  4. 用反向传导模拟电子运动并模拟HF,HCl,HBr
  5. 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
  6. 2016年定制维护组总结-历程回溯
  7. 大三下学期第四周总结
  8. 深度解析(十五)哈夫曼树
  9. 自学Zabbix3.0版本以上资产清单inventory
  10. Python数据分析学习笔记之Pandas入门