Skip to content

fix(jaxrs): 3 bugs + surefire argLine + CodeGraph docs + bilingual README (merge into main) - #3

Merged
loong10k merged 59 commits into
mainfrom
feature/3.0.x
Aug 20, 2026
Merged

fix(jaxrs): 3 bugs + surefire argLine + CodeGraph docs + bilingual README (merge into main)#3
loong10k merged 59 commits into
mainfrom
feature/3.0.x

Conversation

@loong10k

Copy link
Copy Markdown
Collaborator

修复概述

使用 CodeGraph 语义代码审查(6 维:数据流 / 符号执行 / 构造器全字段赋值 / 字节码常量池 / Builder 对称设计 / True Negative SOAP 侧交叉排除)在 feature/1.0.x / feature/2.0.x / feature/3.0.x / main 四条分支同时识别并修复 3 个真实 Bug + 1 个构建静默失效 Bug,反向同步 2 处测试断言(保证旧"坏值匹配"的测试在修复后仍然 PASS),新增 2 份 BuilderTest +450LOC 覆盖率提升,并补充完整 CodeGraph 审查证据技术方案与双语 README。

3+1 Bug 清单(CodeGraph 真阳性)

# 模块 现象 根因
Bug 1 RestParam(Class, String, HttpParamEnum) 三参构造器 用户显式 HttpParamEnum.PATH/HEADER/FORM/COOKIE 全部退化为 QUERY 漏写 this.from = from
Bug 2 RestParam(Class, String, HttpParamEnum, String) 四参构造器 from 字段退化 QUERY + this.name = name 被复制粘贴写两遍 this.from = from 且重复 name 赋值
Bug 3 JaxrsEndpointApiUtils.annotParams() defAnnot 回填 生成字节码 [@QueryParam, @QueryParam] 重复引用,@DefaultValue 永不生效 → 下游 NPE/0 paramArrays[i][1] = paramAnnot → 应为 = defAnnot
Build 1 pom.xml surefire <argLine> 前缀 jacoco.exec 0 字节 → 覆盖率 0% 但 CI BUILD SUCCESS,极易漏过 @{argLine} 惰性占位符前缀,JaCoCo prepare-agent 无法注入 -javaagent:jacocoagent.jar

构建差异化(JDK 线分档)

  • JDK 17/21 线(main / feature/2.0.x / feature/3.0.x)@{argLine} 后追加
    • --add-opens java.base/java.lang=ALL-UNNAMED
    • --add-opens java.base/java.lang.reflect=ALL-UNNAMED
      让 Javassist 绕过 JPMS 强封装写入 jdk.internal.reflect.*
  • JDK 8 线(feature/1.0.x)不加任何 --add-opens(否则 JVM 直接 Unrecognized option 导致 Surefire 退出)

测试反向断言修复(RestParamTest)

修复前两处断言匹配的是已知坏值(Green-on-Bug,测试因匹配错误值才 PASS):

  1. shouldCreateParamWithExplicitFromassertEquals(QUERY, param.getFrom()) → 改为 assertEquals(PATH, param.getFrom())
  2. shouldCreateParamWithFromAndDefault:末尾新增 assertEquals(PATH, param.getFrom())(此前对 from 字段零断言)

4 分支本地实测(全部 PASS)

分支 JDK Tests 失败 跳过 关键指标
feature/1.0.x Corretto 8u502 202 0 0 Surefire @{argLine} 生效
feature/2.0.x Corretto 17u20 202 0 0 RestParamTest 8 + 26 Jaxrs + 13 Jaxws 抽样全绿
main Corretto 17u20 202 0 0 同上
feature/3.0.x Corretto 21 224 0 0 JaCoCo BUNDLE INSTRUCTION 90% 达标,新增 Jaxrs/Jaxws BuilderTest

