3.2 KiB
3.2 KiB
符号表分析与 DTO 生成需求
元数据
- 需求编号:014-2
- 创建时间:2026-01-26
- 创建人:SSOT 架构师
- 状态:已完成
- 优先级:高
- 父需求:REQ-014
- 关联代码:
com.sforce.soap.tooling.SymbolTable,com.sforce.soap.tooling.ExternalConstructor
需求概述
利用 Tooling API 的 SymbolTable 功能,解析 Apex 类的内部结构(内部类、方法、变量),为 Java 端自动生成强类型的 DTO(Data Transfer Object),解决 Partner API 只能传输扁平 SObject 的限制。
注意:SymbolTable 仅在 Tooling API 中可用,需确保已通过 REQ-014-1 完成 Tooling API 连接。
目标
- 符号表获取:通过
ToolingConnection查询 Apex 类的SymbolTable。 - 结构解析:解析
SymbolTable中的innerClasses、methods和variables。 - DTO 生成:基于解析结果生成 Java POJO 源代码。
功能需求
核心功能
-
符号表获取 (SymbolTable Retriever)
- 接口:
getSymbolTable(String className) - 实现:
- 执行 SOQL:
SELECT SymbolTable FROM ApexClass WHERE Name = 'className' - 关键点:
SymbolTable字段在未编译或无效状态下可能为 null,需处理重新编译逻辑(如果必要)。
- 执行 SOQL:
- 接口:
-
结构解析器 (Structure Parser)
- 输入:
com.sforce.soap.tooling.SymbolTable对象。 - 解析逻辑:
- 遍历
innerClasses:映射为 Java 的静态内部类。 - 遍历
variables:映射为 Java 字段(注意类型转换:ApexDecimal-> JavaBigDecimal)。 - 遍历
methods:提取ExternalMethod信息(仅针对webservice关键字修饰的方法)。
- 遍历
- 输入:
-
Java 代码生成器 (Java Code Generator)
- 模板引擎:建议使用 JavaPoet 或 FreeMarker。
- 输出:生成符合 Java Bean 规范的源代码,包含 Getter/Setter。
- 注解支持:自动添加 Jackson
@JsonProperty或 Gson@SerializedName注解。
次要功能
- 外部构造函数支持:处理
ExternalConstructor,虽然在 DTO 场景较少用,但需预留扩展。
非功能需求
- 类型安全:生成的 Java 代码应尽可能保留 Apex 的强类型特性。
- 容错性:对于无法映射的复杂类型(如
Map<Id, SObject>),降级为Object或Map<String, Object>。
技术约束
- 依赖:必须引用
com.sforce.soap.tooling.SymbolTable类。 - 性能:
SymbolTable字段较大,查询时应避免SELECT *,仅查询必要字段。
成功标准
- 能够查询到
UserSummaryApex 类的SymbolTable。 - 生成的 Java 类
UserSummary.java包含userName,totalSales等字段,且类型正确。 - 生成的 Java 类能够成功反序列化来自 Apex WebService 的响应 JSON。