我目前正在尝试在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>
将错误返回给用户的正确程序是什么?
由于
答案 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"/>