현재 Apigee 끝점에서 오류 처리 루틴을 리팩터링하려고합니다. 클라이언트는 JSON 또는 XML 데이터가 반환되도록 요청할 수 있으며 이는 오류 메시지의 형식으로도 확장됩니다. 중복 코드를 줄이기 위해 모든 오류를 JSON에 보관하고 흐름에 두 가지 버전의 오류가있을 필요없이 필요할 때 XML로 변환하려고합니다.Apigee 프록시에서 JSON에서 XML로 오류 메시지를 변환하는 적절한 방법은 무엇입니까?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="401-unauthorized-json">
<DisplayName>401UnAuthorized - JSON</DisplayName>
<FaultRules/>
<Properties/>
<Set>
<Payload contentType="application/json">
{"error":{
"Fault":{
"Error Code": "401",
"Description":"UnAuthorized",
"Response": "Invalid Apikey. Access Denied"
}
}}
</Payload>
<StatusCode>401</StatusCode>
<ReasonPhrase>Unauthorized</ReasonPhrase>
</Set>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>
는 XML 정책 자체에 대한 JSON은 특별한 옵션이 기본적으로 비어 : 잘못된 API 키 내 오류 처리기 실행을 사용하고 오류 응답의 JSON 버전을 생성하는 예를 들어
<DefaultFaultRule>
<Step>
<FaultRules/>
<Name>401-unauthorized-json</Name>
</Step>
<Step>
<Condition>(request.header.Accept ~ "*xml")</Condition>
<FaultRules/>
<Name>JSON-to-XML</Name>
</Step>
<AlwaysEnforce>true</AlwaysEnforce>
</DefaultFaultRule>
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSON-to-XML">
<DisplayName>JSON to XML 1</DisplayName>
<FaultRules/>
<Properties/>
<Options/>
<OutputVariable>response</OutputVariable>
<Source>response</Source>
</JSONToXML>
이 정책은 내 프록시 엔드 포인트에 대한 'DefaultFaultRule'에서 참조
accept 헤더를 xml로 설정하면 JSON-to-XML이 실행되지만 오류 500으로 실패합니다. throw되는 오류는 "JSONToXML [JSON-to-XML] : 소스 응답을 사용할 수 없습니다."
메시지 할당 정책은 오류 문자열을 응답 객체에 넣고 JSON이 반환 될 때 올바르게 작동합니다. 응답 객체가 유효하지 않다는 불평을하는 JSON-XML은 왜 발생합니까? 이 변환이 제대로 작동하도록하기 위해 어떤 메시지를 내 메시지 정책에 넣어야합니까?
안녕하세요, Craig, JSON-XML 정책의 내용을 포함 할 수 있습니까? –
위의 질문을 편집하여 JSON-to-XML 정책을 포함 시켰습니다. 그것에 관해 전혀 특별한 것이 없으며 다른 상황에서 잘 작동합니다. 감사! –
AssignMessage 및 JSONToXML 정책은 소스 및 대상 변수가 제공되지 않은 경우 합당한 컨텍스트 기본값을 사용합니다. AssignMessage 정책의 AssignTo 요소와 JSONToXML 정책의 Source 및 OutputVariable 요소를 제거하고 작동하는지 확인하십시오. 마찬가지로 작동해야하는 "message"라는 명시 적 변수를 사용할 수도 있습니다. –