当前位置: 首页 > 知识库问答 >
问题:

在骡子 4 中读取 YAML 文件

甄正信
2023-03-14

我在Mule中定义了以下YAML属性文件

YAML属性文件

table:
  "customers": 
    name: customerID
  "orders": 
    name: ordersDateMin,orderDateMax

我知道要获得名称,我应该使用“#[p('table.customers.name')]。

我想知道的是,有没有任何方法可以通过传递.name来获取密钥,比如table。键或表。$。我的意思是,如果我通过customerID,我应该得到关键的“客户”。类似地,如果我传递orderDateMin,orderDate Max,它应该返回“orders”。

可能吗?

提前谢谢

共有1个答案

谢鸿羲
2023-03-14

试试这个:

%dw 2.0
output application/dw
var props = readUrl("classpath://properties.yaml","application/yaml")
var v = "customerID"

var leafsReversed = (o: Object, r: Object = {}) -> o match {
    case is Object -> r ++ (
        $ mapObject ( 
            (v,k,i) -> if (v["name"] is String) ({(v["name"]):k}) else leafsReversed(v,r)
        )
    )
    else -> r
}

---
[props,leafsReversed(props)]

这是一个有着非同寻常的解决方案的非同寻常的问题。< code>leafsReversed是一个查找< code >的递归函数

我给你的建议是另辟蹊径。

您的属性文件内容格式不正确,无法按上述方式工作,我将其更改为以下内容进行测试:

table:
  customers: 
    name: "customerID"
  orders: 
    name: "ordersDateMin,orderDateMax"

下面是Mule配置文件的内容:

<?xml version="1.0" encoding="UTF-8"?>

    <mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
        xmlns="http://www.mulesoft.org/schema/mule/core"
        xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
        <configuration-properties doc:name="Configuration properties" doc:id="4683e6d8-ad4d-453b-9f1c-19949241c336" file="properties.yaml" />
        <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="dd84777d-25b1-4e42-870b-8e7745689041" >
            <http:listener-connection host="0.0.0.0" port="8081" />
        </http:listener-config>
        <flow name="yaml-propsFlow1" doc:id="62367531-86df-4383-ac60-294a3ae58043" >
            <http:listener doc:name="Listener" doc:id="b1aae490-cfbb-49d9-8216-33e55607f1f2" config-ref="HTTP_Listener_config" path="/"/>
            <ee:transform doc:name="Transform Message" doc:id="63e74066-128f-464d-94f3-646872dfbb6f" >
                <ee:message >
                    <ee:set-payload ><![CDATA[%dw 2.0
    output application/json
    var props = readUrl("classpath://properties.yaml","application/yaml")
    var v = "customerID"
    
    var leafsReversed = (o: Object, r: Object = {}) -> o match {
        case is Object -> r ++ (
            $ mapObject ( 
                (v,k,i) -> if (v["name"] is String) ({(v["name"]):k}) else leafsReversed(v,r)
            )
        )
        else -> r
    }
    
    ---
    [props,leafsReversed(props)]]]></ee:set-payload>
                </ee:message>
            </ee:transform>
        </flow>
    </mule>
 类似资料:
  • demo.yaml definitions.yaml文件数据 我想读取 yaml 文件及其折射数据。 输出结果={content':{application/json':{'schema':{'title':'YamlTitle','type':'object','properties':{'name':{'type':'string','minLength':10,'example':'GANE

  • 我有以下问题。我根据一个给定的概要文件在yaml文件中读取的值创建一个数据源。 我当前的问题是,当我用“dev”配置文件启动应用程序时,serviceId的值是'my-prod-service'。 我在这里做错了什么?

  • 可以接受一个目录列表,这些目录为Spring boot应用程序托管yaml文件。 但是列出的目录必须有名为application的文件。yml,否则它们不会被拾取。 如果我的应用程序允许用户使用任何名称放置yaml文件,那么我不能使用此选项。 然后,我手动将文件名添加到属性中,如下所示 spring.config.locationfile1.ymlfile2.yml 每次添加新文件时,我都必须修改

  • 我正在使用Mule发布Web服务。一切正常,但我不明白为什么我的mule配置文件在Eclipse中无效。 这是Eclipse显示的错误消息: cvc-complex-type.2.4.a:发现以元素“cxf:simple-service”开头的无效内容。“http://www.mulesoft . org/schema/mule/core”:注释,“http://www . mule soft .

  • 具有 您可以轻松地在python中读取YAML文件,但它没有得到在末尾我到达错误(与): 但YAML规范允许: YAML使用三个破折号(“--”)将指令与文档内容分开。如果没有指令,这也可以作为文档开始的信号。三个点(“…”)指示文档的结束,但不启动新文档,用于通信通道。 那么,你怎么看这个 在python中?

  • 我是骡子和JMS的新手。只是试图弄清楚如何使用连接器添加JMSendpoint。是否提供了 Mule 提供的任何 JMS 实现,或者我是否需要使用外部 JMS 提供程序。