Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

com.alibaba.fastjson.JSONException: TODO #1261

Open
Abelsf opened this issue Jun 12, 2017 · 26 comments
Open

com.alibaba.fastjson.JSONException: TODO #1261

Abelsf opened this issue Jun 12, 2017 · 26 comments

Comments

@Abelsf
Copy link

Abelsf commented Jun 12, 2017

com.alibaba.fastjson.JSONException: TODO
at com.alibaba.fastjson.util.TypeUtils.getRawClass(TypeUtils.java:2019)
at com.alibaba.fastjson.util.TypeUtils.createCollection(TypeUtils.java:1981)
at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:117)
at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:71)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:828)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:630)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:212)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:208)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:642)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:350)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:254)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:467)
at com.djdg.product.api.sdk.service.StockService.operateStockRecord(StockService.java:59)
at com.djdg.product.api.sdk.Service.operateStockRecord(Service.java:391)
at com.djdg.pos.client.api.help.ProductHelper.generateWarehouseRecord(ProductHelper.java:78)
at com.djdg.pos.client.api.help.OrderHelper.generateWarehouseRecord(OrderHelper.java:102)
at com.djdg.pos.client.api.service.order.product.StoreProductOrderServiceImpl.orderPayedHandle(StoreProductOrderServiceImpl.java:546)
at com.djdg.pos.client.api.service.order.product.StoreProductOrderServiceImpl.lambda$updateOrder$1(StoreProductOrderServiceImpl.java:298)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.ReferencePipeline$Head.forEachOrdered(ReferencePipeline.java:590)
at com.djdg.pos.client.api.service.order.product.StoreProductOrderServiceImpl.updateOrder(StoreProductOrderServiceImpl.java:289)
at com.djdg.pos.client.api.rest.v1.CheckoutApi.updateStoreOrder(CheckoutApi.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179)
at org.jboss.resteasy.plugins.server.netty.RequestDispatcher.service(RequestDispatcher.java:83)
at org.jboss.resteasy.plugins.server.netty.RequestHandler.messageReceived(RequestHandler.java:56)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:43)
at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:67)
at org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:314)
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)

@kimmking
Copy link
Contributor

能否提供你用到的json和pojo结构,
如果能做个testcase最好了

@wenshao
Copy link
Member

wenshao commented Jun 25, 2017

还有能否提供fastjson的版本?

@mustfun
Copy link

mustfun commented Nov 22, 2017

1.2.29版本,数据结构:

{"data":2660885,"count":0,"hasError":false,"errorCode":null,"errorMessage":null,"errorTrace":null,"status":0,"message":null}

不定时不定期出现,使用的下面这段代码进行解析

JSON.parseObject(entityStream, this.fastJsonConfig.getCharset(), type, this.fastJsonConfig.getFeatures())

返回的结果是这种数据结构 Result<Integer> ,其中Result如下

    private long status;
    private String message;
    private T data;

    private Integer count;
    private boolean hasError;
    private String errorCode;
    private String errorMessage;
    private String errorTrace;

感谢!

@slankka
Copy link

slankka commented Jan 24, 2018

我也是1.2.29,也是出这个异常。SpringBoot + Feign+JDK 1.7.0_55。
JDK1.8就没有问题。

//抓取最近发现的数据
{"data":true,"code":200,"msg":"success","success":true}
///对应结构
public class Response {
    private int code;
    private String msg;
    private T data;
    private String success
}
//对应FeignClient
@FeignClient(name="xx", url="xxx")
public interface RemoteCall {
    @RequestMapping("/targetUrl")
    Response getData();
}

经过排查,发现是服务器jenkins打包机器使用的JDK是 java version "1.8.0_144"
而应用服务器 JDK 版本是 java version "1.7.0_55"

但是难以复现这个问题,应用服务器上面,时而有错,时而正常。

但建议 还是 尽量打包机器和应用服务器 使用相同版本。

完整异常

