diff --git a/sql/adb/25_agent_ords_security_backoffice_support.sql b/sql/adb/25_agent_ords_security_backoffice_support.sql
index 216ce28..5407054 100644
--- a/sql/adb/25_agent_ords_security_backoffice_support.sql
+++ b/sql/adb/25_agent_ords_security_backoffice_support.sql
@@ -111,7 +111,7 @@ USING (
SELECT 1 AS object_id,
'ADMIN' AS owner,
'CB_V_SEARCH_DOCUMENTS' AS object_name,
- 'cb-agent-security/vpd/documents' AS ords_path,
+ 'cb-ords/cb-agent-security/vpd/documents' AS ords_path,
'Y' AS enabled_yn
FROM dual
) src
diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/domain/probe/ProbeStatus.java b/src/main/java/com/cloudhandson/vpdbackoffice/domain/probe/ProbeStatus.java
index 287c8a5..b081591 100644
--- a/src/main/java/com/cloudhandson/vpdbackoffice/domain/probe/ProbeStatus.java
+++ b/src/main/java/com/cloudhandson/vpdbackoffice/domain/probe/ProbeStatus.java
@@ -8,6 +8,7 @@ public enum ProbeStatus {
OBJECT_DISABLED,
INVALID_TOKEN,
OBJECT_NOT_ACCESSIBLE,
+ ORDS_PATH_NOT_FOUND,
ORDS_NOT_CONFIGURED,
ORDS_UNAVAILABLE,
ORDS_TIMEOUT,
diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsProbeService.java b/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsProbeService.java
index af26bd5..2ea6030 100644
--- a/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsProbeService.java
+++ b/src/main/java/com/cloudhandson/vpdbackoffice/service/OrdsProbeService.java
@@ -121,7 +121,7 @@ public class OrdsProbeService {
return auditAndReturn(command, ProbeResult.blocked(
status,
status.name(),
- trimMessage(e.getResponseBodyAsString()),
+ httpErrorMessage(status, e.getResponseBodyAsString()),
requestHeaders,
requestPayload,
prettyHeaders(e.getResponseHeaders()),
@@ -260,6 +260,15 @@ public class OrdsProbeService {
return detail;
}
+ private String httpErrorMessage(ProbeStatus status, String body) {
+ String detail = trimMessage(body);
+ if (status == ProbeStatus.ORDS_PATH_NOT_FOUND) {
+ return "ORDS 경로를 찾을 수 없습니다. 설정의 Base URL과 보호 객체 ORDS Path가 실제 ORDS schema mapping/module/template 경로와 일치하는지 확인하세요. 상세: "
+ + detail;
+ }
+ return detail;
+ }
+
private String trimMessage(String body) {
if (body == null) {
return null;
diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/service/ProbeErrorClassifier.java b/src/main/java/com/cloudhandson/vpdbackoffice/service/ProbeErrorClassifier.java
index e700111..7b44d7c 100644
--- a/src/main/java/com/cloudhandson/vpdbackoffice/service/ProbeErrorClassifier.java
+++ b/src/main/java/com/cloudhandson/vpdbackoffice/service/ProbeErrorClassifier.java
@@ -23,6 +23,12 @@ public class ProbeErrorClassifier {
if (status != null && (status.value() == 401 || status.value() == 403)) {
return ProbeStatus.INVALID_TOKEN;
}
+ if (status != null && status.value() == 404) {
+ return ProbeStatus.ORDS_PATH_NOT_FOUND;
+ }
+ if (text.contains("\"code\"") && text.contains("NotFound")) {
+ return ProbeStatus.ORDS_PATH_NOT_FOUND;
+ }
return ProbeStatus.UNKNOWN_ERROR;
}
diff --git a/src/main/resources/templates/objects.html b/src/main/resources/templates/objects.html
index eeebc80..1f40dc8 100644
--- a/src/main/resources/templates/objects.html
+++ b/src/main/resources/templates/objects.html
@@ -25,7 +25,7 @@