首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Mule中的statusCode映射中检索ApiKit

如何从Mule中的statusCode映射中检索ApiKit
EN

Stack Overflow用户
提问于 2016-07-07 14:58:25
回答 4查看 1.2K关注 0票数 0

我们希望在我们的异常策略中用相同的进程处理我们捕获的所有异常。它是由apikit生成的。我们首先使用自定义组件发送大量内容,然后生成json响应。在使用DataWeave的响应中,我们希望设置相同的statusCode。但是,statusCode似乎不是一个可检索的变量。我是对的,还是有一个很好的方法来找回它?

代码语言:javascript
复制
    <apikit:mapping-exception-strategy xmlns:apikit="http://www.mulesoft.org/schema/mule/apikit" name="svc0031_hotel-apiKitGlobalExceptionMapping">
         <apikit:mapping statusCode="504">
            <apikit:exception value="org.mule.api.transformer.TransformerMessagingException"/>
            <flow-ref name="svc0031_manageErrors" doc:name="Manage Error"/>
        </apikit:mapping>
		<apikit:mapping statusCode="404">
            <apikit:exception value="org.mule.api.transformer.TransformerMessagingException"/>
            <flow-ref name="svc0031_manageErrors" doc:name="Manage Error"/>
        </apikit:mapping>
    </apikit:mapping-exception-strategy>
    <sub-flow name="svc0031_manageErrors">
        <set-payload value="#[groovy:message.exceptionPayload.rootException.message]" doc:name="Set BIP Payload"/>
        <custom-transformer class="se.zystems.baseline.BaselineLogging" doc:name="Log BIP Outgoing">
            <spring:property name="Level" value="ERROR"/>
            <spring:property name="ObjectId" value="CatchErrors"/>
            <spring:property name="TransactionStatus" value="failed"/>
        </custom-transformer>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{ 
  status : 400,
  message : payload,
  code : 42,
  more_info :"https://anypoint.mulesoft.com/apiplatform/nordic-choice-hotels"
}]]></dw:set-payload>
        </dw:transform-message>
        <logger level="INFO" doc:name="Logger"/>
    </sub-flow>

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-08 08:31:55

我发现了statusCode值的存储位置,这要感谢Jesús Pablo Fernández的回答。

然而,他的回答几乎是正确的,但是,statusCode不是存储在message.in界属性‘http.state’中,而是存储在message.out量属性‘http.state’中。甚至不需要提取变量,您只需在数据转换器中直接访问它,如下所示:

代码语言:javascript
复制
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{ 
  status : outboundProperties['http.status'],
  message : payload,
  code : 42,
  more_info :"https://anypoint.mulesoft.com/apiplatform/nordic-choice-hotels"
}]]></dw:set-payload>
        </dw:transform-message>

票数 2
EN

Stack Overflow用户

发布于 2016-07-07 15:52:57

好的,

如果使用http.status创建一个变量,则可以在映射器中使用它:

代码语言:javascript
复制
 <flow name="test">
        <set-variable variableName="httpStatus" value="#[message.inboundProperties['http.status']" doc:name="Variable"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json

---
{ 
  status : flowVars.httpStatus,
  message : payload,
  code : 42,
  more_info :"https://anypoint.mulesoft.com/apiplatform/nordic-choice-hotels"
}]]></dw:set-payload>
        </dw:transform-message>
    </flow>
票数 2
EN

Stack Overflow用户

发布于 2016-07-07 16:28:31

在APIKitExceptionStrategy中定义的状态代码将是那些作为http.status发送回响应头中的代码,同时也会引发相应的异常。例如,

代码语言:javascript
复制
<apikit:mapping statusCode="504">
        <apikit:exception value="org.mule.api.transformer.TransformerMessagingException"/>
        <flow-ref name="svc0031_manageErrors" doc:name="Manage Error"/>
    </apikit:mapping>

这意味着当org.mule.api.transformer.TransformerMessagingException异常被此异常块抛出并捕获时,504状态代码将作为响应头发送回。如果您想绕过statusCode异常块中的APIKit属性,则应该有另一个exceptionStrategy块来捕获所需的异常,然后可以像这样设置状态代码。

代码语言:javascript
复制
<set-property name="http.status" value="<the_desired_status, e.g. 401>" />

希望能帮上忙。

/Tony

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38248807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档