Caused by: com.alibaba.fastjson.JSONException: TODO
at com.alibaba.fastjson.util.TypeUtils.getRawClass(TypeUtils.java:1932)
at com.alibaba.fastjson.util.TypeUtils.createCollection(TypeUtils.java:1894)
at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:117)
at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:71)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:791)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:596)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:188)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:184)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:642)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:350)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:318)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:281)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:381)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:463)
at com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4.read(FastJsonHttpMessageConverter4.java:69)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95)
at org.springframework.cloud.netflix.feign.support.SpringDecoder.decode(SpringDecoder.java:57)
at org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder.decode(ResponseEntityDecoder.java:47)
at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:161)
... 25 more 

@nicksheng
Copy link

我是1.2.22版本,也有这个异常。诡异的是服务器上有这个异常,在本地测试就正常,JDK都是1.8,看不出别的问题。

com.alibaba.fastjson.JSONException: TODO
        at com.alibaba.fastjson.util.TypeUtils.getRawClass(TypeUtils.java:1735) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.util.TypeUtils.createCollection(TypeUtils.java:1697) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:119) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:71) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:722) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:568) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:187) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:183) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:624) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:339) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:243) ~[fastjson-1.2.22.jar!/:?]
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:456) ~[fastjson-1.2.22.jar!/:?]

@helloworldtang
Copy link

helloworldtang commented Jul 6, 2018

好奇怪,也报了同样的错:
fastjson版本:1.2.31

   com.alibaba.fastjson.JSONException: TODO

同样的spring boot的fat jar,部署在两台机器上,只有一台机器报上面的错。
等转成json的字符串:

{
	"code": 0,
	"data": true,
	"message": "OK",
	"status": 0
}

对应的Java对象:

import lombok.Data;

import java.util.Date;
@Data
public class DataResult<T> {
    private int status;
    private String message;
    private T data;
    private Date time;
}

调用的API:

   com.alibaba.fastjson.JSON.toJSONString()

报错的信息:

com.alibaba.fastjson.JSONException: TODO
        at com.alibaba.fastjson.util.TypeUtils.getRawClass(TypeUtils.java:2019) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.util.TypeUtils.createCollection(TypeUtils.java:1981) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:117) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:71) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:828) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:630) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:212) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:208) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:642) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:350) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:254) ~[fastjson-1.2.31.jar!/:?]
        at com.alibaba.fastjson.JSON.parseObject(JSON.java:467) ~[fastjson-1.2.31.jar!/:?]

@slankka
Copy link

slankka commented Jul 6, 2018

@helloworldtang 你能在某一台机器上复现吗?这两台机器的JDK版本是不是一样的?我一直想复现来着。还有你的Model 类?

@helloworldtang
Copy link

@slankka
重新发布后,两台机器都开始报错了。刚才把报错的详细信息也粘上去了

@helloworldtang
Copy link

温少建议升级到1.2.49,出现类似问题的同学可以试试

@helloworldtang
Copy link

helloworldtang commented Aug 9, 2018

@su1216 这种是偶发的,怎么证明已经解决了呢?

对比了下1.2.31和1.2.49中com.alibaba.fastjson.util.TypeUtils.getRawClass, 在前两行代码有变化:

        if (type instanceof  Class<?>) {
            return (Class<?>) type;

v1.2.31中:

    public static Class<?> getRawClass(Type type) {
        if (type instanceof  Class<?>) {
            return (Class<?>) type;
        } else if (type instanceof ParameterizedType) {
            return getRawClass(((ParameterizedType) type).getRawType());
        } else {
            throw new JSONException("TODO");
        }
    }

v1.2.49中:

    public static Class<?> getRawClass(Type type) {
        if (type instanceof Class) {
            return (Class)type;
        } else if (type instanceof ParameterizedType) {
            return getRawClass(((ParameterizedType)type).getRawType());
        } else {
            throw new JSONException("TODO");
        }
    }

helloworldtang pushed a commit to helloworldtang/spring-boot-cookbook that referenced this issue Aug 9, 2018
        at com.alibaba.fastjson.util.TypeUtils.getRawClass(TypeUtils.java:1735) ~[fastjson-1.2.22.jar!/:?]
温少说在1.2.49中已解决
alibaba/fastjson#1261
@su1216
Copy link

su1216 commented Aug 9, 2018

@helloworldtang 抱歉,之前看成另一个问题了。这个问题不了解。

@slankka
Copy link

slankka commented Aug 10, 2018

@helloworldtang 我怎么没有看出有什么不同的地方?1.2.31和1.2.49中com.alibaba.fastjson.util.TypeUtils.getRawClass 前两行 没有变化啊

@helloworldtang
Copy link

@slankka
if (type instanceof Class<?>) {
变成
if (type instanceof Class) {

@slankka
Copy link

slankka commented Aug 18, 2018

fastjsontypeutil
@helloworldtang 没有啊!!

@jannal
Copy link

jannal commented Apr 1, 2019

我是1.2.54版本,也有这个异常。服务器上有这个异常,在本地mac系统测试就正常,JDK都是1.8
Exception: com.alibaba.fastjson.JSONException: TODO
at com.alibaba.fastjson.util.TypeUtils.getRawClass(TypeUtils.java:1881)
at com.alibaba.fastjson.util.TypeUtils.createCollection(TypeUtils.java:1843)
at com.alibaba.fastjson.serializer.CollectionCodec.deserialze(CollectionCodec.java:117)
at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:71)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:790)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:595)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:188)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:184)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:642)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:350)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:254)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:467)