新增 / 更新文档(4 分支各一份,共 12 个 md 文件)

  • TECHNICAL-DESIGN.md — 技术方案(含 CodeGraph 6 维审查方法 + 3+1 真阳性代码对比证据 + True Negative SOAP 侧免疫说明 + ADR-001~005
  • README.md — 英文默认入口(§4.2 Builder 对称表 §7.1 构造器全字段赋值表 §9 worktree 目录 §10 FAQ add-opens / commons 锁版对照表)
  • README.zh-CN.md — 中文逐段对齐英文版

Commons 三件套 JDK 8 兼容锁版

四分支已全部使用 JDK 8 线的最终版本

  • commons-lang3 = 3.20.0(3.21+ 需 JDK 11,禁止升级)
  • commons-io = 2.22.0(2.23+ 需 JDK 11,禁止升级)
  • commons-beanutils = 1.11.0(1.x 线最终版)

关联 CI Status

  • feature/1.0.x push CI: ✅ success
  • feature/2.0.x push CI: ✅ success
  • main push CI: ✅ success
  • feature/3.0.x push CI: ⚠️ failure(与本 PR 无关:pom L3 <modelVersion>4.1.0</modelVersion> 的 Maven 4 语法与 Actions 默认 Maven 版本不兼容,属于独立的 Maven 版本升级议题)

📎 详细 CodeGraph 符号执行证据链请查阅仓库根目录 TECHNICAL-DESIGN.md §3 CodeGraph 审查维度与 §4 Bug 根因代码对比。

loong10k added 30 commits July 9, 2026 16:22
loong10k and others added 25 commits August 7, 2026 23:53
- 为JaxwsEndpointApiImplCtClassBuilder添加完整的单元测试覆盖
- 为JaxwsEndpointApiInterfaceCtClassBuilder添加完整的单元测试覆盖
- 测试各种WebService注解配置场景
- 验证服务模式、寻址功能和绑定设置
- 测试方法和字段的动态创建与删除功能
- 验证类转换和实例创建功能
- 确保接口和实现类构建器的正确性
- 为 EndpointApi 类添加详细的 JavaDoc 文档说明其作为动态生成端点基类的作用
- 为 HttpMethodEnum 枚举添加完整文档包括所有 HTTP 方法常量的说明
- 为 HttpParamEnum 枚举添加参数注入策略的详细文档
- 为 JaxrsEndpointApiCtClassBuilder 添加完整的构建器模式文档和所有方法说明
- 新增 EndpointApiTest 测试类验证处理器获取功能
- 新增 HttpMethodEnumTest 测试类验证 HTTP 方法枚举功能
- 新增 HttpParamEnumTest 测试类验证参数枚举功能
- 新增 JaxrsEndpointApiCtClassBuilderTest 测试类验证构建器的所有功能特性
- 移除调试打印语句并简化JaxrsApiCtClassBuilder_Test测试逻辑
- 从JaxrsEndpointApiImplCtClassBuilderTest中移除不必要的bind调用
- 重命名JaxrsEndpointApiInterfaceCtClassBuilderTest中的测试方法并增强流式调用验证
- 简化JaxwsApiCtClassBuilder_Test中的实例创建和断言逻辑
- 清理JaxwsEndpointApiCtClassBuilderTest
- Change [@loong Wan](url) to <a href="url">Loong Wan</a>
- Follow standard Javadoc @author tag format
- 添加 maven-central-publishing-plugin 0.11.0 版本
- 添加 maven-jacoco-plugin 0.8.15 版本
- 移除 pac4j-otp-extension 中多余的编码配置
- 移除测试失败忽略选项和废弃的 forkMode 配置
- 将 shiro-extension 重命名为 shiro-extension-core
- 为 licenses/scm/developers/distributionManagement/build/profiles 补充中文段注释
- 为各 Maven 插件补充 mvnrepository 链接与中文说明注释
- properties 版本属性按 Dependency/Maven Plugin 两组字母序重排
- 按业务分组重排:Javassist → CXF → Commons → Slf4j → Lombok → Junit
- 为每条依赖补充 <!-- For xxx --> 注释
- 补充 dependencyManagement 段落注释
- 按业务分组重排:Javassist → CXF → Commons → Slf4j → Lombok → 测试
- 为每条依赖补充 <!-- For xxx --> 注释
- 补充 dependencies 段落注释
- Remove source/target, use release only
- Fix maven.version per branch
- Fix enforcer requireMavenVersion for Maven 4 (3.0.x)
- Fix java.version values
- Fix maven-wrapper.properties
- Add properties 3-part comments
@loong10k loong10k added bug Something isn't working enhancement New feature or request labels Aug 20, 2026
@loong10k
loong10k merged commit ea3a967 into main Aug 20, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant