2015-10-23 2 views
0

Я хочу установить код http.status в преобразовании Dataweave. Для этого я устанавливаю http.status на Outbound Property вкладке, используя ниже код:Mule Dataweave - Как установить http.status

Outbound недвижимости ===> http.status

%dw 1.0 
%output application/java 
--- 
"404" when payload[0] == null 
otherwise "200" 

Но это не отражается, даже если полезная нагрузка равна нулю. Может ли кто-нибудь предложить?

EDIT:

Для справки Вот полный Dataweave код

<dw:transform-message doc:name="buildResponse"> 
    <dw:set-payload> 
     <![CDATA[%dw 1.0 
     %input payload application/java 
     %output application/json 
     --- 
     { 
      "customer": { 
       "id": payload[0].ID, 
       "name": payload[0].NAME, 
       "age": payload[0].AGE, 
       "address": { 
        "line1": payload[0].LINE1, 
        "line2": payload[0].LINE2, 
        "city": payload[0].CITY, 
        "state": payload[0].STATE, 
        "pincode": payload[0].PINCODE 
       } 
      } 
     } when (sizeOf payload) > 0 
     otherwise 
     { 
      "customer" : "not found" 
     }]]> 
    </dw:set-payload> 
    <dw:set-property propertyName="http.status"> 
     <![CDATA[%dw 1.0 
     %output application/java 
     --- 
     "404" when (sizeOf payload) == 0 
     otherwise "200"]]> 
    </dw:set-property> 
</dw:transform-message> 

ответ

1

EDIT.

Это потому, что первая часть сценария для передачи данных переписывает полезную нагрузку в JSON. Поэтому, когда вы используете sizeOf в скрипте set-property dw, на самом деле он делает sizeOf строку JSON, которая не равна 0.

Чтобы сделать эту работу, я бы, вероятно, сохранил исходную полезную нагрузку в flowVar и использовал ее в dw сценарий примерно так:

<http:listener-config name="HTTP_Listener_Configuration" 
     host="0.0.0.0" port="8085" doc:name="HTTP Listener Configuration" /> 
    <flow name="dataweave-testFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" 
      path="/test" doc:name="HTTP" /> 
     <set-payload value="#[[]]" doc:name="Set Payload" /> 
     <set-variable variableName="originalPayload" value="#[payload]" 
      doc:name="Variable" /> 
     <dw:transform-message doc:name="buildResponse"> 

      <dw:set-payload> 
     <![CDATA[%dw 1.0 
     %input payload application/java 
     %output application/json 
     --- 
     { 
      "customer": { 
       "id": payload[0].ID, 
       "name": payload[0].NAME, 
       "age": payload[0].AGE, 
       "address": { 
        "line1": payload[0].LINE1, 
        "line2": payload[0].LINE2, 
        "city": payload[0].CITY, 
        "state": payload[0].STATE, 
        "pincode": payload[0].PINCODE 
       } 
      } 
     } when (sizeOf payload) > 0 
     otherwise 
     { 
      "customer" : "not found" 
     }]]> 
      </dw:set-payload> 
      <dw:set-property propertyName="http.status"> 
     <![CDATA[%dw 1.0 
     %output application/java 
     --- 
     "404" when (sizeOf flowVars.originalPayload) == 0 
     otherwise "200"]]> 
      </dw:set-property> 
     </dw:transform-message> 
    </flow> 

Это ошибка с Dataweave на мой взгляд, и создал его здесь: ответ https://www.mulesoft.org/jira/browse/MULE-9021

+0

Я скопировал код и выполняется на мой местный, для меня это было 200 :( –

+0

С помощью этого точный код и ничего больше? curl -v -X GET 'http: // localhost: 8085/test' Можете ли вы опубликовать полную конфигурацию, которую используете? И какой http-клиент? –

+0

Можете ли вы посмотреть EDIT –

0

Райана Картера является правильным. Однако есть конкретный ответ, не сохраняя исходную полезную нагрузку в переменной потока.

<dw:transform-message doc:name="buildResponse"> 
    <dw:set-payload> 
     <![CDATA[%dw 1.0 
     %input payload application/java 
     %output application/json 
     --- 
     { 
      "customer": { 
       "id": payload[0].ID, 
       "name": payload[0].NAME, 
       "age": payload[0].AGE, 
       "address": { 
        "line1": payload[0].LINE1, 
        "line2": payload[0].LINE2, 
        "city": payload[0].CITY, 
        "state": payload[0].STATE, 
        "pincode": payload[0].PINCODE 
       } 
      } 
     } when (sizeOf payload) > 0 
     otherwise 
     { 
      "customer" : "not found" 
     }]]> 
    </dw:set-payload> 
    <dw:set-property propertyName="http.status"> 
     <![CDATA[%dw 1.0 
     %output application/java 
     --- 
     "404" when payload.customer == "not found" 
     otherwise "200"]]> 
    </dw:set-property> 
</dw:transform-message> 

Я сделал так: «404», когда payload.customer == «не найден»