diff --git a/src/main/java/com/yunhai/flowcenter/service/FormCenterSchemaClient.java b/src/main/java/com/yunhai/flowcenter/service/FormCenterSchemaClient.java index 2eacddd..faa1f5f 100644 --- a/src/main/java/com/yunhai/flowcenter/service/FormCenterSchemaClient.java +++ b/src/main/java/com/yunhai/flowcenter/service/FormCenterSchemaClient.java @@ -25,7 +25,7 @@ import java.util.Map; @Service public class FormCenterSchemaClient { - /** 服务目录 key(yh.open.services.form-center / targets 覆盖 / 枚举兜底三级解析) */ + /** 服务目录 key(targets / services 覆盖优先,否则标准 appCode 网关 fallback) */ static final String TARGET = "form-center"; static final String SCHEMA_PATH = "/oapi/form/schema"; /** 快照是发布期一次性动作,超时给足(对照 RouteJudgeClient 的 3s 运行期预算) */ diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index dd60497..2b99408 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -74,7 +74,8 @@ yh: # 绝不能写进本文件:yh.open.services.{key} 是目录第 2 级,平台注入的 base-host 只喂第 3 级兜底、 # 压不过它 —— 写进 jar 会让部署实例去连容器内的 localhost:8060(2026-09-18 事故: # Connection refused → 所有 /api/* 报 code=6 内部服务错误)。 - base-host: http://localhost:8060 + # 统一内部网关门地址;本地 UserBase 直连使用显式 services.userbase 覆盖。 + base-host: ${YH_OPEN_BASE_HOST:http://open-gateway-service:10013} base-path: "" # 服务目录(子应用配置优化方案 §4.2):只在需要覆盖 PlatformService 枚举默认 ctx 时按 key 配置; # prod 形态(网关域名 + 默认 ctx)下四域零配置。本地联调所需的 userbase 覆盖见上方环境变量。 diff --git a/src/test/java/com/yunhai/flowcenter/service/AppCodeFormCenterRoutingTest.java b/src/test/java/com/yunhai/flowcenter/service/AppCodeFormCenterRoutingTest.java new file mode 100644 index 0000000..8aba0f9 --- /dev/null +++ b/src/test/java/com/yunhai/flowcenter/service/AppCodeFormCenterRoutingTest.java @@ -0,0 +1,41 @@ +package com.yunhai.flowcenter.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sun.net.httpserver.HttpServer; +import com.yunhai.platform.openapi.core.*; +import org.junit.jupiter.api.Test; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import static org.junit.jupiter.api.Assertions.*; + +class AppCodeFormCenterRoutingTest { + @Test + void realSdkNeedsOnlyGatewayForCatalogAndExactSchema() throws Exception { + List paths = new ArrayList<>(); + HttpServer gateway = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0); + gateway.createContext("/", exchange -> { + String path = exchange.getRequestURI().getPath(); paths.add(path); + String data = path.endsWith("/schema") + ? "{\"formUuid\":\"test-form\",\"version\":3,\"groups\":[],\"audience\":[]}" + : "{\"items\":[],\"total\":0}"; + byte[] bytes = ("{\"code\":0,\"data\":" + data + "}").getBytes(StandardCharsets.UTF_8); + exchange.sendResponseHeaders(200, bytes.length); + exchange.getResponseBody().write(bytes); exchange.close(); + }); + gateway.start(); + try { + OpenApiProperties open = new OpenApiProperties(); + open.setBaseHost("http://127.0.0.1:" + gateway.getAddress().getPort()); + YschOpenCall call = new YschOpenCall(new YschCallProperties(), open, new ObjectMapper(), null); + assertFalse(call.hasTarget("form-center")); + assertEquals(0, new FormCenterCatalogClient(call).listForms(1L, null, null, 1, 20).getTotal()); + assertEquals(3, new FormCenterSchemaClient(call, new ObjectMapper()) + .fetchSchema(1L, "test-form", 3).get("formVersion")); + assertEquals(java.util.Arrays.asList("/form-center/oapi/form/forms", "/form-center/oapi/form/schema"), paths); + } finally { + gateway.stop(0); + } + } +}