WSO2介体向用户返回错误消息

时间:2015-09-24 16:35:30

标签: wso2 wso2esb wso2-am

我目前正在尝试在WSO2 API管理器中编写java中介,以便在将消息发送到代理之前执行某些处理。 正常的用例工作正常,但我在例外方面遇到了一些麻烦。

我希望能够通过中介向用户发送消息,并提供消息和HTTP状态代码,但我无法找到方法。

import org.apache.synapse.mediators.transform.PayloadFactoryMediator;

public class MessageMediator extends PayloadFactoryMediator
{
    @Override
    public boolean mediate(org.apache.synapse.MessageContext synapseMessageContext)
    {
        boolean success = true;

        try{
            .... some processing
        }
        catch(Exception e)
        {
            success = false;
            handleException(e.getMessage(), e, synapseMessageContext);
            //write message back to user
        }

        return success;
    }
}

这是我的代理人:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="AMQPProxy"
       transports="https http"
       startOnLoad="true"
       trace="enable">
   <description/>
   <target>
      <endpoint>
        <default />
      </endpoint>
      <inSequence>
         <sequence key="MessageMediator"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
</proxy>

将错误返回给用户的正确程序是什么?

由于

1 个答案:

答案 0 :(得分:0)

如果你从insequence本身返回错误而没有退出wso2 esb调用另一个服务,你可以这样做: <payloadFactory media-type="json"> <format> { "Error":{ "errorType":"BusinessError","details":"some details" } } </format> <args/> </payloadFactory> <header name="To" scope="default" action="remove"/> <property name="RESPONSE" value="true" scope="default" type="STRING"/> <property name="HTTP_SC" value="400" scope="axis2" type="STRING"/> <property name="messageType" expression="$trp:Accept" scope="axis2" type="STRING"/> <send/>

您可以使用媒体类型与xml类似,请参阅payload factory mediator

如果你要从outsequence返回错误你可以使用makefault看到这里Fault mediator你可以尝试在insequence中使用fault mediator我还没有尝试过但是在发送inquenquence时你需要使用 <header name="To" scope="default" action="remove"/>