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