WSO2 Api Manager自定义错误消息

时间:2014-07-11 18:43:53

标签: web-services wso2 wso2-am

我想自定义api manager发送的错误消息,例如当访问令牌丢失或过期时。我已经按照here的描述配置了_auth_failure_handler_来返回json中的消息,并获得如下响应:

{"fault":{"code":"900902","message":"Missing Credentials","description":"Required OAuth credentials not provided"}}

我想修改消息描述并完全删除“代码”。有没有办法做到这一点?我试过调整序列没有运气。

2 个答案:

答案 0 :(得分:0)

修改错误代码不是明智的建议。然而,是的,可以修改有效载荷。使用filter mediatorJson path标识数据并使用enrich mediator根据需要修改有效负载。

答案 1 :(得分:0)

您需要定位https://docs.wso2.com/display/AM260/Error+Handling中的错误代码,并将其更新为自定义JSON消息。对于与身份验证令牌相关的错误,请尝试按以下方法修改_auth_failure_handler _:

<sequence name="_auth_failure_handler_" xmlns="http://ws.apache.org/ns/synapse">
<property name="error_message_type" value="application/json"/>
<filter source="get-property('ERROR_CODE')" regex="405">
  <then>
      <sequence key="converter"/>
      <drop/>
  </then>
  <else>
  </else>
</filter>
<filter source="get-property('ERROR_CODE')" regex="900901">
    <then>
        <sequence key="invalidCredential"/>
        <drop/>
    </then>
    <else>
    </else>
</filter>
<filter source="get-property('ERROR_CODE')" regex="900902">
    <then>
        <sequence key="missingCredential"/>
        <drop/>
    </then>
    <else>
    </else>
</filter>
<sequence key="_cors_request_handler_"/>

对于您的情况,Missing Credential具有900902代码,因此它将匹配,并且需要按以下方式定义missingCredential.xml:

<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="missingCredential">
    <payloadFactory media-type="json">
        <format>{ "status": "Error","message": "Missing Credentials"  }</format>
    <!--Add your custom message and format here. This will be your output-->
    </payloadFactory>
    <property name="RESPONSE" value="true"/>
    <header name="To" action="remove"/>
    <property name="HTTP_SC" value="401" scope="axis2"/>
    <property name="messageType" value="application/json" scope="axis2"/>
    <send/>
</sequence>