현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
UnsupportedOperationException
오류 코드
java.lang.UnsupportedOperationException
오류 응답 본문
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
원인
이 오류는 키 값 맵 작업 정책에서 mapIdentifier
속성이 빈 문자열로 설정된 경우에 발생합니다.
진단
오류가 발생한 특정 API 프록시의 모든 키 값 맵 작업 정책을 검토합니다.
mapIdentifier
속성이 빈 문자열로 설정된 키 값 맵 작업 정책이 있는 경우 오류의 원인이 됩니다.예를 들어 다음 키 값 맵 작업 정책에는 빈
mapIdentifier
가 있습니다.<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier=""> <DisplayName>StoreKvm</DisplayName> <Properties/> <ExclusiveCache>false</ExclusiveCache> <ExpiryTimeInSecs>300</ExpiryTimeInSecs> <Put override="true"> <Key> <Parameter ref="request.queryparam.key"/> </Key> <Value ref="request.queryparam.value"/> </Put> <Scope>apiproxy</Scope> </KeyValueMapOperations>
해결 방법
mapIdentifier
속성이 키 값 맵 작업 정책의 유효한 키 값 맵으로 설정되었는지 확인합니다.
위에 나온 예시 정책을 수정하려면 mapIdentifier
를 기존 키 값 맵 UserLocationMap
에 지정하면 됩니다.
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier="UserLocationMap">
<DisplayName>StoreKvm</DisplayName>
<Properties/>
<ExclusiveCache>false</ExclusiveCache>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<Put override="true">
<Key>
<Parameter ref="request.queryparam.key"/>
</Key>
<Value ref="request.queryparam.value"/>
</Put>
<Scope>apiproxy</Scope>
</KeyValueMapOperations>
SetVariableFailed
오류 코드
steps.keyvaluemapoperations.SetVariableFailed
오류 응답 본문
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
오류 메시지 예
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
원인
이 오류는 암호화된 키 값 맵에서 값을 검색하려 하고 이름에 private.
프리픽스가 없는 변수로 설정하려고 할 때 발생합니다. 디버깅 중 기본 보안 목적으로 필요한 프리픽스는 API 프록시 Trace 및 디버그 세션에서의 암호화된 값을 숨깁니다.
진단
1.
오류가 발생한 키 값 맵 작업 정책과 값을 설정할 수 없는 변수의 이름을 식별합니다. 두 항목 모두 오류 응답의 faultstring
요소에서 찾을 수 있습니다. 예를 들어 다음 faultstring
에서 정책 이름은 EncryptedKVM
이고 변수는 myvar
입니다.
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
해당 키 값 매핑 작업 정책 XML에서 <Get>
키 요소의 assignTo
속성에 지정된 변수의 이름이 위 1단계의 오류 문자열에 식별된 변수 이름과 일치하는지 확인합니다. 예를 들어, 다음 키 값 맵 작업 정책은 faultstring
의 내용과 일치하는 <Get>
요소에서 myvar
라는 변수를 지정합니다.
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
<DisplayName>KeyValueMapOperations-1</DisplayName>
<Properties/>
<ExclusiveCache>false</ExclusiveCache>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<Get assignTo="myvar" index="1">
<Key>
<Parameter>foo</Parameter>
</Key>
</Get>
<Scope>environment</Scope>
</KeyValueMapOperations>
mapIdentifier
속성에 지정된 키 값 맵이 암호화된 KVM인지 확인합니다. KVM이 환경 범위에서 암호화된 경우 Edge UI에서 암호화되었는지 확인할 수 있습니다. 그렇지 않으면 조직 또는 apiproxy 범위에서 생성된 경우 Management API를 사용하여 암호화되었는지 확인해야 합니다. KVM 관리 및 사용도 참고하세요.환경 범위의 KVM이 Edge UI에서 암호화되었는지 확인하려면 다음 안내를 따르세요.
- Edge UI의 왼쪽 탐색 메뉴에서 관리자를 클릭합니다.
- 환경을 클릭합니다.
- 키 값 맵을 클릭합니다.
- 사용할 키 값 맵을 찾습니다.
- 이름 왼쪽에 있는 화살표를 클릭하여 값 목록을 펼칩니다.
- 암호화된 KVM 정보에 표시된 것처럼 암호화된 키 값 맵은 UI 내의 별표(*****)로 마스킹된 값을 표시합니다.
조직, 환경 또는 apiproxy 수준에서 범위가 지정된 KVM이 암호화되었는지 확인하려면 Management API를 사용합니다. API를 사용하는 경우 암호화된 설정과 값의 별표를 모두 표시하는 샘플 응답은 다음과 같습니다.
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
키 값 맵이 암호화된 KVM이고
<Get>
요소의assignTo
속성에 사용되는 변수 이름에 프리픽스private
이 없는 경우 이는 오류의 원인이 됩니다.위의 키 값 맵 작업 정책 예시에서는 키 값 맵
testEncrypted
가 암호화되고 변수 이름myvar
에 프리픽스private
이 없습니다. 따라서 다음과 같은 오류 코드가 수신됩니다.steps.keyvaluemapoperations.SetVariableFailed
해상도
사용된 키 값 맵이 암호화된 경우 키 값 맵 작업 정책에 있는 <Get>
요소의 assignTo
속성에 있는 변수 이름에 프리픽스 private.
가 있는지 확인합니다.
위의 키 값 맵 작업 정책 예시를 수정하려면 assignTo
속성 값을 private.myvar
으로 수정하면 됩니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
<DisplayName>KeyValueMapOperations-1</DisplayName>
<Properties/>
<ExclusiveCache>false</ExclusiveCache>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<Get assignTo="private.myvar" index="1">
<Key>
<Parameter>foo</Parameter>
</Key>
</Get>
<Scope>environment</Scope>
</KeyValueMapOperations>