Raw Metadata Selector (.^raw)

Raw Metadata Selector (.^raw)

Returns the underlying binary value of a POJO. This selector is sometimes used when calculating an MD5 or some other cryptographic hash function to check for man-in-the-middle (MITM) attacks.

The following example uses the Set Payload component (set-payload) to produce a binary value, then uses the Transform Message component (ee:transform) component to return raw data for the MD5 (MD5(payload.^raw)) of the binary value. The Logger component (logger) is also set to write the raw data to the Studio console. For comparison, the second Logger returns the typical payload in a standard JSON format.

Mule App XML in Anypoint Studio:

<flow name=”rawcaret2Flow” >

  <scheduler doc:name=”Scheduler” >

    <scheduling-strategy >

      <fixed-frequency frequency=”30″ timeUnit=”SECONDS”/>

    </scheduling-strategy>

  </scheduler>

  <set-payload value=’#[“1234-5678-9123″ as Binary]’ doc:name=”Set Payload” />

  <ee:transform doc:name=”Transform Message” >

    <ee:message >

      <ee:set-payload ><![CDATA[%dw 2.0

import * from dw::Crypto

output application/json

{ “myRawData” : MD5(payload.^raw) }]]></ee:set-payload>

    </ee:message>

  </ee:transform>

  <logger level=”INFO” doc:name=”Logger” message=”#[payload.^raw]”/>

  <logger level=”INFO” doc:name=”Logger” message=”#[payload]”/>

</flow>

Notice that instead of producing standard JSON output, the raw output in the Logger message surrounds the entire payload in double-quotes and inserts new line characters (\n) for each new line.

Console Output in Anypoint Studio:

INFO  2019-04-22 14:10:14,537 [[MuleRuntime].cpuLight.08:

 [rawcaret2].rawcaret2Flow.CPU_LITE @764a5a61]

 [event: 058f6a90-6543-11e9-9d99-8c8590a99d48]

 org.mule.runtime.core.internal.processor.LoggerMessageProcessor:

 “{\n  “myRawData”: “5403e5a202c594871d59898b13054be5″\n}”

INFO  2019-04-22 14:10:14,540 [[MuleRuntime].cpuLight.08:

 [rawcaret2].rawcaret2Flow.CPU_LITE @764a5a61]

 [event: 058f6a90-6543-11e9-9d99-8c8590a99d48]

 org.mule.runtime.core.internal.processor.LoggerMessageProcessor:

 { “myRawData”: “5403e5a202c594871d59898b13054be5” }

The following example uses the HTTP Listener source (listener) to get the XML payload received via a POST request, then uses the Transform Message component (ee:transform) to get the encoding value of the XML payload, by returning the raw data ((payload.^raw as String) scan /encoding='([A-z0-9-]+)’/)). The Logger component (logger) returns the payload in a JAVA format.

Mule App XML in Anypoint Studio:

<http:listener-config name=”HTTP_Listener_config” >

    <http:listener-connection host=”0.0.0.0″ port=”8081″ />

</http:listener-config>

<flow name=”test-flow”>

    <http:listener path=”/test” config-ref=”HTTP_Listener_config”/>

    <ee:transform>

        <ee:message>

        <ee:set-payload ><![CDATA[%dw 2.0

output application/java

((payload.^raw as String) scan /encoding='([A-z0-9-]+)’/)[0][1]]]></ee:set-payload>

        </ee:message>

    </ee:transform>

    <logger level=”INFO” message=”#[payload]”/>

</flow>

Using your preferred REST client or API testing tool, send a POST request with the XML body:

<?xml version=’1.0′ encoding=’ISO-8859-1′?>

<test>

</test>

The Logger message returns the extracted encoding value ISO-8859-1:

Follow Me

If you like my post please follow me to read my latest post on programming and technology.

Instagram

Facebook

Leave a Reply

Your email address will not be published. Required fields are marked *