Wso2 代理失败时如何响应状态500(服务器错误)?

Wso2 代理失败时如何响应状态500(服务器错误)?,wso2,wso2esb,esb,Wso2,Wso2esb,Esb,在我们的测试环境中,我们构建了一个单向代理服务,它使用callout从其他几个服务获取数据。现在,当其中一个服务失败时,wso2代理仍会发送202个已接受的消息。是否可以“捕获异常”并返回不同的状态 我知道在这种情况下,最好使用请求-响应代理,但即使我们创建一个代理,只将负载存储在messagestore中,也可能会出现有关存储负载的数据库的问题(数据库关闭等),如果消息未存储在db中,我们也不希望返回状态202 编辑: 以下是我在第一次回答我的问题时建议的修改后的代理: <?xml ve

在我们的测试环境中,我们构建了一个单向代理服务,它使用callout从其他几个服务获取数据。现在,当其中一个服务失败时,wso2代理仍会发送202个已接受的消息。是否可以“捕获异常”并返回不同的状态

我知道在这种情况下,最好使用请求-响应代理,但即使我们创建一个代理,只将负载存储在messagestore中,也可能会出现有关存储负载的数据库的问题(数据库关闭等),如果消息未存储在db中,我们也不希望返回状态202

编辑:

以下是我在第一次回答我的问题时建议的修改后的代理:

<?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>