【问题标题】:How to get read a JSON string from a file in Mule 4如何从 Mule 4 中的文件中读取 JSON 字符串
【发布时间】:2019-11-03 16:48:07
【问题描述】:

我正在尝试通过将有效负载设置为我保存在文件中的 JSON 对象来创建一个模拟 HTTP 请求的 MUnit 测试。在 Mule 3 中,我会刚刚完成 getResource('fileName.json').asString() 并且效果很好。但是在 Mule 4 中,我不能静态调用 getResource。

我找到了一个建议我使用MunitTools::getResourceAsStringforum post on the Mulesoft forums。当我运行测试时,我确实看到了 JSON 对象,但其中包含所有 \n\r 字符以及转义所有引号的 \。显然这意味着我的 JSON 格式不再正确。

理想情况下,我想找到 MunitTools 的参考,以便我可以看到我可以调用的函数列表,并且可能找到不添加转义字符的函数,但我没有任何运气。如果有人知道我可以参考的一些参考文件,请告诉我。

无法找到一种方法来返回没有额外字符的数据,我尝试通过 dataweave 替换它们。替换 \n\r 时这很好,但由于每个双引号前面还有更多 \s,我似乎无法让这些消失。

如果我这样做......

replace (/\/) with ("")

...我收到一个错误。一位同事建议针对每个\" 并将它们替换为",但这是一个问题,因为这给了我"""。为了解决这个问题,我已经尝试过

replace(/\"/) with "\""

...这不会导致任何错误,但由于某种原因,它将\ 读取为文字,因此它将原始字符串替换为自身。我也试过... 用。。。来代替 '”' ...但这也会导致错误

我也愿意接受任何其他解决方案。

谢谢

--画了

【问题讨论】:

    标签: java json regex munit mulesoft


    【解决方案1】:

    我也有同样的顾虑,所以我开始使用readUrl() 方法。这是一种 DataWeave 方法,因此您应该能够在任何 MUnit 处理器中使用它。这是我如何在设置事件处理器中使用它的示例。它读取 JSON 文件,然后根据我自己的需要将其转换为 Java,但您可以根据需要将 java 替换为 JSON。

    <munit:set-event doc:name="Set Event" doc:id="e7b1da19-f746-4964-a7ae-c23aedce5e6f" >
            <munit:payload mediaType="application/java" value="#[output application/java --- readUrl('classpath://singleItemRequest.json','application/json')]"/>
    </munit:set-event>
    

    这是 readUrl https://docs.mulesoft.com/mule-runtime/4.2/dw-core-functions-readurl 的文档

    希望有帮助!

    【讨论】:

    • 骡子 4.2.1。这对我来说是这样的,它与这个答案相匹配:
    【解决方案2】:

    关注这个 sn-p(更具体地说是 munit-tools:then-return 标签):

    <munit-tools:mock-when doc:name="Mock GET /users" doc:id="89c8b7fb-1e94-446f-b9a0-ef7840333328" processor="http:request" >
        <munit-tools:with-attributes >
            <munit-tools:with-attribute attributeName="doc:name" whereValue="GET /users" />
        </munit-tools:with-attributes>
        <munit-tools:then-return>
            <munit-tools:payload value="#[read(MunitTools::getResourceAsString('examples/responses/anypoint-get-users-response.json'), &quot;application/json&quot;)]" />
        </munit-tools:then-return>
    </munit-tools:mock-when>
    

    它模拟一个 HTTP 请求并使用 read() 函数返回一个 JSON 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2019-05-23
      相关资源
      最近更新 更多