谁敢信,我发现了一个BUG后,结果居然就参与了一次Guava贡献

BUG 发现

好吧,那原本是一个月黑风高的夜晚,啊, 呸~~~, 是一个日常摸鱼的一天,我用上班的时间开发我的个人开源框架 Remote (该框架被我用在公司的一个代理服务器项目上), 结果测试跟我提交了一个BUG, 说是接口未响应。 我心想妈呀,这个接口命名一直都稳定运行的,怎么会未响应。然后连忙登上容器云平台,查看日志。最后定位到连接代理服务器超时。 我心想,这个代理服务器会不会出问题了,然后又去代理服务器排查,然后就看到一大堆的异常堆栈问题,

详查该异常发现是我在代理服务器中解析请求的内容类型时,利用Guava 框架的API: MediaType 将一个Content-Type 的字符串转换为 Guava 的 MediaType 出现的异常,把该异常复现出来大概是以下个意思:

       <!--依赖-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>32.1.2-jre</version>
        </dependency>

API 使用

        MediaType parse = MediaType.parse("multipart/form-data;charset=UTF-8;boundary =--jelsaflflksafjel");
        System.out.println(parse);

然后就异常了:

/home/asialjim/.jdks/corretto-17.0.7/bin/java -javaagent:/home/asialjim/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/232.8660.185/lib/idea_rt.jar=43365:/home/asialjim/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/232.8660.185/bin -Dfile.encoding=UTF-8 -classpath /home/asialjim/IdeaProjects/test/guava-test/target/classes:/home/asialjim/.m2/repository/com/google/guava/guava/32.1.2-jre/guava-32.1.2-jre.jar:/home/asialjim/.m2/repository/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:/home/asialjim/.m2/repository/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/home/asialjim/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar:/home/asialjim/.m2/repository/org/checkerframework/checker-qual/3.33.0/checker-qual-3.33.0.jar:/home/asialjim/.m2/repository/com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.jar:/home/asialjim/.m2/repository/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar io.github.asialjim.frame.remote.Main
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse 'multipart/form-data;charset=UTF-8;boundary =--jelsaflflksafjel'
	at com.google.common.net.MediaType.parse(MediaType.java:1085)
	at io.github.asialjim.frame.remote.Main.main(Main.java:8)
Caused by: java.lang.IllegalStateException
	at com.google.common.base.Preconditions.checkState(Preconditions.java:496)
	at com.google.common.net.MediaType$Tokenizer.consumeCharacter(MediaType.java:1123)
	at com.google.common.net.MediaType.parse(MediaType.java:1063)
	... 1 more

详细检查发现,传递参数的时候, 那个 'boundary‘  和 '=--‘ 之间有一个空格。然后我麻了。 这玩意儿,guava 居然没能忽略这个错误,还是说对应的标准当中不允许这么写。

当然我也没那个精力去查什么标准文档,直接用 Spring-Web 框架对应的 API 来搞:

        org.springframework.http.MediaType mediaType = org.springframework.http.MediaType.valueOf("multipart/form-data;charset=UTF-8;boundary =--jelsaflflksafjel");
        System.out.println(mediaType.getCharset());
        System.out.println(mediaType);
        mediaType = org.springframework.http.MediaType.valueOf("multipart/form-data; charset = UTF-8;boundary =--jelsaflflksafjel");
        System.out.println(mediaType.getCharset());
        System.out.println(mediaType);

然后发现,程序正常运行了。然后我就像是发现了一个新大陆一样,连夜登陆基佬网GitHub, 给guava 提交了 issuse(地址:Could not parse MediaType · Issue #6663 · google/guava · GitHub ),然后的然后就是用我那稍显蹩脚的英语和guava官方的开发胡扯,最后没想到,居然他们还吧这个问题处理了。

所以,我就这样稀里糊涂地参与了一次guava的代码贡献~~~好吧。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Asial Jim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值