datai/docs/archive/REQ-014-2.md

3.2 KiB
Raw Permalink Blame History

符号表分析与 DTO 生成需求

元数据

  • 需求编号014-2
  • 创建时间2026-01-26
  • 创建人SSOT 架构师
  • 状态:已完成
  • 优先级:高
  • 父需求:REQ-014
  • 关联代码:com.sforce.soap.tooling.SymbolTable, com.sforce.soap.tooling.ExternalConstructor

需求概述

利用 Tooling API 的 SymbolTable 功能,解析 Apex 类的内部结构(内部类、方法、变量),为 Java 端自动生成强类型的 DTOData Transfer Object解决 Partner API 只能传输扁平 SObject 的限制。 注意SymbolTable 仅在 Tooling API 中可用,需确保已通过 REQ-014-1 完成 Tooling API 连接。

目标

  1. 符号表获取:通过 ToolingConnection 查询 Apex 类的 SymbolTable
  2. 结构解析:解析 SymbolTable 中的 innerClassesmethodsvariables
  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<Id, SObject>),降级为 ObjectMap<String, Object>

技术约束

  • 依赖:必须引用 com.sforce.soap.tooling.SymbolTable 类。
  • 性能SymbolTable 字段较大,查询时应避免 SELECT *,仅查询必要字段。

成功标准

  1. 能够查询到 UserSummary Apex 类的 SymbolTable
  2. 生成的 Java 类 UserSummary.java 包含 userName, totalSales 等字段,且类型正确。
  3. 生成的 Java 类能够成功反序列化来自 Apex WebService 的响应 JSON。

相关文档