@VinneyZheng
Copy link

1.2.29版本,我也遇到了这个问题,所以各位大神有解决方案了么,是升级到1.2.49可以了么?

@zhangptang
Copy link

更新到最新的1.2.58版本,同样报这个错误,错误日志信息和上面都一样,都是在 TypeUtils.getRawClass这个里。各位大佬有解决方法么?这个报错很随机,有点任性啊

@hhli
Copy link

hhli commented Mar 30, 2020

这个问题我也遇到了,jdk版本测试与本地都是1.8,但是我最终使用TypeReference解决了
原始写法(备注:RespBase是一个范型类型):
RespBase base = JSON.parseObject(resultStr, RespBase.class);
第二种写法也不行:
JSON.parseObject(resultStr, new TypeReference(){});
最终使用下面的方式解决了:
JSON.parseObject(resultStr, new TypeReference<RespBase<?>>(){})

结论:
推测fastjson对类型的推断处理没有做好,从抛出的异常:“TODO Exception”来看也是,因此对于范型的json转化时,最好加上类型变量或者通配符,希望能够到大家。

@vicoolee
Copy link

vicoolee commented Mar 25, 2022

fastjson 1.2.28
使用反序列化泛型对象后:
PlatformPage userPage = JSON.parseObject(response.getResponseText(), new TypeReference<PlatformPage>(){});
上述代码运行后(正常运行),其他代码执行报错如:
Result result = JSON.parseObject(response.getResponseText(), Result.class);

public class Result implements Serializable {
private boolean success;
private String code;
private String message;
private T data;
}
本地测试 无法复现。Jenkins 构建 k8s部署测试环境 每次都是

已使用jackjson 替换反斜线代码。
其他服务未发现上述问题

@harkue
Copy link

harkue commented Mar 25, 2022

fastjson 1.2.28 使用反序列化泛型对象后: PlatformPage userPage = JSON.parseObject(response.getResponseText(), new TypeReference(){}); 上述代码运行后(正常运行),其他代码执行报错如: Result result = JSON.parseObject(response.getResponseText(), Result.class);

public class Result implements Serializable { private boolean success; private String code; private String message; private T data; } 本地测试 无法复现。Jenkins 构建 k8s部署测试环境 每次都是

已使用jackjson 替换反斜线代码。 其他服务未发现上述问题

为啥还在使用这么老的版本?

@slliver
Copy link

slliver commented Jun 2, 2022

版本2.0.1 也遇到这个问题了

@Times125
Copy link

Times125 commented Jul 8, 2022

2.0.2 也有这个问题

@ruizhanglei
Copy link

2.0.1有这个问题,2.0.12没有这个问题

@Times125
Copy link

Times125 commented Aug 30, 2022 via email

@liuzhebaba
Copy link

2.0.26也有这样的问题,服务器上报错,本地是好的

@Times125
Copy link

Times125 commented Mar 29, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests