Wso2 代理失败时如何响应状态500(服务器错误)?
在我们的测试环境中,我们构建了一个单向代理服务,它使用callout从其他几个服务获取数据。现在,当其中一个服务失败时,wso2代理仍会发送202个已接受的消息。是否可以“捕获异常”并返回不同的状态 我知道在这种情况下,最好使用请求-响应代理,但即使我们创建一个代理,只将负载存储在messagestore中,也可能会出现有关存储负载的数据库的问题(数据库关闭等),如果消息未存储在db中,我们也不希望返回状态202 编辑: 以下是我在第一次回答我的问题时建议的修改后的代理:Wso2 代理失败时如何响应状态500(服务器错误)?,wso2,wso2esb,esb,Wso2,Wso2esb,Esb,在我们的测试环境中,我们构建了一个单向代理服务,它使用callout从其他几个服务获取数据。现在,当其中一个服务失败时,wso2代理仍会发送202个已接受的消息。是否可以“捕获异常”并返回不同的状态 我知道在这种情况下,最好使用请求-响应代理,但即使我们创建一个代理,只将负载存储在messagestore中,也可能会出现有关存储负载的数据库的问题(数据库关闭等),如果消息未存储在db中,我们也不希望返回状态202 编辑: 以下是我在第一次回答我的问题时建议的修改后的代理: <?xml ve
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="notifyOfClaimChangeOut" serviceGroup="" startOnLoad="true"
trace="disable" transports="http https" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<property description="OUT_ONLY" name="OUT_ONLY" scope="default"
type="BOOLEAN" value="true"/>
<property name="FORCE_ERROR_ON_SOAP_FAULT" scope="default"
type="STRING" value="true"/>
<property description="OriginalPayload" expression="$body"
name="OriginalPayload" scope="default" type="STRING"/>
<iterate description=""
expression="$body//InsClaimData/PartnerList/PartnerEntry" id="" sequential="true">
<target>
<sequence>
<payloadFactory description="" media-type="xml">
<format>
<plat:FindCustomerSync xmlns:plat="http://platform.###.pl/">
<plat:request>
<plat:FirstName>$1</plat:FirstName>
<plat:LastName>$2</plat:LastName>
<plat:Pesel>$3</plat:Pesel>
</plat:request>
</plat:FindCustomerSync>
</format>
<args>
<arg evaluator="xml" expression="$body/PartnerEntry/BusinessPartner/personData/firstName"/>
<arg evaluator="xml" expression="$body/PartnerEntry/BusinessPartner/personData/lastName"/>
<arg evaluator="xml" expression="$body/PartnerEntry/BusinessPartner/personData/PESEL"/>
</args>
</payloadFactory>
<log level="custom">
<property expression="$body" name="property_name"/>
</log>
<callout action="http://platform.###.pl/FindCustomerSync"
description="QueryCustomersOut"
endpointKey="gov:###/endpoints/###/QueryCustomersOut.xml" initAxis2ClientOptions="false">
<source type="envelope"/>
<target key="QueryCustomersOutResponse"/>
</callout>
<log description="" level="custom" separator=",">
<property expression="$ctx:QueryCustomersOutResponse"
name="QueryCustomersOut"
xmlns:cla="http://###.###.io/service/internal/ClaimService" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
</log>
</sequence>
</target>
</iterate>
<!--
<callout description="ClaimService"
endpointKey="gov:###/endpoints/###/ClaimService.xml" initAxis2ClientOptions="false">
<source type="envelope"/>
<target key="ClaimServiceResponse"/>
</callout>
<log description="ClaimService Response" level="custom">
<property expression="$ctx:ClaimServiceResponse" name="ClaimServiceResponse"/>
</log>
-->
<drop/>
</inSequence>
<outSequence/>
<faultSequence>
<property name="HTTP_SC" scope="axis2" type="STRING" value="500"/>
<log>
<property name="Error" value="Fault :("/>
</log>
</faultSequence>
</target>
<publishWSDL key="gov:###/schemas/###/ClaimService.wsdl"/>
</proxy>
$1
$2
$3
您可以使用HTTP\u SC属性发送状态500。您还需要构造错误消息
<property name="HTTP_SC" value="500" scope="axis2"/>
<makefault version="soap11">
你可以参考以获得一个想法
此外,在插入序列中,您可能需要在SOAP\u故障属性上设置FORCE\u ERROR\u,以便在发生SOAP故障时移动到故障序列。一些
Ok,我确实在代理的开头设置了FORCE\u ERROR\u ON\u SOAP\u FAULT,但是当我发送一个非合法的xml时,它仍然会以202作为响应。。所以这并不能解决我的问题。另外,如果我的端点(我的代理正在调用的服务的端点)不正确,代理会将错误记录到控制台,并以202进行响应。在您在我的第一个问题中建议的更改之后,我添加了我的代理代码。另外,我想你忽略了我正在创建一个单向代理的事实,我只是通过将这个属性添加到一个outSequence来检查它是否工作,它工作得很好。请检查是否执行了故障序列。
<inSequence>
<property name="FORCE_ERROR_ON_SOAP_FAULT" value="true" scope="default" type="STRING"/>
</inSequence>