Apigee 및 Apigee Hybrid 문서입니다.
Apigee Edge 문서 보기
SourceMessageNotAvailable
오류 코드
steps.extractvariables.SourceMessageNotAvailable
오류 응답 본문
{ "fault": { "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SourceMessageNotAvailable" } } }
원인
이 오류는 변수 추출 정책의 <Source> 요소에 지정된 message 변수가 다음 중 하나이면 발생합니다.
- 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
- 확인할 수 없는 경우(정의되지 않음)
예를 들어 이 오류는 변수 추출 정책이 요청 흐름에서 실행되지만 <Source>
요소가 요청 흐름이 없는 response
또는 error
변수로 설정되면 발생합니다.
진단
오류가 발생한 추출 변수 정책과 사용할 수 없는 변수의 이름을 식별합니다. 두 항목 모두 오류 응답의
faultstring
요소에서 찾을 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은ExtractVariables-1
이고 변수는response
입니다."faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"
실패한 변수 추출 정책 XML에서 요소에 설정된 변수 이름이 오류 문자열에서 식별된 변수 이름과 일치하는지 확인합니다(위 1단계). 예를 들어 다음 변수 추출 정책은 요소에
response
라고 하는 변수를 지정합니다. 이 변수는 오류 문자열에 있는 변수와 일치합니다.<ExtractVariables name="ExtractVariables-1"> <Source>response</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>
<Source>
요소에 사용된 변수가 정의되어 있고 변수 추출 정책이 실행 중인 흐름에서 사용 가능한지 확인합니다.변수가 다음 중 하나인 경우
- 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
- 확인할 수 없는 경우(정의되지 않음)
이는 오류의 원인이 됩니다.
예를 들어 위와 같은 추출 변수 정책이 request 흐름에서 실행된다고 가정해 보겠습니다. 변수 추출 정책의
<Source>
요소에 사용된response
변수를 다시 호출합니다. 응답 흐름에서만response
변수를 사용할 수 있습니다.response
변수가 요청 흐름에 없으므로 오류 코드steps.extractvariables.SourceMessageNotAvailable
이 표시됩니다.
해결 방법
실패한 변수 추출 정책의 <Source>
요소에 설정된 변수가 정의되고 정책이 실행되는 흐름에 있는지 확인합니다.
위와 같은 변수 추출 정책 예시를 수정하려면 요청 흐름에 있는 request
변수를 사용하도록 <Source>
요소를 수정하면 됩니다.
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
SetVariableFailed
오류 코드
steps.extractvariables.SetVariableFailed
오류 응답 본문
{ "fault": { "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SetVariableFailed" } } }
원인
이 오류는 변수 추출 정책에서 값을 변수로 설정할 수 없는 경우에 발생합니다. 이러한 상황은 일반적으로 이름이 중첩된 점으로 구분된 형식으로 된 동일한 단어로 시작하는 변수 여러 개에 값을 할당하려고 하면 발생합니다.
예를 들어 변수 var.color
에 값을 생성/할당한다고 가정해 보겠습니다. 이 경우 color
가 객체 노드로 할당됩니다. 그런 다음 값을 다른 변수 var.color.next
에 할당하려고 하면 color
가 이미 할당되어 있으므로 실패합니다. 즉, 다른 변수를 할당할 수 없습니다.
진단
오류가 발생한 추출 변수 정책과 값을 설정할 수 없는 변수의 이름을 식별합니다. 두 항목 모두 오류 응답의
faultstring
요소에서 찾을 수 있습니다. 예를 들어 다음 오류 문자열에서 정책 이름은ExtractColors
이고 변수는var.color.next
입니다."faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"
실패한 변수 추출 정책 XML에서 변수 이름이 오류 문자열에서 식별된 변수 이름과 일치하는지 확인합니다(위 1단계). 예를 들어 다음 정책은 요청 쿼리 매개변수의 값을
var.color.next
라는 변수(오류 문자열을 표시하는 값)에 값을 할당하려고 합니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{color.next}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
실패한 변수 추출 정책에 사용된 모든 변수 이름을 검사합니다. 이름이 오류 문자열에서 식별된 변수 이름과 동일한 이름으로 시작한 다른 변수에 값을 할당한 경우(위 1단계) 이로 인해 오류가 발생합니다.
위와 같은 변수 추출 정책에서 다음 사항에 유의하세요.
- 이름이
color
인 쿼리 매개변수의 값은 먼저var.color
변수에 할당됩니다. 참고:var
은<VariablePrefix>
요소에 설정된 모든 변수의 프리픽스입니다. - 다음 할당에서는
nextcolor
쿼리 매개변수의 값이 다른 변수var.color.next
에 할당됩니다. var.color
가 이미 할당되었으므로 변수 추출 정책에서 다른 중첩된 변수var.color.next
를 할당할 수 없습니다. 따라서steps.extractvariables.SetVariableFailed
오류 코드가 표시됩니다.
- 이름이
해결 방법
이름이 점으로 구분된 형식으로 중첩된 동일한 단어로 시작하는 변수 이름 여러 개가 없는지 확인합니다.
위와 같은 추출 변수 정책을 수정하려면 변수 이름 var.nextcolor.
를 사용할 수 있도록 변수 이름 var.color.next
를 수정하면 됩니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractColors">
<DisplayName>ExtractColors</DisplayName>
<Source>request</Source>
<QueryParam name="color">
<Pattern ignoreCase="true">{color}</Pattern>
</QueryParam>
<QueryParam name="nextcolor">
<Pattern ignoreCase="true">{nextcolor}</Pattern>
</QueryParam>
<VariablePrefix>var</VariablePrefix>
</ExtractVariables>
추가 정보
자세한 내용은 이 커뮤니티 게시물을 참조하세요.
InvalidJSONPath
오류 코드
steps.extractvariables.InvalidJSONPath
오류 응답 본문
{ "fault": { "faultstring": "Invalid JSON path [path_name] in policy [policy_name].", "detail": { "errorcode": "steps.extractvariables.InvalidJSONPath" } } }
원인
이 오류는 변수 추출 정책의 <JSONPath>
요소에 잘못된 JSON 경로가 사용되는 경우에 발생합니다. 예를 들어 JSON 페이로드에는 Name
객체가 없지만 변수 추출 정책의 경로로 Name
을 지정하면 이 오류가 발생합니다.
진단
오류가 발생한 추출 변수 정책과 잘못된 JSON 경로를 식별합니다. 두 항목 모두 오류 응답의
faultstring
요소에서 찾을 수 있습니다. 예를 들어 다음 오류 문자열에서 정책 이름은ExtractJSONVariables
이고 잘못된 JSON 경로는$.Name
입니다."faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."
실패한 변수 추출 정책 XML에서
<JSONPath>
요소에 설정된 JSON 경로가 오류 문자열에서 식별된 경로와 일치하는지 확인합니다(위 1단계). 예를 들어 다음 변수 추출 정책은 JSON 경로$.Name
을 지정하며 이는 오류 문자열의 경로와 일치합니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.Name</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
<Source>
요소를 검사하고 변수를 추출하려고 하는 JSON 페이로드를 확인합니다. 예를 들어<Source>
요소가request
로 설정된 경우 정책은 요청 객체에서 JSON 페이로드를 추출합니다.response
로 설정되면 응답 객체가 됩니다.위와 같은 변수 추출 정책 예시에서는
<Source>
요소가response
로 설정되므로 변수는 응답의 JSON 페이로드에서 추출됩니다.<Source>response</Source>
적절한 JSON 페이로드(3단계에서 확인됨)를 검사하고
<JSONPath>
요소에 지정된 객체가 있는지 확인합니다. JSON 페이로드에 객체가 없으며 이로 인해 오류가 발생합니다.예를 들어 다음 JSON 응답 페이로드에서 변수를 추출하려고 한다고 가정합니다.
{ "firstName":"John", "lastName":"Doe", "city":"San Jose", "state":"CA" }
JSON 응답 페이로드에는
Name
객체가 없으므로 오류 코드steps.extractvariables.InvalidJSONPath
가 표시되면서 변수 추출 정책이 실패합니다.
해결 방법
변수를 추출하는 JSON 페이로드의 일부인 객체만 변수 추출 정책의 <JSONPath>
요소에 지정되어 있는지 확인합니다.
위와 같은 추출 변수 정책 예시를 수정하려면 <JSONPath>
요소를 수정하여 샘플 JSON 응답 페이로드에서 사용할 수 있는 객체 중 하나를 지정하면 됩니다(예: firstName
및 lastName
객체가 유효).
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables">
<Source>response</Source>
<JSONPayload>
<Variable name="name" type="string">
<JSONPath>$.firstName</JSONPath>
</Variable>
</JSONPayload>
<VariablePrefix>employee</VariablePrefix>
</ExtractVariables>
ExecutionFailed
오류 코드
steps.extractvariables.ExecutionFailed
오류 응답 본문
{ "fault": { "faultstring": "Failed to execute the ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.ExecutionFailed" } } }
가능한 원인
이 오류의 가능한 원인은 다음과 같습니다.
원인 | 설명 |
입력 페이로드 누락 | 입력 페이로드(JSON, XML)가 비어 있습니다. |
무효하거나 형식이 잘못된 입력 | 정책에 전달된 입력(JSON, XML 등)이 잘못되었거나 형식이 잘못되었습니다. |
원인: 입력 페이로드 누락
변수 추출 정책이 JSON 또는 XML 페이로드에서 변수를 추출해야 하지만 <Source>
요소에 지정된 변수의 콘텐츠(페이로드)가 비어 있으면 이 오류가 발생합니다.
예를 들어 변수 추출 정책의 <Source>
요소가 request
또는 response
로 설정되어 있고 JSON 또는 XML 페이로드가 포함되어 있지만 페이로드가 비어 있으면 오류가 발생합니다.
진단
오류가 발생한 변수 추출 정책을 식별합니다. 오류 응답의 faultstring 요소에서 이 정보를 찾을 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은
ExtractJSONVariables
입니다."faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"
실패한 변수 추출 XML에서
<Source>
요소를 검사하여 추출 중인 변수에서 입력 유형을 확인합니다. 예를 들어 다음의 변수 추출 정책에는response
로 설정된<Source>
요소가 있고 XML 페이로드에서 변수가 추출되고 있습니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true"> <XMLPayload> <Namespaces/> <Variable name="City" type="string"> <XPath>/city</XPath> </Variable> </XMLPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
변수 추출 정책을 통해 파싱되는 입력이 비어 있는지 확인합니다. 입력이 비어 있으면 이로 인해 오류가 발생합니다.
위와 같은 변수 추출 정책 예시에서는 백엔드 서버가 보낸 응답 페이로드(즉, 응답 본문)가 비어 있었습니다.
XML 응답 페이로드가 비어 있으므로 오류 코드가 표시됩니다.
steps.extractvariables.ExecutionFailed
이 오류는
<Source>
요소가request
로 설정되어 있지만 API 프록시 요청에 전달되는 페이로드가 없는 경우에도 발생할 수 있습니다. 예를 들면 다음과 같습니다.curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml"
여기서
$EXTERNAL_IP
는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 액세스 라우팅 맞춤설정을 참조하세요.변수 추출 정책은 메시지의
Content-Type
헤더가application/xml
,text/xml
또는application/*+xml
인 경우에만 XML을 추출합니다. 변수 추출 정책을 XML 요청 페이로드를 파싱하려면 Content-Type 헤더를application/xml
,text/xml
또는application/*+xml
로 전달해야 합니다.
해결 방법
변수 추출 정책에 전달된 입력이 유효하며 비어 있지 않은지 확인합니다.
위와 같은 변수 추출 정책 예시의 문제를 해결하려면 유효한 XML 페이로드를 전달합니다. 예를 들면 다음과 같습니다.
다음 콘텐츠로
city.xml
라는 파일을 만듭니다.<city>Bengaluru</city> <area>Sanjaynagar</area>
다음과 같이 cURL 명령어를 사용하여 API 호출을 수행합니다.
curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
여기서
$EXTERNAL_IP
는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 액세스 라우팅 맞춤설정을 참조하세요.
원인: 입력이 잘못되었거나 형식이 잘못됨
변수 추출 정책이 잘못되었거나 형식이 잘못된 입력을 파싱하면 이 오류가 발생합니다.
예를 들어 다음과 같은 잘못된 JSON을 변수 추출 정책에 입력으로 제공하면 이 오류가 발생합니다.
[
"args": ["name" : "amar" ]
]
진단
오류가 발생한 변수 추출 정책을 식별합니다. 오류 응답의
faultstring
요소에서 이 정보를 확인할 수 있습니다. 예를 들어 다음faultstring
에서 정책 이름은ExtractJSONVariables
입니다."faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"
실패한 변수 추출 XML에서
<Source>
요소를 검사하여 추출 중인 변수에서 입력 유형을 확인합니다. 예를 들어 다음 변수 추출 정책에는request
로 설정된<Source>
요소가 있고 JSON 페이로드에서 변수가 추출되고 있습니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> </ExtractVariables>
변수 추출 정책에서 파싱하는 입력이 유효한지 확인합니다. 입력이 무효하거나 형식이 잘못되었으면 이것이 오류의 원인입니다.
위와 같은 변수 추출 예시에서는 다음과 같은 잘못된 JSON이 변수 추출 정책에 전달되었습니다.
[ "args": ["name" : "amar" ] ]
다음은 요청 전달 방식을 보여주는 샘플 API 호출입니다.
curl -v "http://<$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
여기서
$EXTERNAL_IP
는 외부 부하 분산기의 IP 주소입니다. 이 IP 주소가 인터넷에 노출됩니다. 자세한 내용은 액세스 라우팅 맞춤설정을 참조하세요.API에 전달된 JSON 페이로드에는 대괄호(
[ ]
)가 있는 배열이 포함되어 있어 잘못된 것이므로 오류 코드가 표시됩니다.steps.extractvariables.ExecutionFailed
이 오류는
<Source>
요소가response
로 설정되었지만 JSON 응답 페이로드가 잘못되었거나 형식이 잘못된 경우에도 발생할 수 있습니다.
해결 방법
변수 추출 정책에 전달된 입력이 유효하며 형식이 잘못되어 있지 않은지 확인합니다.
위에서 설명한 변수 추출 정책 예시의 문제를 해결하려면 다음과 같이 유효한 JSON 페이로드 요청을 전달합니다.
{
"args":{
"name":"amar"
}
}
UnableToCast
오류 코드
steps.extractvariables.UnableToCast
오류 응답 본문
{ "fault": { "faultstring": "Unable to cast value [value] as [type].", "detail": { "errorcode": "steps.extractvariables.UnableToCast" } } }
원인
이 오류는 변수 추출 정책이 추출된 값을 변수로 Casting 변환할 수 없는 경우에 발생합니다. 일반적으로 한 데이터 형식의 값을 다른 데이터 형식의 변수로 설정하려고 하면 이 오류가 발생합니다.
예를 들어 변수 추출 정책이 문자열 변수에서 추출한 값을 정수 변수로 설정하려고 하면 이 오류가 표시됩니다.
진단
추출 변수 정책이 전송을 시도했지만 실패한 변수의 데이터 유형을 식별합니다. 오류 응답의
faultstring
요소에서 이 정보를 확인할 수 있습니다. 예를 들어 다음faultstring
에서 객체 유형은BOOLEAN
입니다."faultstring":"Unable to cast value 36.231 as BOOLEAN."
값을 1단계에서 결정한 유형의 변수로 설정하려는 변수 추출 정책을 식별합니다.
예를 들어 다음 변수 추출 정책은 JSONPath
$.latitude
의 값을boolean
유형의 변수로 추출하며, 이 변수는 오류 문자열의 변수와 일치합니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="latitude" type="boolean"> <JSONPath>$.latitude</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
추출되는 값의 데이터 유형을 검사합니다. 데이터는 헤더, URI 경로, JSON/XML 페이로드, 양식 매개변수, 쿼리 매개변수의 양식일 수 있습니다.
3단계에서 결정한 데이터 형식과 데이터가 할당될 변수의 데이터 형식(2단계에서 결정)이 동일한지 확인합니다.
소스 변수와 대상 변수의 데이터 형식이 다르면 오류가 발생합니다.
위와 같은 변수 추출 정책 예시에서 JSON 요청 페이로드는 다음과 같습니다.
{ "latitude":36.2312 }
<JSONPath>
,'$.latitude'
에서 추출되는 값의 데이터 유식은 정수이며 이 정수는 데이터 형식 부울의 변수에 할당됩니다.추출된 값의 데이터 형식과 값이 할당된 변수의 데이터 형식이 동일하지 않으므로 오류 코드
steps.extractvariables.UnableToCast
가 표시됩니다.
해결 방법
추출된 값의 데이터 형식과 콘텐츠가 할당되는 변수가 같은 유형인지 확인합니다.
변수 추출 정책 예시를 수정하려면 변수 유형을 정수로 수정해야 합니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="latitude" type="integer">
<JSONPath>$.latitude</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response</Source>
</ExtractVariables>
JsonPathParsingFailure
오류 코드
steps.extractvariables.JsonPathParsingFailure
오류 응답 본문
{ "fault": { "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for for flow variables [variable_name]", "detail": { "errorcode": "steps.extractvariables.JsonPathParsingFailure" } } }
원인
이 오류는 변수 추출 정책이 JSON 경로를 파싱하고 <Source>
요소에 지정된 흐름 변수에서 데이터를 추출할 수 없는 경우에 발생합니다. 일반적으로 <Source>
요소에 지정된 흐름 변수가 현재 흐름에 없으면 이 오류가 발생합니다.
예를 들어 변수 추출 정책이 응답 흐름에서 실행되고 JSON 경로를 파싱하려고 하지만 <Source>
요소에서 응답 흐름에 없는 흐름 변수 request.content
를 지정하면 이 오류가 발생합니다.
진단
오류가 발생한 변수 추출 정책과 데이터를 추출할 수 없는 흐름 변수의 이름을 식별합니다. 두 항목 모두 오류 응답의 faultstring 요소에서 확인할 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은
ExtractVariables-1
이고 변수는request.content
입니다."faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for for flow variables request.content"
실패한 변수 추출 정책 XML에서
<Source>
요소에 설정된 변수 이름이 오류 문자열에서 식별된 변수 이름과 일치하는지 확인합니다(위 1단계). 예를 들어 다음 변수 추출 정책은 faultstring에 있는 이름과 일치하는request.content
라는 변수를 지정합니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request.content</Source> </ExtractVariables>
<Source>
요소에 사용된 변수가 정의되어 있고 변수 추출 정책이 실행 중인 흐름에서 사용 가능한지 확인합니다.변수가 다음 중 하나인 경우
- 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
- 확인할 수 없는 경우(정의되지 않음)
이는 오류의 원인이 됩니다.
예를 들어 위와 같은 ExtractVariables 정책이 응답 흐름에서 실행되어야 한다고 가정해 보겠습니다. 변수 추출 정책의
<Source>
요소에 사용된 흐름 변수request.content
를 다시 호출합니다. 요청 흐름에서만 흐름 변수request.content
를 사용할 수 있습니다.response
변수가 요청 흐름에 없으므로 오류 코드steps.extractvariables.JsonPathParsingFailure
이 표시됩니다.
해결 방법
변수 추출 정책의 <Source>
요소에 사용되는 흐름 변수를 변수 추출 정책이 실행되는 흐름에서 사용할 수 있는지 확인합니다.
예를 들어 응답 흐름에 response.content
라는 변수가 있고 실제로 추출하려는 JSON이 포함되어 있다고 가정합니다. 위와 같은 변수 추출 정책을 수정하려면 <Source>
요소를 다음과 같이 수정하면 됩니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="Name" type="string">
<JSONPath>$.args.name</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response.content</Source>
</ExtractVariables>