2016-07-07 4 views
0

例外処理で同じプロセスで捕捉したすべての例外を処理します。これはapikitによって生成されたものです。私たちはまずカスタムコンポーネントをたくさん送ってから、jsonレスポンスを生成します。 DataWeaveの応答では、同じstatusCodeを設定します。しかし、statusCodeは検索可能な変数ではないようです。正しいですか、それを取得する良い方法がありますか?グッドMuleのApiKitマッピングからstatusCodeを取得する方法

<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> 
 
\t \t <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>

答えて

2

は、私が「彼はほとんど右の彼の答えに、しかし、からstatusCodeは[message.inboundPropertiesにない格納されたJesús Pablo Fernández

によって解答にからstatusCode値が保存されているおかげで判明しましたhttp.status ']ではなく、message.outboundProperties [' http.status ']にあります。一つでもちょうど直接このようなデータ変換器でそれをアクセスすることができ、変数を抽出する必要:

 <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

あなたはhttp.statusで変数を作成した場合、あなたはマッパーでそれを使用することができます。で定義されて

<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> 
+0

ありがとうございますが、apikit:mapping statusCode = "value"はmessage.inboundProperties ['http.status']に渡されないため、後でこのフローで使用することはできません。 –

+0

あなたはほとんど正しいですが、私の答えを確認してください。もう一度ありがとう! –

0

ステータスコードをAPIKitExceptionStrategyは、対応する例外が発生した場合、http.statusとして応答ヘッダーに戻されます。例えば は、

<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のステータスコードがバックレスポンスヘッダとして送信されることを意味します。 あなたはAPIKit例外ブロックでからstatusCode属性をバイパスしたい場合は、ご希望の例外をキャッチするために、別のexceptionStrategyブロックを持っている必要があり、その後、あなたはその

<set-property name="http.status" value="<the_desired_status, e.g. 401>" /> 

のようなあなたのステータスコードを設定することができ、それがお役に立てば幸いです。

/トニー・

0

良いスタニスラフ・イワノフ、

私はAPIKitで実装フローを持っていません、これは私が付随するコードであり、inboundProperties http.statusにプロパティがあるかどうかは、値が含まれている必要がある場合は、フローを持っていない場合は前の手順で値を変更する可能性があるためです。

私は彼にマッパーのoutboundPropertiesに直接アクセスするように指摘しましたが、私は気づいていませんでした。ありがとうございます。

+0

助けてよろしいですか?ありがとう、素敵な週末を! –

関連する問題